In the Linux kernel, the following vulnerability has been resolved:
scsi: lpfc: Fix SCSI I/O completion and abort handler deadlock
During stress I/O tests with 500+ vports, hard LOCKUP call traces are observed.
CPU A: nativequeuedspinlockslowpath+0x192 rawspinlockirqsave+0x32 lpfchandlefcperr+0x4c6 lpfcfcpiocmdwqecmpl+0x964 lpfcsli4fphandlecqe+0x266 _lpfcsli4processcq+0x105 _lpfcsli4hbaprocesscq+0x3c lpfccqpollhdler+0x16 irqpollsoftirq+0x76 _softirqentrytextstart+0xe4 irqexit+0xf7 do_IRQ+0x7f
CPU B: nativequeuedspinlockslowpath+0x5b rawspinlock+0x1c lpfcaborthandler+0x13e scmdehaborthandler+0x85 processonework+0x1a7 workerthread+0x30 kthread+0x112 retfrom_fork+0x1f
Diagram of lockup:
CPUA CPUB ---- ---- lpfccmd->buflock phba->hbalock lpfccmd->buflock phba->hbalock
Fix by reordering the taking of the lpfccmd->buflock and phba->hbalock in lpfcaborthandler routine so that it tries to take the lpfccmd->buflock first before phba->hbalock.