linux/drivers/scsi/qla2xxx
himanshu.madhani@cavium.com d48cc67cd4 scsi: qla2xxx: Fix kernel crash due to late workqueue allocation
This patch fixes crash for FCoE adapter. Once driver initialization is
complete, firmware will start posting Asynchronous Event, However driver
has not yet allocated workqueue to process and queue up work.  This delay
of allocating workqueue results into NULL pointer access.

The following stack trace is seen:

[   24.577259] BUG: unable to handle kernel NULL pointer dereference at 0000000000000102
[   24.623133] PGD 0 P4D 0
[   24.636760] Oops: 0000 [#1] SMP NOPTI
[   24.656942] Modules linked in: i2c_algo_bit drm_kms_helper sr_mod(+) syscopyarea sysfillrect sysimgblt cdrom fb_sys_fops ata_generic ttm pata_acpi sd_mod ahci pata_atiixp sfc(+) qla2xxx(+) libahci drm qla4xxx(+) nvme_fc hpsa mdio libiscsi qlcnic(+) nvme_fabrics scsi_transport_sas serio_raw mtd crc32c_intel libata nvme_core i2c_core scsi_transport_iscsi tg3 scsi_transport_fc bnx2 iscsi_boot_sysfs dm_multipath dm_mirror dm_region_hash dm_log dm_mod
[   24.887449] CPU: 0 PID: 177 Comm: kworker/0:3 Not tainted 4.17.0-rc6 #1
[   24.925119] Hardware name: HP ProLiant DL385 G7, BIOS A18 08/15/2012
[   24.962106] Workqueue: events work_for_cpu_fn
[   24.987098] RIP: 0010:__queue_work+0x1f/0x3a0
[   25.011672] RSP: 0018:ffff992642ceba10 EFLAGS: 00010082
[   25.042116] RAX: 0000000000000082 RBX: 0000000000000082 RCX: 0000000000000000
[   25.083293] RDX: ffff8cf9abc6d7d0 RSI: 0000000000000000 RDI: 0000000000002000
[   25.123094] RBP: 0000000000000000 R08: 0000000000025a40 R09: ffff8cf9aade2880
[   25.164087] R10: 0000000000000000 R11: ffff992642ceb6f0 R12: ffff8cf9abc6d7d0
[   25.202280] R13: 0000000000002000 R14: ffff8cf9abc6d7b8 R15: 0000000000002000
[   25.242050] FS:  0000000000000000(0000) f9b5c00000(0000) knlGS:0000000000000000
[   25.977565] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   26.010457] CR2: 0000000000000102 CR3: 000000030760a000 CR4: 00000000000406f0
[   26.051048] Call Trace:
[   26.063572]  ? __switch_to_asm+0x34/0x70
[   26.086079]  queue_work_on+0x24/0x40
[   26.107090]  qla2x00_post_work+0x81/0xb0 [qla2xxx]
[   26.133356]  qla2x00_async_event+0x1ad/0x1a20 [qla2xxx]
[   26.164075]  ? lock_timer_base+0x67/0x80
[   26.186420]  ? try_to_del_timer_sync+0x4d/0x80
[   26.212284]  ? del_timer_sync+0x35/0x40
[   26.234080]  ? schedule_timeout+0x165/0x2f0
[   26.259575]  qla82xx_poll+0x13e/0x180 [qla2xxx]
[   26.285740]  qla2x00_mailbox_command+0x74b/0xf50 [qla2xxx]
[   26.319040]  qla82xx_set_driver_version+0x13b/0x1c0 [qla2xxx]
[   26.352108]  ? qla2x00_init_rings+0x206/0x3f0 [qla2xxx]
[   26.381733]  qla2x00_initialize_adapter+0x35c/0x7f0 [qla2xxx]
[   26.413240]  qla2x00_probe_one+0x1479/0x2390 [qla2xxx]
[   26.442055]  local_pci_probe+0x3f/0xa0
[   26.463108]  work_for_cpu_fn+0x10/0x20
[   26.483295]  process_one_work+0x152/0x350
[   26.505730]  worker_thread+0x1cf/0x3e0
[   26.527090]  kthread+0xf5/0x130
[   26.545085]  ? max_active_store+0x80/0x80
[   26.568085]  ? kthread_bind+0x10/0x10
[   26.589533]  ret_from_fork+0x22/0x40
[   26.610192] Code: 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 41 57 41 89 ff 41 56 41 55 41 89 fd 41 54 49 89 d4 55 48 89 f5 53 48 83 ec 0 86 02 01 00 00 01 0f 85 80 02 00 00 49 c7 c6 c0 ec 01 00 41
[   27.308540] RIP: __queue_work+0x1f/0x3a0 RSP: ffff992642ceba10
[   27.341591] CR2: 0000000000000102
[   27.360208] ---[ end trace 01b7b7ae2c005cf3 ]---

