|
@@ -1308,7 +1308,12 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev)
|
|
|
}
|
|
|
if (mddev->level != LEVEL_MULTIPATH) {
|
|
|
int role;
|
|
|
- role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]);
|
|
|
+ if (rdev->desc_nr < 0 ||
|
|
|
+ rdev->desc_nr >= le32_to_cpu(sb->max_dev)) {
|
|
|
+ role = 0xffff;
|
|
|
+ rdev->desc_nr = -1;
|
|
|
+ } else
|
|
|
+ role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]);
|
|
|
switch(role) {
|
|
|
case 0xffff: /* spare */
|
|
|
break;
|