FAILED: patch "[PATCH] riscv: hwprobe: initialize pair->value in hwprobe_one_pair()" failed to apply to 6.18-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x d0fc6fab20460add1f27402cd8b945d094a56b21
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026091613-hardiness-identify-3dc6@gregkh' --subject-prefix 'PATCH 6.18.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d0fc6fab20460add1f27402cd8b945d094a56b21 Mon Sep 17 00:00:00 2001
From: Andy Chiu <[email protected]>
Date: Mon, 31 Aug 2026 19:11:23 -0600
Subject: [PATCH] riscv: hwprobe: initialize pair->value in hwprobe_one_pair()
The vendor-extension handlers reached from hwprobe_one_pair() (hwprobe_isa_vendor_ext_thead_0() and friends) only OR the present bits into pair->value via VENDOR_EXTENSION_SUPPORTED() and clear their own missing bits; they assume the caller has already zeroed pair->value.
That holds for hwprobe_get_values() (it zeroes each pair) and hwprobe_get_cpus() (it re-initializes its scratch pair per key), but not for complete_hwprobe_vdso_data(), which reuses a single pair across all keys without re-zeroing. A vendor key therefore inherits stale bits from the previously probed key, and the wrong value is cached in the vDSO all_cpu_hwprobe_values[] and handed to userspace on the fast patih.
Zero pair->value once at the top of hwprobe_one_pair() so every handler starts from a clean value regardless of the caller, and drop the now redundant zeroing in the *_BLOCK_SIZE cases. hwprobe_isa_ext0() keeps its own zeroing because hwprobe_ext0_has() calls it directly, bypassing hwprobe_one_pair().
arch/riscv/kernel/sys_hwprobe.c +2 -3
@@ -297,6 +297,8 @@ static u64 hwprobe_vec_misaligned(const struct cpumask *cpus)static void hwprobe_one_pair (struct riscv_hwprobe *pair,const struct cpumask *cpus) { + pair->value =0 ; +switch (pair->key) {case RISCV_HWPROBE_KEY_MVENDORID :case RISCV_HWPROBE_KEY_MARCHID :
@@ -331,17 +333,14 @@ static void hwprobe_one_pair(struct riscv_hwprobe *pair,break ;case RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE : - pair->value =0 ;if (hwprobe_ext0_has (cpus,RISCV_HWPROBE_EXT_ZICBOZ )) pair->value = riscv_cboz_block_size;break ;case RISCV_HWPROBE_KEY_ZICBOM_BLOCK_SIZE : - pair->value =0 ;if (hwprobe_ext0_has (cpus,RISCV_HWPROBE_EXT_ZICBOM )) pair->value = riscv_cbom_block_size;break ;case RISCV_HWPROBE_KEY_ZICBOP_BLOCK_SIZE : - pair->value =0 ;if (hwprobe_ext0_has (cpus,RISCV_HWPROBE_EXT_ZICBOP )) pair->value = riscv_cbop_block_size;break ;