Description
In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Delay module unload while fabric scan in progress System crash seen during load/unload test in a loop. [105954.384919] RBP: ffff914589838dc0 R08: 0000000000000000 R09: 0000000000000086 [105954.384920] R10: 000000000000000f R11: ffffa31240904be5 R12: ffff914605f868e0 [105954.384921] R13: ffff914605f86910 R14: 0000000000008010 R15: 00000000ddb7c000 [105954.384923] FS: 0000000000000000(0000) GS:ffff9163fec40000(0000) knlGS:0000000000000000 [105954.384925] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [105954.384926] CR2: 000055d31ce1d6a0 CR3: 0000000119f5e001 CR4: 0000000000770ee0 [105954.384928] PKRU: 55555554 [105954.384929] Call Trace: [105954.384931] <IRQ> [105954.384934] qla24xx_sp_unmap+0x1f3/0x2a0 [qla2xxx] [105954.384962] ? qla_async_scan_sp_done+0x114/0x1f0 [qla2xxx] [105954.384980] ? qla24xx_els_ct_entry+0x4de/0x760 [qla2xxx] [105954.384999] ? __wake_up_common+0x80/0x190 [105954.385004] ? qla24xx_process_response_queue+0xc2/0xaa0 [qla2xxx] [105954.385023] ? qla24xx_msix_rsp_q+0x44/0xb0 [qla2xxx] [105954.385040] ? __handle_irq_event_percpu+0x3d/0x190 [105954.385044] ? handle_irq_event+0x58/0xb0 [105954.385046] ? handle_edge_irq+0x93/0x240 [105954.385050] ? __common_interrupt+0x41/0xa0 [105954.385055] ? common_interrupt+0x3e/0xa0 [105954.385060] ? asm_common_interrupt+0x22/0x40 The root cause of this was that there was a free (dma_free_attrs) in the interrupt context. There was a device discovery/fabric scan in progress. A module unload was issued which set the UNLOADING flag. As part of the discovery, after receiving an interrupt a work queue was scheduled (which involved a work to be queued). Since the UNLOADING flag is set, the work item was not allocated and the mapped memory had to be freed. The free occurred in interrupt context leading to system crash. Delay the driver unload until the fabric scan is complete to avoid the crash.
Product status
783e0dc4f66ade6bbd8833b6bae778158d54c1a6 (git) before d8af012f92eee021c6ebb7093e65813c926c336b
783e0dc4f66ade6bbd8833b6bae778158d54c1a6 (git) before 891f9969a29e9767a453cef4811c8d2472ccab49
783e0dc4f66ade6bbd8833b6bae778158d54c1a6 (git) before 984dc1a51bf6fc3ca4e726abe790ec38952935d8
783e0dc4f66ade6bbd8833b6bae778158d54c1a6 (git) before 528b2f1027edfb52af0171f0f4b227fb356dde05
783e0dc4f66ade6bbd8833b6bae778158d54c1a6 (git) before d70f71d4c92bcb8b6a21ac62d4ea3e87721f4f32
783e0dc4f66ade6bbd8833b6bae778158d54c1a6 (git) before c068ebbaf52820d6bdefb9b405a1e426663c635a
783e0dc4f66ade6bbd8833b6bae778158d54c1a6 (git) before 7062eb0c488f35730334daad9495d9265c574853
783e0dc4f66ade6bbd8833b6bae778158d54c1a6 (git) before 8890bf450e0b6b283f48ac619fca5ac2f14ddd62
4.8
Any version before 4.8
5.10.251 (semver)
5.15.201 (semver)
6.1.164 (semver)
6.6.125 (semver)
6.12.72 (semver)
6.18.11 (semver)
6.19.1 (semver)
7.0-rc1 (original_commit_for_fix)
References
git.kernel.org/...c/d8af012f92eee021c6ebb7093e65813c926c336b
git.kernel.org/...c/891f9969a29e9767a453cef4811c8d2472ccab49
git.kernel.org/...c/984dc1a51bf6fc3ca4e726abe790ec38952935d8
git.kernel.org/...c/528b2f1027edfb52af0171f0f4b227fb356dde05
git.kernel.org/...c/d70f71d4c92bcb8b6a21ac62d4ea3e87721f4f32
git.kernel.org/...c/c068ebbaf52820d6bdefb9b405a1e426663c635a
git.kernel.org/...c/7062eb0c488f35730334daad9495d9265c574853
git.kernel.org/...c/8890bf450e0b6b283f48ac619fca5ac2f14ddd62