md: linear: Fix a division by zero bug for very small arrays.
We currently oops with a divide error on starting a linear software raid array consisting of at least two very small (< 500K) devices. The bug is caused by the calculation of the hash table size which tries to compute sector_div(sz, base) with "base" being zero due to the small size of the component devices of the array. Fix this by requiring the hash spacing to be at least one which implies that also "base" is non-zero. This bug has existed since about 2.6.14. Cc: stable@kernel.org Signed-off-by: Andre Noll <maan@systemlinux.org> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
a53a6c8575
commit
f1cd14ae52
1 changed files with 2 additions and 0 deletions
|
@ -148,6 +148,8 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
|
|||
|
||||
min_sectors = conf->array_sectors;
|
||||
sector_div(min_sectors, PAGE_SIZE/sizeof(struct dev_info *));
|
||||
if (min_sectors == 0)
|
||||
min_sectors = 1;
|
||||
|
||||
/* min_sectors is the minimum spacing that will fit the hash
|
||||
* table in one PAGE. This may be much smaller than needed.
|
||||
|
|
Loading…
Reference in a new issue