[lvc-project] [PATCH] bcache: prevent potential division by zero error

Coly Li colyli at suse.de
Wed Sep 6 06:39:59 MSK 2023



> 2023年9月6日 09:22,Rand Deeb <rand.sec96 at gmail.com> 写道:
> 
> In SHOW(), the variable 'n' is of type 'size_t.' While there is a
> conditional check to verify that 'n' is not equal to zero before
> executing the 'do_div' macro, concerns arise regarding potential
> division by zero error in 64-bit environments.
> 
> The concern arises when 'n' is 64 bits in size, greater than zero, and
> the lower 32 bits of it are zeros. In such cases, the conditional check
> passes because 'n' is non-zero, but the 'do_div' macro casts 'n' to
> 'uint32_t,' effectively truncating it to its lower 32 bits.
> Consequently, the 'n' value becomes zero.
> 
> To fix this potential division by zero error and ensure precise
> division handling, this commit replaces the 'do_div' macro with
> div64_u64(). div64_u64() is designed to work with 64-bit operands,
> guaranteeing that division is performed correctly.
> 
> This change enhances the robustness of the code, ensuring that division
> operations yield accurate results in all scenarios, eliminating the
> possibility of division by zero, and improving compatibility across
> different 64-bit environments.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Signed-off-by: Rand Deeb <rand.sec96 at gmail.com>

Thanks, added into my for-next queue.

Coly Li

> ---
> drivers/md/bcache/sysfs.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
> index 554e3afc9b68..ca3e2f000cd4 100644
> --- a/drivers/md/bcache/sysfs.c
> +++ b/drivers/md/bcache/sysfs.c
> @@ -1078,7 +1078,7 @@ SHOW(__bch_cache)
> sum += INITIAL_PRIO - cached[i];
> 
> if (n)
> - do_div(sum, n);
> + sum = div64_u64(sum, n);
> 
> for (i = 0; i < ARRAY_SIZE(q); i++)
> q[i] = INITIAL_PRIO - cached[n * (i + 1) /
> -- 
> 2.34.1
> 




More information about the lvc-project mailing list