From: NeilBrown Date: Wed, 5 Dec 2018 23:35:41 +0000 (+1100) Subject: Grow: avoid overflow in compute_backup_blocks() X-Git-Tag: mdadm-4.2-rc1~125 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=085df42259cba7863cd6ebe5cd0d8492ac5b869e;p=thirdparty%2Fmdadm.git 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 Signed-off-by: NeilBrown Signed-off-by: Jes Sorensen --- 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; }