]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fuzz fixup for a 3.0 patch
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Mar 2012 19:08:51 +0000 (12:08 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Mar 2012 19:08:51 +0000 (12:08 -0700)
queue-3.0/block-fix-null-pointer-dereference-in-sd_revalidate_disk.patch

index 092231dc9f4bf1acc39d10763683ce87d2274851..10ae666244ad6f70369c9ef442cefbefcbe8f13b 100644 (file)
@@ -39,9 +39,47 @@ Acked-by: Tejun Heo <tj@kernel.org>
 Signed-off-by: Jens Axboe <axboe@kernel.dk>
 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
+---
+ 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 <gregkh@linuxfoundation.org>
  
        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 <gregkh@linuxfoundation.org>
        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 <gregkh@linuxfoundation.org>
  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);