From: Neil Brown Date: Wed, 11 Apr 2007 03:31:07 +0000 (+1000) Subject: Fix calculation for size of filemap_attr array in md/bitmap. X-Git-Tag: v2.6.20.7~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d6a42397823d5de05303941ad3df8a11e06a11a;p=thirdparty%2Fkernel%2Fstable.git Fix calculation for size of filemap_attr array in md/bitmap. If 'num_pages' were ever 1 more than a multiple of 8 (32bit platforms) for of 16 (64 bit platforms). filemap_attr would be allocated one 'unsigned long' shorter than required. We need a round-up in there. Signed-off-by: Neil Brown Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c index 059704fbb753a..cef12872508af 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c @@ -863,9 +863,7 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start) /* We need 4 bits per page, rounded up to a multiple of sizeof(unsigned long) */ bitmap->filemap_attr = kzalloc( - (((num_pages*4/8)+sizeof(unsigned long)-1) - /sizeof(unsigned long)) - *sizeof(unsigned long), + roundup( DIV_ROUND_UP(num_pages*4, 8), sizeof(unsigned long)), GFP_KERNEL); if (!bitmap->filemap_attr) goto out;