Cc: <stable@vger.kernel.org> # v4.17+
Fixes: 9b3e0f4d41 ("scsi: qla2xxx: Move work element processing out of DPC thread"
Reported-by: Li Wang <liwang@redhat.com>
Tested-by: Li Wang <liwang@redhat.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2018-07-10 22:25:02 -04:00
..
Kconfig scsi: qla2xxx: avoid unused-function warning 2017-07-01 17:14:58 -04:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
qla_attr.c scsi: qla2xxx: Use zeroing allocator rather than allocator/memset 2018-01-04 01:09:26 -05:00
qla_bsg.c scsi: qla2xxx: Use dma_pool_zalloc() 2018-02-22 20:28:43 -05:00
qla_bsg.h
qla_dbg.c Merge branch 'fixes' into misc 2018-04-03 17:38:39 -07:00
qla_dbg.h scsi: qla2xxx: Include Exchange offload/Extended Login into FW dump 2017-06-27 21:21:41 -04:00
qla_def.h scsi: qla2xxx: Fix inconsistent DMA mem alloc/free 2018-07-10 22:25:02 -04:00
qla_devtbl.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
qla_dfs.c scsi: qla2xxx: Add XCB counters to debugfs 2018-01-22 20:03:54 -05:00
qla_fw.h scsi: qla2xxx: Fix session cleanup for N2N 2018-01-03 23:41:06 -05:00
qla_gbl.h scsi: qla2xxx: Move GPSC and GFPNID out of session management 2018-05-08 00:46:11 -04:00
qla_gs.c scsi: qla2xxx: Fix inconsistent DMA mem alloc/free 2018-07-10 22:25:02 -04:00
qla_init.c SCSI fixes on 20180613 2018-06-14 16:35:32 +09:00
qla_inline.h scsi: qla2xxx: Fix race condition between iocb timeout and initialisation 2018-04-09 21:04:36 -04:00
qla_iocb.c scsi: qla2xxx: Fix race condition between iocb timeout and initialisation 2018-04-09 21:04:36 -04:00
qla_isr.c SCSI fixes on 20180613 2018-06-14 16:35:32 +09:00
qla_mbx.c scsi: qla2xxx: Fix crash on qla2x00_mailbox_command 2018-06-07 21:50:00 -04:00
qla_mid.c scsi: qla2xxx: Fix race condition between iocb timeout and initialisation 2018-04-09 21:04:36 -04:00
qla_mr.c scsi: qla2xxx: Fix race condition between iocb timeout and initialisation 2018-04-09 21:04:36 -04:00
qla_mr.h
qla_nvme.c scsi: qla2xxx: Cleanup code to improve FC-NVMe error handling 2018-03-21 18:38:54 -04:00
qla_nvme.h scsi: qla2xxx: Fix FC-NVMe IO abort during driver reset 2018-03-21 18:38:54 -04:00
qla_nx2.c scsi: qla2xxx: Fix function argument descriptions 2018-02-12 11:43:25 -05:00
qla_nx2.h scsi: qla2xxx: Remove unused symbols 2018-02-12 11:43:24 -05:00
qla_nx.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
qla_nx.h scsi: qla2xxx: remove writeq/readq function definitions 2017-06-12 20:48:08 -04:00
qla_os.c scsi: qla2xxx: Fix kernel crash due to late workqueue allocation 2018-07-10 22:25:02 -04:00
qla_settings.h
qla_sup.c scsi: qla2xxx: Fix function argument descriptions 2018-02-12 11:43:25 -05:00
qla_target.c scsi: qla2xxx: Spinlock recursion in qla_target 2018-06-18 21:02:52 -04:00
qla_target.h scsi: qla2xxx: Fix TMF and Multi-Queue config 2018-05-08 00:46:12 -04:00
qla_tmpl.c scsi: qla2xxx: Fix Firmware dump size for Extended login and Exchange Offload 2018-01-03 23:41:05 -05:00
qla_tmpl.h
qla_version.h scsi: qla2xxx: Update driver version to 10.00.00.07-k 2018-05-08 00:46:12 -04:00
tcm_qla2xxx.c treewide: Use array_size() in vzalloc() 2018-06-12 16:19:22 -07:00
tcm_qla2xxx.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00