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