Re: [PATCH] riscv: lib: Fix address overflow due to large count values in strnlen ZBB path

From: gao.rui

Date: Mon Aug 24 2026 - 04:13:46 EST



Hi Aurelien,

>On 2026-08-19 16:18, gao.rui@xxxxxxxxxx wrote:
>> Hi all,
>> 
>> This patch fixes an issue in the RISC-V ZBB optimized strnlen implementation.
>> 
>> Problem description: When using the ZBB optimized strnlen implementation, passing very large count values (such as SIZE_MAX) can cause address overflow and return incorrect results.
>> 
>> This issue was observed in device-mapper tests:
>> 
>> sh-5.2# dmsetup create testname9 --table "0 8 zero"
>> sh-5.2# cat /sys/block/dm-*/dm/name
>> testname
>> sh-5.2# dmsetup remove testname9
>> 
>> The overflow in strnlen caused failures in string handling during device-mapper operations.
>> 
>> Patch summary:
>> - Explicitly introduce the strnlen_generic label.
>> - Simplify the generic implementation loop.
>
>This part should be in a separate patch, separated from the bug fix, and 
>if possible with some benchmark.

I agree, I will split the generic implementation changes into a separate patch and provide benchmark results 
to show the performance impact.

>> - Add fallback logic in strnlen_zbb to redirect to the generic path when a0 + a1 overflows.
>> This ensures correct behavior for large count values and SIZE_MAX cases.
>
>Is there a way to instead to fix the strnlen_zbb to avoid the fallback?
>

It is possible to make strnlen_zbb work correctly without fallback, I will reconsider this point:  if the performance loss 
of the non-fallback version turns out to be small, then using the non-fallback code may be acceptable.

Regards,  
Rui