linux/fs/partitions
Jun'ichi Nomura 57babcb863 block: Fix NULL pointer dereference in sd_revalidate_disk
commit fe316bf2d5 upstream.

Since 2.6.39 (1196f8b), when a driver returns -ENOMEDIUM for open(),
__blkdev_get() calls rescan_partitions() to remove
in-kernel partition structures and raise KOBJ_CHANGE uevent.

However it ends up calling driver's revalidate_disk without open
and could cause oops.

In the case of SCSI:

  process A                  process B
  ----------------------------------------------
  sys_open
    __blkdev_get
      sd_open
        returns -ENOMEDIUM
                             scsi_remove_device
                               <scsi_device torn down>
      rescan_partitions
        sd_revalidate_disk
          <oops>
Oopses are reported here:
http://marc.info/?l=linux-scsi&m=132388619710052

This patch separates the partition invalidation from rescan_partitions()
and use it for -ENOMEDIUM case.

Reported-by: Huajun Li <huajun.li.lee@gmail.com>
Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-03-19 08:57:58 -07:00
..
acorn.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
acorn.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
amiga.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
amiga.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
atari.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
atari.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
check.c block: Fix NULL pointer dereference in sd_revalidate_disk 2012-03-19 08:57:58 -07:00
check.h block, partition: add partition_meta_info to hd_struct 2010-09-15 16:13:18 +02:00
efi.c fs/partitions/efi.c: corrupted GUID partition tables can cause kernel oops 2011-05-26 17:12:37 -07:00
efi.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
ibm.c [S390] partitions: fix build error in ibm partition detection code 2010-08-13 10:06:55 +02:00
ibm.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
karma.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
karma.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
Kconfig partition: use DEFAULT_SGI_PARTITION for SGI_PARTION default 2008-02-06 10:41:08 -08:00
ldm.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-05-23 09:12:26 -07:00
ldm.h Update broken web addresses in the kernel. 2010-10-18 11:03:14 +02:00
mac.c fs/partitions: Validate map_count in Mac partition tables 2011-02-17 17:50:51 -08:00
mac.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
Makefile partition: add support for sysv68 partitions 2007-05-08 11:15:09 -07:00
msdos.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
msdos.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
osf.c Increase OSF partition limit from 8 to 18 2011-03-16 08:04:07 -07:00
osf.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
sgi.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
sgi.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
sun.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
sun.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
sysv68.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
sysv68.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00
ultrix.c partitions: fix sometimes unreadable partition strings 2010-08-11 08:59:20 -07:00
ultrix.h block: use struct parsed_partitions *state universally in partition check code 2010-05-21 20:01:02 +02:00