summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoman Smirnov <r.smirnov@omp.ru>2024-03-05 16:45:09 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-04-13 13:05:12 +0200
commit512a01da7134bac8f8b373506011e8aaa3283854 (patch)
tree276aec7917af69c96de47132125ab536cf150133
parentc87e811cae7e1865046f64ce130e58f2af0a72c0 (diff)
downloadlinux-stable-512a01da7134bac8f8b373506011e8aaa3283854.tar.gz
linux-stable-512a01da7134bac8f8b373506011e8aaa3283854.tar.bz2
linux-stable-512a01da7134bac8f8b373506011e8aaa3283854.zip
block: prevent division by zero in blk_rq_stat_sum()
[ Upstream commit 93f52fbeaf4b676b21acfe42a5152620e6770d02 ] The expression dst->nr_samples + src->nr_samples may have zero value on overflow. It is necessary to add a check to avoid division by zero. Found by Linux Verification Center (linuxtesting.org) with Svace. Signed-off-by: Roman Smirnov <r.smirnov@omp.ru> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru> Link: https://lore.kernel.org/r/20240305134509.23108-1-r.smirnov@omp.ru Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--block/blk-stat.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/block/blk-stat.c b/block/blk-stat.c
index da9407b7d4ab..41be89ecaf20 100644
--- a/block/blk-stat.c
+++ b/block/blk-stat.c
@@ -28,7 +28,7 @@ void blk_rq_stat_init(struct blk_rq_stat *stat)
/* src is a per-cpu stat, mean isn't initialized */
void blk_rq_stat_sum(struct blk_rq_stat *dst, struct blk_rq_stat *src)
{
- if (!src->nr_samples)
+ if (dst->nr_samples + src->nr_samples <= dst->nr_samples)
return;
dst->min = min(dst->min, src->min);