linux-stable/drivers/scsi
Chengfeng Ye 90e17ab02a scsi: qedi: Fix potential deadlock on &qedi_percpu->p_work_lock
[ Upstream commit dd64f80587 ]

As &qedi_percpu->p_work_lock is acquired by hard IRQ qedi_msix_handler(),
other acquisitions of the same lock under process context should disable
IRQ, otherwise deadlock could happen if the IRQ preempts the execution
while the lock is held in process context on the same CPU.

qedi_cpu_offline() is one such function which acquires the lock in process
context.

[Deadlock Scenario]
qedi_cpu_offline()
    ->spin_lock(&p->p_work_lock)
        <irq>
        ->qedi_msix_handler()
        ->edi_process_completions()
        ->spin_lock_irqsave(&p->p_work_lock, flags); (deadlock here)

This flaw was found by an experimental static analysis tool I am developing
for IRQ-related deadlocks.

The tentative patch fix the potential deadlock by spin_lock_irqsave()
under process context.

Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
Link: https://lore.kernel.org/r/20230726125655.4197-1-dg573847474@gmail.com
Acked-by: Manish Rangankar <mrangankar@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-09-23 10:47:58 +02:00
..
aacraid scsi: aacraid: Fix error handling paths in aac_probe_one() 2020-10-01 13:14:42 +02:00
aic7xxx scsi: aic7xxx: Fix unintentional sign extension issue on left shift of u8 2021-07-28 11:13:44 +02:00
aic94xx scsi: aic94xx: Add missing check for dma_map_single() 2023-03-11 16:31:41 +01:00
arcmsr scsi: arcmsr: clean up clang warning on extraneous parentheses 2019-11-24 08:20:59 +01:00
arm scsi: eesox: Fix different dev_id between request_irq() and free_irq() 2020-08-19 08:14:55 +02:00
be2iscsi scsi: be2iscsi: Fix an error handling path in beiscsi_dev_probe() 2021-07-20 16:16:15 +02:00
bfa scsi: bfa: Replace snprintf() with sysfs_emit() 2022-04-15 14:15:01 +02:00
bnx2fc scsi: bnx2fc: Make bnx2fc_recv_frame() mp safe 2022-02-08 18:23:18 +01:00
bnx2i scsi: iscsi: Fix shost->max_id use 2021-07-20 16:16:08 +02:00
csiostor scsi: csiostor: Uninitialized data in csio_ln_vnp_read_cbfn() 2021-11-26 11:36:13 +01:00
cxgbi scsi: iscsi: Fix shost->max_id use 2021-07-20 16:16:08 +02:00
cxlflash scsi: cxlflash: Fix error return code in cxlflash_probe() 2020-10-01 13:14:45 +02:00
device_handler scsi: scsi_dh_alua: Fix memleak for 'qdata' in alua_activate() 2023-04-05 11:15:33 +02:00
dpt
esas2r scsi: esas2r: unlock on error in esas2r_nvram_read_direct() 2020-01-23 08:21:38 +01:00
fcoe scsi: fcoe: Fix transport not deattached when fcoe_if_init() fails 2023-01-18 11:30:23 +01:00
fnic scsi: fnic: Fix error return code in fnic_probe() 2020-12-30 11:26:01 +01:00
hisi_sas scsi: libsas: Add LUN number check in .slave_alloc callback 2021-07-28 11:13:44 +02:00
ibmvscsi scsi: ibmvfc: Fix invalid state machine BUG_ON() 2021-05-22 10:59:34 +02:00
ibmvscsi_tgt scsi: ibmvscsis: Increase INITIAL_SRP_LIMIT to 1024 2022-04-20 09:12:49 +02:00
isci scsi: libsas: Add LUN number check in .slave_alloc callback 2021-07-28 11:13:44 +02:00
libfc scsi: libfc: Fix use after free in fc_exch_abts_resp() 2022-04-15 14:15:02 +02:00
libsas scsi: libsas: Fix sas_ata_qc_issue() handling of NCQ NON DATA commands 2022-04-15 14:14:40 +02:00
lpfc scsi: lpfc: Fix port stuck in bypassed state after LIP in PT2PT topology 2022-06-25 11:49:14 +02:00
megaraid scsi: megaraid_sas: Fix fw_crash_buffer_show() 2023-04-26 11:21:51 +02:00
mpt3sas scsi: mpt3sas: Fix use-after-free warning 2022-09-15 12:17:05 +02:00
mvsas scsi: mvsas: Add PCI ID of RocketRaid 2640 2022-04-20 09:12:50 +02:00
osd
pcmcia
pm8001 treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
qedf scsi: qedf: Fix a UAF bug in __qedf_probe() 2022-10-26 13:19:17 +02:00
qedi scsi: qedi: Fix potential deadlock on &qedi_percpu->p_work_lock 2023-09-23 10:47:58 +02:00
qla2xxx scsi: qla2xxx: Array index may go out of bound 2023-08-11 11:45:30 +02:00
qla4xxx scsi: qla4xxx: Fix an error handling path in 'qla4xxx_get_host_stats()' 2020-10-29 09:55:07 +01:00
smartpqi scsi: smartpqi: Fix DMA direction for RAID requests 2022-08-25 11:15:17 +02:00
snic scsi: snic: Fix double free in snic_tgt_create() 2023-08-30 16:31:56 +02:00
sym53c8xx_2 scsi: sym53c8xx: fix NULL pointer dereference panic in sym_int_sir() 2019-11-20 18:46:29 +01:00
ufs scsi: ufs: core: Add soft dependency on governor_simpleondemand 2023-04-05 11:15:36 +02:00
.gitignore
3w-9xxx.c scsi: 3w-9xxx: Avoid disabling device if failing to enable it 2022-10-26 13:19:40 +02:00
3w-9xxx.h
3w-sas.c
3w-sas.h
3w-xxxx.c scsi: 3w-xxxx: Add error handling for initialization failure in tw_probe() 2023-08-11 11:45:09 +02:00
3w-xxxx.h
53c700.c scsi: 53c700: Check that command slot is not NULL 2023-08-16 18:13:01 +02:00
53c700.h
53c700.scr
53c700_d.h_shipped
BusLogic.c scsi: BusLogic: Fix missing pr_cont() use 2021-09-22 11:48:09 +02:00
BusLogic.h scsi: BusLogic: Fix 64-bit system enumeration error for Buslogic 2021-06-03 08:38:10 +02:00
FlashPoint.c scsi: FlashPoint: Rename si_flags field 2021-07-20 16:15:55 +02:00
Kconfig scsi: dpt_i2o: Do not process completions with invalid addresses 2023-06-09 10:24:04 +02:00
Makefile
NCR5380.c scsi: NCR5380: Add disconnect_mask module parameter 2020-01-04 19:13:04 +01:00
NCR5380.h scsi: NCR5380: Have NCR5380_select() return a bool 2019-11-20 18:47:49 +01:00
a100u2w.c
a100u2w.h
a2091.c
a2091.h
a3000.c
a3000.h
a4000t.c
advansys.c scsi: advansys: Fix kernel pointer leak 2021-11-26 11:36:20 +01:00
aha152x.c scsi: aha152x: Fix aha152x_setup() __setup handler return value 2022-04-15 14:15:02 +02:00
aha152x.h
aha1542.c
aha1542.h
aha1740.c
aha1740.h
am53c974.c
atari_scsi.c scsi: atari_scsi: sun3_scsi: Set sg_tablesize to 1 instead of SG_NONE 2020-01-04 19:12:56 +01:00
atp870u.c
atp870u.h
bvme6000_scsi.c
ch.c scsi: ch: Make it possible to open a ch device multiple times again 2019-10-29 09:19:50 +01:00
constants.c
dc395x.c treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
dc395x.h
dmx3191d.c
dpt_i2o.c scsi: dpt_i2o: Do not process completions with invalid addresses 2023-06-09 10:24:04 +02:00
dpti.h scsi: dpt_i2o: Remove broken pass-through ioctl (I2OUSERCMD) 2023-06-09 10:24:04 +02:00
esp_scsi.c
esp_scsi.h
g_NCR5380.c
gdth.c
gdth.h
gdth_ioctl.h
gdth_proc.c
gdth_proc.h
gvp11.c
gvp11.h
hosts.c scsi: core: Remove the /proc/scsi/${proc_name} directory earlier 2023-03-17 08:31:43 +01:00
hpsa.c scsi: hpsa: Fix allocation size for scsi_host_alloc() 2023-02-06 07:49:41 +01:00
hpsa.h scsi: hpsa: use local workqueues instead of system workqueues 2023-01-18 11:30:22 +01:00
hpsa_cmd.h scsi: hpsa: correct ioaccel2 chaining 2019-07-10 09:53:37 +02:00
hptiop.c
hptiop.h
imm.c
imm.h
initio.c
initio.h
ipr.c scsi: ipr: Work around fortify-string warning 2023-03-11 16:31:59 +01:00
ipr.h scsi: ipr: Fix softlockup when rescanning devices in petitboot 2020-04-02 15:28:15 +02:00
ips.c scsi: ips: fix missing break in switch 2019-12-01 09:16:26 +01:00
ips.h
iscsi_boot_sysfs.c scsi: iscsi: Fix reference count leak in iscsi_boot_create_kobj 2020-06-25 15:33:01 +02:00
iscsi_tcp.c scsi: iscsi_tcp: Fix UAF during login when accessing the shost ipaddress 2023-02-22 12:47:12 +01:00
iscsi_tcp.h
jazz_esp.c scsi: jazz_esp: Add IRQ check 2021-05-22 10:59:33 +02:00
lasi700.c
libiscsi.c scsi: libiscsi: Fix UAF in iscsi_conn_get_param()/iscsi_conn_teardown() 2022-01-11 13:58:50 +01:00
libiscsi_tcp.c
mac53c94.c
mac53c94.h
mac_esp.c
mac_scsi.c scsi: atari_scsi: sun3_scsi: Set sg_tablesize to 1 instead of SG_NONE 2020-01-04 19:12:56 +01:00
megaraid.c scsi: megaraid: Fix mega_cmd_done() CMDID_INT_CMDS 2023-05-17 11:13:12 +02:00
megaraid.h
mesh.c scsi: mesh: Fix panic after host or bus reset 2020-08-19 08:14:59 +02:00
mesh.h
mvme16x_scsi.c
mvme147.c
mvme147.h
mvumi.c scsi: mvumi: Fix error return in mvumi_io_attach() 2020-10-30 10:38:28 +01:00
mvumi.h
ncr53c8xx.c
ncr53c8xx.h
nsp32.c
nsp32.h
nsp32_debug.c
nsp32_io.h
osst.c
osst.h
osst_detect.h
osst_options.h
pmcraid.c scsi: pmcraid: Fix missing resource cleanup in error case 2022-06-25 11:49:14 +02:00
pmcraid.h
ppa.c
ppa.h
ps3rom.c
qla1280.c
qla1280.h
qlogicfas.c
qlogicfas408.c
qlogicfas408.h
qlogicpti.c
qlogicpti.h
raid_class.c scsi: core: raid_class: Remove raid_component_add() 2023-08-30 16:31:56 +02:00
script_asm.pl
scsi.c scsi: core: Improve scsi_vpd_inquiry() checks 2023-04-26 11:21:51 +02:00
scsi.h
scsi_common.c
scsi_debug.c scsi: scsi_debug: Fix a warning in resp_write_scat() 2023-01-18 11:30:21 +01:00
scsi_debugfs.c
scsi_debugfs.h
scsi_devinfo.c scsi: core: Add BLIST_SKIP_VPD_PAGES for SKhynix H28U74301AMR 2023-04-05 11:15:37 +02:00
scsi_dh.c scsi: core: add new RDAC LENOVO/DE_Series device 2019-05-08 07:21:49 +02:00
scsi_error.c scsi: core: save/restore command resid for error handling 2019-10-29 09:19:49 +01:00
scsi_ioctl.c
scsi_lib.c scsi: core: Decrease scsi_device's iorequest_cnt if dispatch failed 2023-06-09 10:24:00 +02:00
scsi_lib_dma.c
scsi_logging.c scsi: core: Reduce memory required for SCSI logging 2019-10-07 18:57:04 +02:00
scsi_logging.h
scsi_netlink.c
scsi_pm.c scsi: core: Synchronize request queue PM status only on successful resume 2019-01-22 21:40:32 +01:00
scsi_priv.h
scsi_proc.c scsi: core: Fix legacy /proc parsing buffer overflow 2023-08-16 18:13:01 +02:00
scsi_sas_internal.h
scsi_scan.c scsi: core: Avoid printing an error if target_alloc() returns -ENXIO 2021-08-26 08:36:44 -04:00
scsi_sysctl.c
scsi_sysfs.c scsi: core: Put LLD module refcnt after SCSI device is released 2021-11-06 13:58:45 +01:00
scsi_trace.c scsi: core: scsi_trace: Use get_unaligned_be*() 2020-01-23 08:21:38 +01:00
scsi_transport_api.h
scsi_transport_fc.c
scsi_transport_iscsi.c scsi: iscsi: Unblock session then wake up error handler 2021-12-08 08:50:12 +01:00
scsi_transport_sas.c
scsi_transport_spi.c scsi: scsi_transport_spi: Set RQF_PM for domain validation commands 2021-01-12 20:10:16 +01:00
scsi_transport_srp.c scsi: scsi_transport_srp: Don't block target in SRP_PORT_LOST state 2021-04-28 13:16:49 +02:00
scsicam.c
sd.c scsi: sd: Free scsi_disk device via put_device() 2021-10-09 14:11:03 +02:00
sd.h
sd_dif.c
sd_zbc.c
sense_codes.h
ses.c scsi: ses: Handle enclosure with just a primary component gracefully 2023-04-20 12:04:40 +02:00
sg.c scsi: sg: Allow waiting for commands to complete on removed device 2022-08-25 11:15:32 +02:00
sgiwd93.c
sim710.c
sni_53c710.c scsi: sni_53c710: Add IRQ check 2021-05-22 10:59:34 +02:00
sr.c scsi: sr: Don't use GFP_DMA 2022-01-27 09:04:30 +01:00
sr.h
sr_ioctl.c
sr_vendor.c scsi: sr: Don't use GFP_DMA 2022-01-27 09:04:30 +01:00
st.c scsi: st: Fix a use after free in st_open() 2021-04-07 12:48:48 +02:00
st.h
st_options.h
stex.c scsi: stex: Fix gcc 13 warnings 2023-06-09 10:24:02 +02:00
storvsc_drv.c scsi: storvsc: Fix handling of virtual Fibre Channel timeouts 2023-08-16 18:13:01 +02:00
sun3_scsi.c scsi: atari_scsi: sun3_scsi: Set sg_tablesize to 1 instead of SG_NONE 2020-01-04 19:12:56 +01:00
sun3_scsi_vme.c
sun3x_esp.c scsi: sun3x_esp: Add IRQ check 2021-05-22 10:59:34 +02:00
sun_esp.c
virtio_scsi.c scsi: virtio_scsi: Fix spelling mistake "Unsupport" -> "Unsupported" 2021-10-17 10:19:49 +02:00
vmw_pvscsi.c scsi: vmw_pvscsi: Set residual data length conditionally 2022-01-05 12:34:59 +01:00
vmw_pvscsi.h scsi: vmw_pvscsi: Expand vcpuHint to 16 bits 2022-06-25 11:49:14 +02:00
wd33c93.c
wd33c93.h
wd719x.c
wd719x.h
xen-scsifront.c xen/scsifront: don't use gnttab_query_foreign_access() for mapped status 2022-03-11 10:15:13 +01:00
zalon.c
zorro7xx.c scsi: zorro7xx: Fix a resource leak in zorro7xx_remove_one() 2022-04-15 14:15:04 +02:00
zorro_esp.c scsi: zorro_esp: Limit DMA transfers to 65536 bytes (except on Fastlane) 2019-12-17 20:36:03 +01:00