From 5f052f538e74609e2b22cb788ffb8743626b9b7a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 15 Mar 2012 12:08:51 -0700 Subject: [PATCH] fuzz fixup for a 3.0 patch --- ...er-dereference-in-sd_revalidate_disk.patch | 82 ++++++++++--------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/queue-3.0/block-fix-null-pointer-dereference-in-sd_revalidate_disk.patch b/queue-3.0/block-fix-null-pointer-dereference-in-sd_revalidate_disk.patch index 092231dc9f4..10ae666244a 100644 --- a/queue-3.0/block-fix-null-pointer-dereference-in-sd_revalidate_disk.patch +++ b/queue-3.0/block-fix-null-pointer-dereference-in-sd_revalidate_disk.patch @@ -39,9 +39,47 @@ Acked-by: Tejun Heo Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman +--- + fs/block_dev.c | 16 ++++++++++++---- + fs/partitions/check.c | 48 ++++++++++++++++++++++++++++++++++++++++-------- + include/linux/genhd.h | 1 + + 3 files changed, 53 insertions(+), 12 deletions(-) + +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -1149,8 +1149,12 @@ static int __blkdev_get(struct block_dev + * The latter is necessary to prevent ghost + * partitions on a removed medium. + */ +- if (bdev->bd_invalidated && (!ret || ret == -ENOMEDIUM)) +- rescan_partitions(disk, bdev); ++ if (bdev->bd_invalidated) { ++ if (!ret) ++ rescan_partitions(disk, bdev); ++ else if (ret == -ENOMEDIUM) ++ invalidate_partitions(disk, bdev); ++ } + if (ret) + goto out_clear; + } else { +@@ -1180,8 +1184,12 @@ static int __blkdev_get(struct block_dev + if (bdev->bd_disk->fops->open) + ret = bdev->bd_disk->fops->open(bdev, mode); + /* the same as first opener case, read comment there */ +- if (bdev->bd_invalidated && (!ret || ret == -ENOMEDIUM)) +- rescan_partitions(bdev->bd_disk, bdev); ++ if (bdev->bd_invalidated) { ++ if (!ret) ++ rescan_partitions(bdev->bd_disk, bdev); ++ else if (ret == -ENOMEDIUM) ++ invalidate_partitions(bdev->bd_disk, bdev); ++ } + if (ret) + goto out_unlock_bdev; + } --- a/fs/partitions/check.c +++ b/fs/partitions/check.c -@@ -389,17 +389,11 @@ static bool disk_unlock_native_capacity(struct gendisk *disk) +@@ -539,17 +539,11 @@ static bool disk_unlock_native_capacity( } } @@ -61,7 +99,7 @@ Signed-off-by: Greg Kroah-Hartman if (bdev->bd_part_count) return -EBUSY; -@@ -412,6 +406,24 @@ rescan: +@@ -562,6 +556,24 @@ rescan: delete_partition(disk, part->partno); disk_part_iter_exit(&piter); @@ -86,7 +124,7 @@ Signed-off-by: Greg Kroah-Hartman if (disk->fops->revalidate_disk) disk->fops->revalidate_disk(disk); check_disk_size_change(disk, bdev); -@@ -515,6 +527,26 @@ rescan: +@@ -665,6 +677,26 @@ rescan: return 0; } @@ -113,45 +151,9 @@ Signed-off-by: Greg Kroah-Hartman unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, Sector *p) { struct address_space *mapping = bdev->bd_inode->i_mapping; -diff --git a/fs/block_dev.c b/fs/block_dev.c -index 0e575d1..5e9f198 100644 ---- a/fs/block_dev.c -+++ b/fs/block_dev.c -@@ -1183,8 +1183,12 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) - * The latter is necessary to prevent ghost - * partitions on a removed medium. - */ -- if (bdev->bd_invalidated && (!ret || ret == -ENOMEDIUM)) -- rescan_partitions(disk, bdev); -+ if (bdev->bd_invalidated) { -+ if (!ret) -+ rescan_partitions(disk, bdev); -+ else if (ret == -ENOMEDIUM) -+ invalidate_partitions(disk, bdev); -+ } - if (ret) - goto out_clear; - } else { -@@ -1214,8 +1218,12 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) - if (bdev->bd_disk->fops->open) - ret = bdev->bd_disk->fops->open(bdev, mode); - /* the same as first opener case, read comment there */ -- if (bdev->bd_invalidated && (!ret || ret == -ENOMEDIUM)) -- rescan_partitions(bdev->bd_disk, bdev); -+ if (bdev->bd_invalidated) { -+ if (!ret) -+ rescan_partitions(bdev->bd_disk, bdev); -+ else if (ret == -ENOMEDIUM) -+ invalidate_partitions(bdev->bd_disk, bdev); -+ } - if (ret) - goto out_unlock_bdev; - } -diff --git a/include/linux/genhd.h b/include/linux/genhd.h -index fe23ee7..e61d319 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h -@@ -596,6 +596,7 @@ extern char *disk_name (struct gendisk *hd, int partno, char *buf); +@@ -594,6 +594,7 @@ extern char *disk_name (struct gendisk * extern int disk_expand_part_tbl(struct gendisk *disk, int target); extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev); -- 2.47.3