• Artem Savkov's avatar
    scsi: scsi_dh_rdac: Use ctlr directly in rdac_failover_get() · 0648a07c
    Artem Savkov authored
    rdac_failover_get references struct rdac_controller as
    ctlr->ms_sdev->handler_data->ctlr for no apparent reason. Besides being
    inefficient this also introduces a null-pointer dereference as
    send_mode_select() sets ctlr->ms_sdev to NULL before calling
    rdac_failover_get():
    
    [   18.432550] device-mapper: multipath service-time: version 0.3.0 loaded
    [   18.436124] BUG: unable to handle kernel NULL pointer dereference at 0000000000000790
    [   18.436129] IP: send_mode_select+0xca/0x560
    [   18.436129] PGD 0
    [   18.436130] P4D 0
    [   18.436130]
    [   18.436132] Oops: 0000 [#1] SMP
    [   18.436133] Modules linked in: dm_service_time sd_mod dm_multipath amdkfd amd_iommu_v2 radeon(+) i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops ttm qla2xxx drm serio_raw scsi_transport_fc bnx2 i2c_core dm_mirror dm_region_hash dm_log dm_mod
    [   18.436143] CPU: 4 PID: 443 Comm: kworker/u16:2 Not tainted 4.12.0-rc1.1.el7.test.x86_64 #1
    [   18.436144] Hardware name: IBM BladeCenter LS22 -[79013SG]-/Server Blade, BIOS -[L8E164AUS-1.07]- 05/25/2011
    [   18.436145] Workqueue: kmpath_rdacd send_mode_select
    [   18.436146] task: ffff880225116a40 task.stack: ffffc90002bd8000
    [   18.436148] RIP: 0010:send_mode_select+0xca/0x560
    [   18.436148] RSP: 0018:ffffc90002bdbda8 EFLAGS: 00010246
    [   18.436149] RAX: 0000000000000000 RBX: ffffc90002bdbe08 RCX: ffff88017ef04a80
    [   18.436150] RDX: ffffc90002bdbe08 RSI: ffff88017ef04a80 RDI: ffff8802248e4388
    [   18.436151] RBP: ffffc90002bdbe48 R08: 0000000000000000 R09: ffffffff81c104c0
    [   18.436151] R10: 00000000000001ff R11: 000000000000035a R12: ffffc90002bdbdd8
    [   18.436152] R13: ffff8802248e4390 R14: ffff880225152800 R15: ffff8802248e4400
    [   18.436153] FS:  0000000000000000(0000) GS:ffff880227d00000(0000) knlGS:0000000000000000
    [   18.436154] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   18.436154] CR2: 0000000000000790 CR3: 000000042535b000 CR4: 00000000000006e0
    [   18.436155] Call Trace:
    [   18.436159]  ? rdac_activate+0x14e/0x150
    [   18.436161]  ? refcount_dec_and_test+0x11/0x20
    [   18.436162]  ? kobject_put+0x1c/0x50
    [   18.436165]  ? scsi_dh_activate+0x6f/0xd0
    [   18.436168]  process_one_work+0x149/0x360
    [   18.436170]  worker_thread+0x4d/0x3c0
    [   18.436172]  kthread+0x109/0x140
    [   18.436173]  ? rescuer_thread+0x380/0x380
    [   18.436174]  ? kthread_park+0x60/0x60
    [   18.436176]  ret_from_fork+0x2c/0x40
    [   18.436177] Code: 49 c7 46 20 00 00 00 00 4c 89 ef c6 07 00 0f 1f 40 00 45 31 ed c7 45 b0 05 00 00 00 44 89 6d b4 4d 89 f5 4c 8b 75 a8 49 8b 45 20 <48> 8b b0 90 07 00 00 48 8b 56 10 8b 42 10 48 8d 7a 28 85 c0 0f
    [   18.436192] RIP: send_mode_select+0xca/0x560 RSP: ffffc90002bdbda8
    [   18.436192] CR2: 0000000000000790
    [   18.436198] ---[ end trace 40f3e4dca1ffabdd ]---
    [   18.436199] Kernel panic - not syncing: Fatal exception
    [   18.436222] Kernel Offset: disabled
    [-- MARK -- Thu May 18 11:45:00 2017]
    
    Fixes: 32782557 scsi_dh_rdac: switch to scsi_execute_req_flags()
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarArtem Savkov <asavkov@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    0648a07c
scsi_dh_rdac.c 19.6 KB