Blame SOURCES/0008-Grow-avoid-overflow-in-compute_backup_blocks.patch

c8f3db
From 085df42259cba7863cd6ebe5cd0d8492ac5b869e Mon Sep 17 00:00:00 2001
c8f3db
From: NeilBrown <neilb@suse.com>
c8f3db
Date: Thu, 6 Dec 2018 10:35:41 +1100
c8f3db
Subject: [RHEL7.7 PATCH 08/21] Grow: avoid overflow in compute_backup_blocks()
c8f3db
c8f3db
With a chunk size of 16Meg and data drive count of 8,
c8f3db
this calculate can easily overflow the 'int' type that
c8f3db
is used for the multiplications.
c8f3db
So force it to use "long" instead.
c8f3db
c8f3db
Reported-and-tested-by: Ed Spiridonov <edo.rus@gmail.com>
c8f3db
Signed-off-by: NeilBrown <neilb@suse.com>
c8f3db
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
c8f3db
---
c8f3db
 Grow.c | 3 ++-
c8f3db
 1 file changed, 2 insertions(+), 1 deletion(-)
c8f3db
c8f3db
diff --git a/Grow.c b/Grow.c
c8f3db
index 4436a4d..76f82c0 100644
c8f3db
--- a/Grow.c
c8f3db
+++ b/Grow.c
c8f3db
@@ -1196,7 +1196,8 @@ unsigned long compute_backup_blocks(int nchunk, int ochunk,
c8f3db
 	/* Find GCD */
c8f3db
 	a = GCD(a, b);
c8f3db
 	/* LCM == product / GCD */
c8f3db
-	blocks = (ochunk/512) * (nchunk/512) * odata * ndata / a;
c8f3db
+	blocks = (unsigned long)(ochunk/512) * (unsigned long)(nchunk/512) *
c8f3db
+		odata * ndata / a;
c8f3db
 
c8f3db
 	return blocks;
c8f3db
 }
c8f3db
-- 
c8f3db
2.7.5
c8f3db