linux-bcache.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] bcache: prevent potential division by zero error
@ 2023-09-06  1:22 Rand Deeb
  2023-09-06  3:39 ` Coly Li
  0 siblings, 1 reply; 2+ messages in thread
From: Rand Deeb @ 2023-09-06  1:22 UTC (permalink / raw)
  To: Coly Li, Kent Overstreet, linux-bcache, linux-kernel
  Cc: deeb.rand, lvc-project, voskresenski.stanislav, Rand Deeb

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@gmail.com>
---
 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


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] bcache: prevent potential division by zero error
  2023-09-06  1:22 [PATCH] bcache: prevent potential division by zero error Rand Deeb
@ 2023-09-06  3:39 ` Coly Li
  0 siblings, 0 replies; 2+ messages in thread
From: Coly Li @ 2023-09-06  3:39 UTC (permalink / raw)
  To: Rand Deeb
  Cc: Kent Overstreet, Bcache Linux, linux-kernel, deeb.rand,
	lvc-project, voskresenski.stanislav



> 2023年9月6日 09:22,Rand Deeb <rand.sec96@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@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
> 


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-09-06  3:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-06  1:22 [PATCH] bcache: prevent potential division by zero error Rand Deeb
2023-09-06  3:39 ` Coly Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).