linux-yocto/lib/raid6
Chunyan Zhang bc75552b80
raid6: riscv: Fix NULL pointer dereference caused by a missing clobber
When running the raid6 user-space test program on RISC-V QEMU, there's a
segmentation fault which seems caused by accessing a NULL pointer,
which is the pointer variable p/q in raid6_rvv*_gen/xor_syndrome_real(),
p/q should have been equal to dptr[x], but when I use GDB command to
see its value, which was 0x10 like below:

"
Program received signal SIGSEGV, Segmentation fault.
0x0000000000011062 in raid6_rvv2_xor_syndrome_real (disks=<optimized out>, start=0, stop=<optimized out>, bytes=4096, ptrs=<optimized out>) at rvv.c:386
(gdb) p p
$1 = (u8 *) 0x10 <error: Cannot access memory at address 0x10>
"

The issue was found to be related with:
1) Compile optimization
   There's no segmentation fault if compiling the raid6test program with
   the optimization flag -O0.
2) The RISC-V vector command vsetvli
   If not used t0 as the first parameter in vsetvli, there's no
   segmentation fault either.

This patch selects the 2nd solution to fix the issue.

[Palmer: The actual issue here is a missing clobber in the vsetvli code.
It's a little tricky: we've already probed for VLENB so we don't need to
look at the output register, we just need to have an X register in the
instruction as that's the form required to actually set VL.  Thus we
clobber a register, and without describing that we end up breaking
compilers.]

Fixes: 6093faaf95 ("raid6: Add RISC-V SIMD syndrome and recovery calculations")
Signed-off-by: Chunyan Zhang <zhangchunyan@iscas.ac.cn>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20250610101234.1100660-3-zhangchunyan@iscas.ac.cn
Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com>
2025-06-12 12:21:48 -07:00
..
test raid6: skip avx512 checks 2025-04-30 21:53:48 +02:00
.gitignore
algos.c RISC-V Patches for the 6.16 Merge Window, Part 1 2025-06-06 18:05:18 -07:00
altivec.uc
avx2.c
avx512.c raid6: skip avx512 checks 2025-04-30 21:53:48 +02:00
int.uc lib/raid6: Drop IA64 support 2023-09-11 08:13:18 +00:00
loongarch_simd.c raid6: Add LoongArch SIMD syndrome calculation 2023-09-06 22:53:55 +08:00
loongarch.h raid6: Add LoongArch SIMD syndrome calculation 2023-09-06 22:53:55 +08:00
Makefile raid6: Add RISC-V SIMD syndrome and recovery calculations 2025-06-05 14:03:07 -07:00
mktables.c raid6: guard the tables.c include of <linux/export.h> with __KERNEL__ 2023-08-15 09:40:27 -07:00
mmx.c
neon.c
neon.h
neon.uc
recov_avx2.c
recov_avx512.c raid6: skip avx512 checks 2025-04-30 21:53:48 +02:00
recov_loongarch_simd.c raid6: Add LoongArch SIMD recovery implementation 2023-09-06 22:53:55 +08:00
recov_neon_inner.c
recov_neon.c
recov_rvv.c raid6: Add RISC-V SIMD syndrome and recovery calculations 2025-06-05 14:03:07 -07:00
recov_s390xc.c
recov_ssse3.c
recov.c raid6: remove the <linux/export.h> include from recov.c 2023-08-15 09:40:27 -07:00
rvv.c raid6: riscv: Fix NULL pointer dereference caused by a missing clobber 2025-06-12 12:21:48 -07:00
rvv.h raid6: Add RISC-V SIMD syndrome and recovery calculations 2025-06-05 14:03:07 -07:00
s390vx.uc s390/vx: Convert cpu_has_vx() to cpu feature function 2025-03-04 17:18:07 +01:00
sse1.c
sse2.c
unroll.awk
vpermxor.uc
x86.h