WSL2-Linux-Kernel/drivers/scsi
Mike Christie 0b4ea5b72b scsi: qedi: Fix ABBA deadlock in qedi_process_tmf_resp() and qedi_process_cmd_cleanup_resp()
commit f10f582d28 upstream.

This fixes a deadlock added with commit b40f3894e3 ("scsi: qedi: Complete
TMF works before disconnect")

Bug description from Jia-Ju Bai:

qedi_process_tmf_resp()
  spin_lock(&session->back_lock); --> Line 201 (Lock A)
  spin_lock(&qedi_conn->tmf_work_lock); --> Line 230 (Lock B)

qedi_process_cmd_cleanup_resp()
  spin_lock_bh(&qedi_conn->tmf_work_lock); --> Line 752 (Lock B)
  spin_lock_bh(&conn->session->back_lock); --> Line 784 (Lock A)

When qedi_process_tmf_resp() and qedi_process_cmd_cleanup_resp() are
concurrently executed, the deadlock can occur.

This patch fixes the deadlock by not holding the tmf_work_lock in
qedi_process_cmd_cleanup_resp while holding the back_lock. The
tmf_work_lock is only needed while we remove the tmf_work from the
work_list.

Link: https://lore.kernel.org/r/20220208185448.6206-1-michael.christie@oracle.com
Fixes: b40f3894e3 ("scsi: qedi: Complete TMF works before disconnect")
Cc: Manish Rangankar <mrangankar@marvell.com>
Cc: Nilesh Javali <njavali@marvell.com>
Reported-by: TOTE Robot <oslab@tsinghua.edu.cn>
Reported-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-02-23 12:03:22 +01:00
..
aacraid
aic7xxx
aic94xx
arcmsr
arm scsi: acornscsi: Remove scsi_cmd_to_tag() reference 2021-10-04 21:54:18 -04:00
be2iscsi
bfa
bnx2fc scsi: bnx2fc: Make bnx2fc_recv_frame() mp safe 2022-02-08 18:34:11 +01:00
bnx2i
csiostor scsi: csiostor: Uninitialized data in csio_ln_vnp_read_cbfn() 2021-11-18 19:16:52 +01:00
cxgbi ethernet: fix PTP_1588_CLOCK dependencies 2021-08-13 17:49:05 -07:00
cxlflash pci-v5.15-changes 2021-09-07 19:13:42 -07:00
device_handler
dpt
elx scsi: elx: efct: Don't use GFP_KERNEL under spin lock 2022-02-01 17:27:07 +01:00
esas2r
fcoe
fnic scsi: fnic: Stop setting scsi_cmnd.tag 2021-08-16 13:33:24 -04:00
hisi_sas
ibmvscsi scsi: ibmvfc: Fix up duplicate response detection 2021-10-20 22:59:45 -04:00
ibmvscsi_tgt
isci
libfc
libsas
lpfc scsi: lpfc: Fix pt2pt NVMe PRLI reject LOGO loop 2022-02-23 12:03:20 +01:00
megaraid scsi: megaraid_sas: Fix concurrent access to ISR between IRQ polling and real interrupt 2021-11-18 19:16:50 +01:00
mpi3mr scsi: mpi3mr: Fixes around reply request queues 2022-01-27 11:05:03 +01:00
mpt3sas scsi: mpt3sas: Fix incorrect system timestamp 2021-12-01 09:04:47 +01:00
mvsas
pcmcia
pm8001 scsi: pm8001: Fix use-after-free for aborted SSP/STP sas_task 2022-02-23 12:03:06 +01:00
qedf scsi: qedf: Change context reset messages to ratelimited 2022-02-16 12:56:13 +01:00
qedi scsi: qedi: Fix ABBA deadlock in qedi_process_tmf_resp() and qedi_process_cmd_cleanup_resp() 2022-02-23 12:03:22 +01:00
qla2xxx scsi: qla2xxx: Format log strings only if needed 2021-12-14 10:57:12 +01:00
qla4xxx
smartpqi scsi: smartpqi: Add controller handshake during kdump 2021-11-25 09:48:27 +01:00
snic scsi: snic: Fix spelling mistake 'progres' -> 'progress' 2021-08-24 22:56:32 -04:00
sym53c8xx_2
ufs scsi: ufs: Fix a deadlock in the error handler 2022-02-23 12:03:15 +01:00
.gitignore
3w-9xxx.c
3w-9xxx.h
3w-sas.c
3w-sas.h
3w-xxxx.c
3w-xxxx.h
53c700.c
53c700.h
53c700.scr
53c700_d.h_shipped
BusLogic.c
BusLogic.h
FlashPoint.c
Kconfig
Makefile scsi: core: Fix missing FORCE for scsi_devinfo_tbl.c build rule 2021-08-23 23:07:05 -04:00
NCR5380.c
NCR5380.h
a100u2w.c
a100u2w.h
a2091.c
a2091.h
a3000.c
a3000.h
a4000t.c
advansys.c scsi: advansys: Fix kernel pointer leak 2021-11-25 09:48:27 +01:00
aha152x.c
aha152x.h
aha1542.c
aha1542.h
aha1740.c
aha1740.h
am53c974.c
atari_scsi.c
atp870u.c
atp870u.h
bvme6000_scsi.c
ch.c
constants.c
dc395x.c scsi: dc395: Fix error case unwinding 2021-11-18 19:16:48 +01:00
dc395x.h
dmx3191d.c
dpt_i2o.c
dpti.h
esp_scsi.c
esp_scsi.h
fdomain.c
fdomain.h
fdomain_isa.c
fdomain_pci.c
g_NCR5380.c
gvp11.c
gvp11.h
hosts.c scsi: core: Avoid leaving shost->last_reset with stale value if EH does not run 2021-11-18 19:15:51 +01:00
hpsa.c
hpsa.h
hpsa_cmd.h
hptiop.c
hptiop.h
imm.c
imm.h
initio.c
initio.h
ipr.c
ipr.h
ips.c
ips.h
iscsi_boot_sysfs.c
iscsi_tcp.c
iscsi_tcp.h
jazz_esp.c
lasi700.c parisc: Make struct parisc_driver::remove() return void 2021-08-30 10:18:25 +02:00
libiscsi.c scsi: libiscsi: Fix UAF in iscsi_conn_get_param()/iscsi_conn_teardown() 2022-01-11 15:35:17 +01:00
libiscsi_tcp.c
mac53c94.c
mac53c94.h
mac_esp.c
mac_scsi.c
megaraid.c
megaraid.h
mesh.c
mesh.h
mvme16x_scsi.c
mvme147.c
mvme147.h
mvumi.c
mvumi.h
myrb.c
myrb.h
myrs.c scsi: myrs: Fix crash in error case 2022-02-16 12:56:14 +01:00
myrs.h
ncr53c8xx.c scsi: ncr53c8xx: Remove unused retrieve_from_waiting_list() function 2021-09-13 22:15:47 -04:00
ncr53c8xx.h
nsp32.c
nsp32.h
nsp32_debug.c
nsp32_io.h
pmcraid.c
pmcraid.h
ppa.c
ppa.h
ps3rom.c
qla1280.c scsi: qla1280: Stop using scsi_cmnd.tag 2021-08-23 23:06:56 -04:00
qla1280.h
qlogicfas.c
qlogicfas408.c
qlogicfas408.h
qlogicpti.c
qlogicpti.h
raid_class.c
script_asm.pl
scsi.c scsi: core: Fix scsi_device_max_queue_depth() 2022-01-27 11:04:10 +01:00
scsi.h
scsi_bsg.c
scsi_common.c
scsi_debug.c scsi: scsi_debug: Sanity check block descriptor length in resp_mode_select() 2021-12-22 09:32:51 +01:00
scsi_debugfs.c scsi: core: Show SCMD_LAST in text form 2022-01-27 11:05:22 +01:00
scsi_debugfs.h
scsi_devinfo.c
scsi_dh.c
scsi_error.c scsi: core: Avoid leaving shost->last_reset with stale value if EH does not run 2021-11-18 19:15:51 +01:00
scsi_ioctl.c scsi: scsi_ioctl: Validate command size 2021-11-18 19:15:51 +01:00
scsi_lib.c scsi: core: Fix scsi_mode_sense() buffer length handling 2021-11-25 09:48:26 +01:00
scsi_lib_dma.c
scsi_logging.c
scsi_logging.h
scsi_netlink.c
scsi_pm.c scsi: block: pm: Always set request queue runtime active in blk_post_runtime_resume() 2022-01-27 11:04:15 +01:00
scsi_priv.h
scsi_proc.c
scsi_sas_internal.h
scsi_scan.c scsi: core: Reallocate device's budget map on queue depth change 2022-02-23 12:03:06 +01:00
scsi_sysctl.c
scsi_sysfs.c scsi: core: sysfs: Fix setting device state to SDEV_RUNNING 2021-12-01 09:04:50 +01:00
scsi_trace.c
scsi_transport_api.h
scsi_transport_fc.c
scsi_transport_iscsi.c scsi: iscsi: Unblock session then wake up error handler 2021-12-08 09:04:39 +01:00
scsi_transport_sas.c
scsi_transport_spi.c
scsi_transport_srp.c
scsicam.c
sd.c scsi: sd: Fix sd_do_mode_sense() buffer length handling 2021-12-01 09:04:38 +01:00
sd.h
sd_dif.c
sd_zbc.c scsi: sd_zbc: Support disks with more than 2**32 logical blocks 2021-09-21 23:52:55 -04:00
sense_codes.h
ses.c scsi: ses: Fix unsigned comparison with less than zero 2021-09-28 22:42:06 -04:00
sg.c SCSI misc on 20210902 2021-09-02 15:09:46 -07:00
sgiwd93.c
sim710.c
sni_53c710.c
sr.c scsi: sr: Don't use GFP_DMA 2022-01-27 11:05:03 +01:00
sr.h
sr_ioctl.c scsi: sr: Fix spelling mistake "does'nt" -> "doesn't" 2021-09-13 22:15:49 -04:00
sr_vendor.c scsi: sr: Don't use GFP_DMA 2022-01-27 11:05:03 +01:00
st.c scsi: st: Add missing break in switch statement in st_ioctl() 2021-09-13 22:15:39 -04:00
st.h st: do not allocate a gendisk 2021-08-23 12:54:30 -06:00
st_options.h
stex.c
storvsc_drv.c scsi: storvsc: Fix validation for unsolicited incoming packets 2021-10-12 21:59:50 -04:00
sun3_scsi.c
sun3_scsi_vme.c
sun3x_esp.c
sun_esp.c
virtio_scsi.c scsi: virtio_scsi: Fix spelling mistake "Unsupport" -> "Unsupported" 2021-09-28 22:47:28 -04:00
vmw_pvscsi.c scsi: vmw_pvscsi: Set residual data length conditionally 2022-01-05 12:42:39 +01:00
vmw_pvscsi.h
wd33c93.c
wd33c93.h
wd719x.c scsi: wd719: Stop using scsi_cmnd.tag 2021-08-16 13:33:24 -04:00
wd719x.h
xen-scsifront.c
zalon.c parisc: Make struct parisc_driver::remove() return void 2021-08-30 10:18:25 +02:00
zorro7xx.c
zorro_esp.c