linux/drivers
Jens Axboe 2d097c5021 sr: get/drop reference to device in revalidate and check_events
We can't just use scsi_cd() to get the scsi_cd structure, we have
to grab a live reference to the device. For both callbacks, we're
not inside an open where we already hold a reference to the device.

This fixes device removal/addition under concurrent device access,
which otherwise could result in the below oops.

NULL pointer dereference at 0000000000000010
PGD 0 P4D 0
Oops: 0000 [#1] PREEMPT SMP
Modules linked in:
sr 12:0:0:0: [sr2] scsi-1 drive
 scsi_debug crc_t10dif crct10dif_generic crct10dif_common nvme nvme_core sb_edac xl
sr 12:0:0:0: Attached scsi CD-ROM sr2
 sr_mod cdrom btrfs xor zstd_decompress zstd_compress xxhash lzo_compress zlib_defc
sr 12:0:0:0: Attached scsi generic sg7 type 5
 igb ahci libahci i2c_algo_bit libata dca [last unloaded: crc_t10dif]
CPU: 43 PID: 4629 Comm: systemd-udevd Not tainted 4.16.0+ #650
Hardware name: Dell Inc. PowerEdge T630/0NT78X, BIOS 2.3.4 11/09/2016
RIP: 0010:sr_block_revalidate_disk+0x23/0x190 [sr_mod]
RSP: 0018:ffff883ff357bb58 EFLAGS: 00010292
RAX: ffffffffa00b07d0 RBX: ffff883ff3058000 RCX: ffff883ff357bb66
RDX: 0000000000000003 RSI: 0000000000007530 RDI: ffff881fea631000
RBP: 0000000000000000 R08: ffff881fe4d38400 R09: 0000000000000000
R10: 0000000000000000 R11: 00000000000001b6 R12: 000000000800005d
R13: 000000000800005d R14: ffff883ffd9b3790 R15: 0000000000000000
FS:  00007f7dc8e6d8c0(0000) GS:ffff883fff340000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000010 CR3: 0000003ffda98005 CR4: 00000000003606e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
 ? __invalidate_device+0x48/0x60
 check_disk_change+0x4c/0x60
 sr_block_open+0x16/0xd0 [sr_mod]
 __blkdev_get+0xb9/0x450
 ? iget5_locked+0x1c0/0x1e0
 blkdev_get+0x11e/0x320
 ? bdget+0x11d/0x150
 ? _raw_spin_unlock+0xa/0x20
 ? bd_acquire+0xc0/0xc0
 do_dentry_open+0x1b0/0x320
 ? inode_permission+0x24/0xc0
 path_openat+0x4e6/0x1420
 ? cpumask_any_but+0x1f/0x40
 ? flush_tlb_mm_range+0xa0/0x120
 do_filp_open+0x8c/0xf0
 ? __seccomp_filter+0x28/0x230
 ? _raw_spin_unlock+0xa/0x20
 ? __handle_mm_fault+0x7d6/0x9b0
 ? list_lru_add+0xa8/0xc0
 ? _raw_spin_unlock+0xa/0x20
 ? __alloc_fd+0xaf/0x160
 ? do_sys_open+0x1a6/0x230
 do_sys_open+0x1a6/0x230
 do_syscall_64+0x5a/0x100
 entry_SYSCALL_64_after_hwframe+0x3d/0xa2

Reviewed-by: Lee Duncan <lduncan@suse.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2018-04-11 11:26:09 -06:00
..
accessibility
acpi * Add NVDIMM support to EDAC (Tony Luck) 2018-04-05 14:21:13 -07:00
amba
android
ata Merge branch 'for-4.17' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata 2018-04-03 17:42:25 -07:00
atm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-04-01 19:49:34 -04:00
auxdisplay auxdisplay: img-ascii-lcd: Silence 2 uninitialized warnings 2018-03-13 18:16:38 +01:00
base Driver core patches for 4.17-rc1 2018-04-04 19:41:45 -07:00
bcma bcma: Prevent build of PCI host features in module 2018-03-13 18:47:47 +02:00
block loop: fix LOOP_GET_STATUS lock imbalance 2018-04-10 08:38:46 -06:00
bluetooth Bluetooth: Set HCI_QUIRK_SIMULTANEOUS_DISCOVERY for BTUSB_QCA_ROME 2018-04-01 21:43:02 +03:00
bus Staging/IIO patches for 4.17-rc1 2018-04-04 18:56:27 -07:00
cdrom cdrom: do not call check_disk_change() inside cdrom_open() 2018-03-09 08:06:35 -07:00
char kernel.h: Retain constant expression output for max()/min() 2018-04-05 14:17:16 -07:00
clk clk: bcm2835: Protect sections updating shared registers 2018-03-19 09:27:37 -07:00
clocksource arch: remove obsolete architecture ports 2018-04-02 20:20:12 -07:00
connector
cpufreq Power management updates for 4.17-rc1 2018-04-03 10:45:39 -07:00
cpuidle cpuidle: poll_state: Avoid invoking local_clock() too often 2018-03-29 13:06:08 +02:00
crypto Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2018-04-04 17:11:08 -07:00
dax
dca
devfreq
dio
dma dmaengine: stm32-dmamux: fix a potential buffer overflow 2018-03-22 10:51:35 +05:30
dma-buf
edac * Add NVDIMM support to EDAC (Tony Luck) 2018-04-05 14:21:13 -07:00
eisa
extcon Char/Misc patches for 4.17-rc1 2018-04-04 20:07:20 -07:00
firewire
firmware * Add NVDIMM support to EDAC (Tony Luck) 2018-04-05 14:21:13 -07:00
fmc treewide: Fix typos in printk 2018-03-27 09:51:22 +02:00
fpga PCI: Add Altera vendor ID 2018-03-14 19:13:47 +01:00
fsi fsi: core: Add check for master property no-scan-on-init 2018-03-14 19:11:01 +01:00
gpio This is the bulk of GPIO changes for the v4.17 kernel cycle: 2018-04-05 09:51:41 -07:00
gpu kernel.h: Retain constant expression output for max()/min() 2018-04-05 14:17:16 -07:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2018-04-05 11:53:34 -07:00
hsi HSI: hsi_char: Delete an error message for a failed memory allocation in hsc_probe() 2018-03-19 16:31:07 +01:00
hv hv: add SPDX license id to Kconfig 2018-03-28 13:24:56 +02:00
hwmon
hwspinlock
hwtracing Char/Misc patches for 4.17-rc1 2018-04-04 20:07:20 -07:00
i2c arch: remove obsolete architecture ports 2018-04-02 20:20:12 -07:00
ide for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
idle
iio This is the bulk of GPIO changes for the v4.17 kernel cycle: 2018-04-05 09:51:41 -07:00
infiniband Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-04-01 19:49:34 -04:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2018-04-05 13:21:57 -07:00
iommu Merge branch 'x86-dma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2018-04-02 17:18:45 -07:00
ipack
irqchip Staging/IIO patches for 4.17-rc1 2018-04-04 18:56:27 -07:00
isdn Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2018-04-03 14:04:18 -07:00
leds leds: Fix wrong dmi_match on PC Engines APU LEDs 2018-03-20 20:28:00 +01:00
lightnvm lightnvm: pblk: remove some unnecessary NULL checks 2018-03-29 17:29:09 -06:00
macintosh macintosh/via-pmu68k: Initialize PMU driver with setup_arch and arch_initcall 2018-03-19 10:22:59 +01:00
mailbox
mcb mcb: add Altera PCI ID to mcb-pci 2018-03-14 19:13:48 +01:00
md for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
media Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2018-04-05 11:56:35 -07:00
memory
memstick
message treewide: Align function definition open/close braces 2018-03-26 11:13:09 +02:00
mfd
misc for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
mmc for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
mtd for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
mux
net Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2018-04-05 11:56:35 -07:00
nfc
ntb
nubus
nvdimm for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
nvme for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
nvmem Char/Misc patches for 4.17-rc1 2018-04-04 20:07:20 -07:00
of Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2018-04-03 14:04:18 -07:00
opp
oprofile oprofilefs: don't oops on allocation failure 2018-03-29 15:07:48 -04:00
parisc parisc/pci: Switch LBA PCI bus from Hard Fail to Soft Fail mode 2018-03-27 18:52:22 +02:00
parport Char/Misc patches for 4.17-rc1 2018-04-04 20:07:20 -07:00
pci arch: remove obsolete architecture ports 2018-04-02 20:20:12 -07:00
pcmcia Power management updates for 4.17-rc1 2018-04-03 10:45:39 -07:00
perf arm64 updates for 4.17 2018-04-04 16:01:43 -07:00
phy phy: for 4.17 2018-03-20 10:10:46 +01:00
pinctrl This is the bulk of GPIO changes for the v4.17 kernel cycle: 2018-04-05 09:51:41 -07:00
platform Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2018-04-05 11:56:35 -07:00
pnp
power power supply and reset changes for the v4.17 series 2018-04-03 12:10:01 -07:00
powercap powercap: RAPL: Add support for Cannon Lake 2018-03-19 00:02:24 +01:00
pps pps: generator: use new parport device model 2018-03-14 17:53:06 +01:00
ps3
ptp
pwm pwm: remove pwm-bfin driver 2018-03-26 15:57:08 +02:00
rapidio
ras
regulator Merge remote-tracking branches 'regulator/topic/88pg86x', 'regulator/topic/dt', 'regulator/topic/formatting' and 'regulator/topic/gpio' into regulator-next 2018-03-28 10:33:53 +08:00
remoteproc
reset
rpmsg
rtc Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2018-04-05 11:56:35 -07:00
s390 for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
sbus sparc64: Properly range check DAX completion index 2018-04-01 20:07:00 -04:00
scsi sr: get/drop reference to device in revalidate and check_events 2018-04-11 11:26:09 -06:00
sfi
sh
siox siox: fix possible buffer overflow in device_add_store 2018-03-15 18:07:46 +01:00
slimbus slimbus: core: use put_device() instead of kfree() 2018-03-15 17:55:52 +01:00
sn
soc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-03-23 11:31:58 -04:00
soundwire
spi spi: SPI updates for v4.17 2018-04-03 12:06:21 -07:00
spmi
ssb ssb: use put_device() if device_register fail 2018-03-13 18:48:29 +02:00
staging for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
target for-4.17/block-20180402 2018-04-05 14:27:02 -07:00
tc
tee
thermal
thunderbolt thunderbolt: Prevent crash when ICM firmware is not running 2018-03-14 14:26:38 +03:00
tty TTY/Serial driver patches for 4.17-rc1 2018-04-04 18:43:49 -07:00
uio uio_hv_generic: support sub-channels 2018-03-06 09:57:17 -08:00
usb TTY/Serial driver patches for 4.17-rc1 2018-04-04 18:43:49 -07:00
uwb uwb: Re-use DEFINE_SHOW_ATTRIBUTE() macro 2018-03-09 09:31:26 -08:00
vfio Revert: "vfio-pci: Mask INTx if a device is not capabable of enabling it" 2018-03-21 22:50:19 -06:00
vhost Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-04-01 19:49:34 -04:00
video TTY/Serial driver patches for 4.17-rc1 2018-04-04 18:43:49 -07:00
virt
virtio virtio_ring: fix num_free handling in error case 2018-03-01 18:53:38 +02:00
visorbus
vlynq
vme
w1 w1: use put_device() if device_register() fail 2018-03-14 14:58:50 +01:00
watchdog This is the bulk of GPIO changes for the v4.17 kernel cycle: 2018-04-05 09:51:41 -07:00
xen x86/dma: Remove dma_alloc_coherent_mask() 2018-03-20 10:01:56 +01:00
zorro zorro: Set up z->dev.dma_mask for the DMA API 2018-03-19 10:26:46 +01:00
Kconfig hwtracing: Add HW tracing support menu 2018-03-29 13:38:10 +03:00
Makefile