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