From 1f600fcc9159280149d1683c72d50f3b1b70d8f6 Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Thu, 20 Dec 2012 02:32:25 +0000 Subject: [PATCH] scst_local: Fix bug in error path device_unregister() invokes scst_local_release_adapter() and hence unregisters the session. Avoid that it is attempted a second time to unregister the session which would result in a crash. [3656]: scst: scst_unregister_target:680:Target local for template scst_local unregistered successfully [3656]: scst: scst_unregister_target_template:457:Target template scst_local unregistered successfully [3655]: scst_unregister_session:6795:Unregistering session ffff8800071a0000 (wait 0) general protection fault: 0000 [#1] SMP Modules linked in: iscsi_scst(O) scst_vdisk(O) scst(O) ntfs vfat msdos fat ext3 jbd ext2 brd netconsole configfs isofs ib_iser rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi joydev hid_generic binfmt_misc usbhid hid intel_agp psmouse intel_gtt processor agpgart microcode i2c_piix4 button lp parport ext4 mbcache jbd2 floppy ata_piix zlib_deflate libcrc32c [last unloaded: scst_local] CPU 1 Pid: 3655, comm: scsi_id Tainted: G O 3.6.5-debug+ #1 Bochs Bochs RIP: 0010:[] [] scst_pre_rx_mgmt_cmd+0x64/0x210 [scst] RSP: 0018:ffff88000304d598 EFLAGS: 00010246 RAX: 6b6b6b6b6b6b6b6b RBX: 0000000000000001 RCX: 0000000000000000 RDX: 0000000000000001 RSI: 000000000000000a RDI: ffff8800071a0000 RBP: ffff88000304d5c8 R08: 0000000000000002 R09: 0000000000000000 R10: 000000000000c81d R11: 0000000000000000 R12: ffff8800071a0000 R13: 000000000000000a R14: 0000000000000000 R15: ffff880000000000 FS: 00007fb6fe8c6700(0000) GS:ffff88003e000000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 00007f2169286bd0 CR3: 000000001cd26000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process scsi_id (pid: 3655, threadinfo ffff88000304c000, task ffff88003d9a0000) Stack: 0000000000000000 0000000000000282 ffff88000304d650 0000000000000000 ffff8800071a0000 dead4ead00000000 ffff88000304d638 ffffffffa0221fdf 0000000000000004 0000000000000000 ffff88000304d5f8 ffffffffa025d6a3 Call Trace: [] scst_rx_mgmt_fn+0x7f/0x3a0 [scst] [] ? spin_unlock_irqrestore.constprop.0+0x13/0x20 [scst] [] ? debug_print_with_prefix+0x165/0x1f0 [scst] [] scst_rx_mgmt_fn_lun.constprop.34+0x4a/0x60 [scst] [] scst_unregister_session+0x131/0x320 [scst] [] ? device_release+0x27/0xa0 [] ? kobject_release+0x8b/0x1d0 [] ? kobject_put+0x2c/0x60 [] ? put_device+0x17/0x20 [] ? scsi_host_dev_release+0xc0/0xe0 [] ? device_release+0x27/0xa0 [] ? kobject_release+0x8b/0x1d0 [] ? kobject_put+0x2c/0x60 [] ? put_device+0x17/0x20 [] ? scsi_target_dev_release+0x22/0x30 [] ? device_release+0x27/0xa0 [] ? kobject_release+0x8b/0x1d0 [] ? kobject_put+0x2c/0x60 [] ? put_device+0x17/0x20 [] ? scsi_device_dev_release_usercontext+0x108/0x120 [] ? scsi_device_cls_release+0x20/0x20 [] ? execute_in_process_context+0x86/0xa0 [] ? scsi_device_dev_release+0x1c/0x20 [] ? device_release+0x27/0xa0 [] ? kobject_release+0x8b/0x1d0 [] ? kobject_put+0x2c/0x60 [] ? put_device+0x17/0x20 [] ? scsi_device_put+0x44/0x60 [] ? scsi_cd_put+0x4d/0x70 [] ? sr_block_open+0xd0/0x120 [] ? __blkdev_get+0xe9/0x4a0 [] ? bd_acquire+0x24/0xf0 [] ? blkdev_get+0x350/0x350 [] ? blkdev_get+0x53/0x350 [] ? complete_walk+0x52/0x140 [] ? blkdev_get+0x350/0x350 [] ? _raw_spin_unlock+0x2b/0x50 [] ? blkdev_get+0x350/0x350 [] ? blkdev_open+0x6c/0x90 [] ? do_dentry_open.isra.19+0x216/0x2a0 [] ? finish_open+0x22/0x40 [] ? do_last+0x72e/0xe20 [] ? inode_permission+0x18/0x50 [] ? link_path_walk+0x6b/0x930 [] ? path_openat+0xb6/0x4a0 [] ? trace_hardirqs_on+0xd/0x10 [] ? do_filp_open+0x42/0xa0 [] ? _raw_spin_unlock+0x2b/0x50 [] ? alloc_fd+0xd2/0x120 [] ? do_sys_open+0x100/0x1e0 [] ? sys_open+0x21/0x30 [] ? system_call_fastpath+0x16/0x1b Code: 00 00 65 48 8b 04 25 80 ba 00 00 8b b0 94 01 00 00 48 c7 c2 a0 b8 26 a0 31 c0 48 c7 c7 45 e0 27 a0 e8 23 15 28 e1 49 8b 44 24 08 <48> 8b 40 30 48 83 78 50 00 0f 84 52 01 00 00 83 fb 01 19 ff 81 Signed-off-by: Bart Van Assche git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4658 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst_local/scst_local.c | 1 + 1 file changed, 1 insertion(+) diff --git a/scst_local/scst_local.c b/scst_local/scst_local.c index c4f42045a..146c40967 100644 --- a/scst_local/scst_local.c +++ b/scst_local/scst_local.c @@ -1702,6 +1702,7 @@ out: #ifndef CONFIG_SCST_PROC unregister_dev: device_unregister(&sess->dev); + goto out; #endif unregister_session: