From ff9feb7e4e0a472f92ba931c517eabede44945ee Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 4 Mar 2008 14:29:31 -0800 Subject: [PATCH] --- yaml --- r: 86842 b: refs/heads/master c: a1801f858e57f87a7f79914346921cc729632295 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/md/md.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 1b489fe14f0e..5e27e8f68b15 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8311c29d40235062a843f4a8e8a70a44af6fe4c9 +refs/heads/master: a1801f858e57f87a7f79914346921cc729632295 diff --git a/trunk/drivers/md/md.c b/trunk/drivers/md/md.c index 7da6ec244e15..b375de5c1af2 100644 --- a/trunk/drivers/md/md.c +++ b/trunk/drivers/md/md.c @@ -1105,7 +1105,11 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256; bmask = queue_hardsect_size(rdev->bdev->bd_disk->queue)-1; if (rdev->sb_size & bmask) - rdev-> sb_size = (rdev->sb_size | bmask)+1; + rdev->sb_size = (rdev->sb_size | bmask) + 1; + + if (minor_version + && rdev->data_offset < sb_offset + (rdev->sb_size/512)) + return -EINVAL; if (sb->level == cpu_to_le32(LEVEL_MULTIPATH)) rdev->desc_nr = -1; @@ -1137,7 +1141,7 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) else ret = 0; } - if (minor_version) + if (minor_version) rdev->size = ((rdev->bdev->bd_inode->i_size>>9) - le64_to_cpu(sb->data_offset)) / 2; else rdev->size = rdev->sb_offset;