linux/arch/riscv
Björn Töpel 81a1dd10b0
riscv, lib: Fix Zbb strncmp
The Zbb optimized strncmp has two parts; a fast path that does XLEN/8B
per iteration, and a slow that does one byte per iteration.

The idea is to compare aligned XLEN chunks for most of strings, and do
the remainder tail in the slow path.

The Zbb strncmp has two issues in the fast path:

Incorrect remainder handling (wrong compare): Assume that the string
length is 9. On 64b systems, the fast path should do one iteration,
and one iteration in the slow path. Instead, both were done in the
fast path, which lead to incorrect results. An example:

  strncmp("/dev/vda", "/dev/", 5);

Correct by changing "bgt" to "bge".

Missing NULL checks in the second string: This could lead to incorrect
results for:

  strncmp("/dev/vda", "/dev/vda\0", 8);

Correct by adding an additional check.

Fixes: b6fcdb191e ("RISC-V: add zbb support to string functions")
Suggested-by: Heiko Stuebner <heiko.stuebner@vrull.eu>
Signed-off-by: Björn Töpel <bjorn@rivosinc.com>
Tested-by: Conor Dooley <conor.dooley@microchip.com>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20230228184211.1585641-1-bjorn@kernel.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
2023-02-28 18:42:38 -08:00
..
boot SoC: DT changes for 6.3 2023-02-20 15:49:56 -08:00
configs riscv: defconfig: Enable the Allwinner D1 platform and drivers 2023-01-27 23:10:08 +01:00
errata RISC-V: take text_mutex during alternative patching 2023-02-21 17:21:33 -08:00
include RISC-V Patches for the 6.3 Merge Window, Part 1 2023-02-25 11:14:08 -08:00
kernel RISC-V Patches for the 6.3 Merge Window, Part 1 2023-02-25 11:14:08 -08:00
kvm riscv: KVM: Switch has_svinval() to riscv_has_extension_unlikely() 2023-01-31 23:29:44 -08:00
lib riscv, lib: Fix Zbb strncmp 2023-02-28 18:42:38 -08:00
mm RISC-V Patches for the 6.3 Merge Window, Part 1 2023-02-25 11:14:08 -08:00
net riscv, bpf: Add bpf trampoline support for RV64 2023-02-17 21:45:30 +01:00
purgatory RISC-V: add infrastructure to allow different str* implementations 2023-01-31 11:43:23 -08:00
Kbuild riscv: move errata/ and kvm/ builds to arch/riscv/Kbuild 2022-06-01 22:26:32 -07:00
Kconfig RISC-V Patches for the 6.3 Merge Window, Part 1 2023-02-25 11:14:08 -08:00
Kconfig.debug RISC-V: Remove EARLY_PRINTK support 2018-12-17 10:23:46 -08:00
Kconfig.erratas drivers/perf: riscv_pmu_sbi: add support for PMU variant on T-Head C9xx cores 2022-10-27 14:35:20 -07:00
Kconfig.socs RISC-V Patches for the 6.3 Merge Window, Part 1 2023-02-25 11:14:08 -08:00
Makefile RISC-V Patches for the 6.3 Merge Window, Part 1 2023-02-25 11:14:08 -08:00