linux/drivers/pci/hotplug
Niklas Schnelle f86ca2b553 s390/pci: Prevent self deletion in disable_slot()
commit 47c3978448 upstream.

As disable_slot() takes a struct zpci_dev from the Configured to the
Standby state. In Standby there is still a hotplug slot so this is not
usually a case of sysfs self deletion. This is important because self
deletion gets very hairy in terms of locking (see for example
recover_store() in arch/s390/pci/pci_sysfs.c).

Because the pci_dev_put() is not within the critical section of the
zdev->state_lock however, disable_slot() can turn into a case of self
deletion if zPCI device event handling slips between the mutex_unlock()
and the pci_dev_put(). If the latter is the last put and
zpci_release_device() is called this then tries to remove the hotplug
slot via zpci_exit_slot() which will try to remove the hotplug slot
directory the disable_slot() is part of i.e. self deletion.

Prevent this by widening the zdev->state_lock critical section to
include the pci_dev_put() which is then guaranteed to happen with the
struct zpci_dev still in Standby state ensuring it will not lead to
a zpci_release_device() call as at least the zPCI event handling code
still holds a reference.

Cc: stable@vger.kernel.org
Fixes: a46044a92a ("s390/pci: fix zpci_zdev_put() on reserve")
Reviewed-by: Gerd Bayer <gbayer@linux.ibm.com>
Tested-by: Gerd Bayer <gbayer@linux.ibm.com>
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-06-27 11:11:14 +01:00
..
acpi_pcihp.c PCI: Fix kernel-doc errors 2021-03-11 17:37:20 -06:00
acpiphp.h PCI: Remove unused function declarations 2023-08-24 15:38:59 -05:00
acpiphp_ampere_altra.c PCI: acpiphp: Add missing MODULE_DESCRIPTION() macro 2024-06-18 10:32:19 -05:00
acpiphp_core.c PCI: acpiphp: Allow built-in drivers for Attention Indicators 2023-10-25 13:05:37 -05:00
acpiphp_glue.c Revert "PCI: acpiphp: Reassign resources on bridge if necessary" 2023-12-15 14:55:10 -06:00
acpiphp_ibm.c PCI/ACPI: Replace acpi_bus_get_device() with acpi_fetch_acpi_dev() 2022-02-04 17:10:44 -06:00
cpci_hotplug.h PCI: Remove unused function declarations 2023-08-24 15:38:59 -05:00
cpci_hotplug_core.c PCI: Remove unnecessary returns 2019-08-30 14:00:34 -05:00
cpci_hotplug_pci.c PCI: cpcihp: Declare cpci_debug in header file 2021-07-01 15:32:45 -05:00
cpcihp_generic.c PCI: Add SPDX GPL-2.0+ to replace GPL v2 or later boilerplate 2018-01-28 15:49:06 -06:00
cpcihp_zt5550.c PCI: Add SPDX GPL-2.0+ to replace GPL v2 or later boilerplate 2018-01-28 15:49:06 -06:00
cpcihp_zt5550.h PCI: Add SPDX GPL-2.0+ to replace GPL v2 or later boilerplate 2018-01-28 15:49:06 -06:00
cpqphp.h PCI: cpqphp: Use <linux/io.h> instead of <asm/io.h> 2021-11-02 14:41:58 -05:00
cpqphp_core.c PCI: Fix typos 2024-09-19 14:24:00 -05:00
cpqphp_ctrl.c PCI: Use PCI_HEADER_TYPE_* instead of literals 2023-10-03 11:55:59 -05:00
cpqphp_nvram.c PCI: cpqphp: Use DEFINE_SPINLOCK() for int15_lock 2021-04-14 15:24:10 -05:00
cpqphp_nvram.h PCI: Remove unnecessary returns 2019-08-30 14:00:34 -05:00
cpqphp_pci.c PCI: cpqphp: Fix PCIBIOS_* return value confusion 2024-12-05 14:02:21 +01:00
cpqphp_sysfs.c PCI: Add SPDX GPL-2.0+ to replace GPL v2 or later boilerplate 2018-01-28 15:49:06 -06:00
ibmphp.h PCI: Use PCI_HEADER_TYPE_* instead of literals 2023-10-03 11:55:59 -05:00
ibmphp_core.c PCI: ibmphp: Remove commented-out functions 2021-12-10 09:55:47 -06:00
ibmphp_ebda.c PCI: ibmphp: Fix double unmap of io_mem 2021-09-02 12:02:50 -05:00
ibmphp_hpc.c PCI: ibmphp: Remove unused assignments 2022-03-22 11:24:48 -05:00
ibmphp_pci.c PCI: Use PCI_HEADER_TYPE_* instead of literals 2023-10-03 11:55:59 -05:00
ibmphp_res.c PCI: ibmphp: Remove unused assignments 2022-03-22 11:24:48 -05:00
Kconfig PCI: hotplug: Add Ampere Altra Attention Indicator extension driver 2023-10-26 06:02:10 -05:00
Makefile PCI: hotplug: Add Ampere Altra Attention Indicator extension driver 2023-10-26 06:02:10 -05:00
pci_hotplug_core.c PCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions 2021-06-03 22:14:47 -05:00
pciehp.h PCI: pciehp: Detect device replacement during system sleep 2024-05-30 12:17:34 -05:00
pciehp_core.c PCI: pciehp: Avoid unnecessary device replacement check 2025-04-20 10:15:57 +02:00
pciehp_ctrl.c PCI: pciehp: Cancel bringup sequence if card is not present 2023-05-24 11:52:38 -05:00
pciehp_hpc.c PCI: pciehp: Don't enable HPIE when resuming in poll mode 2025-04-10 14:39:16 +02:00
pciehp_pci.c PCI: pciehp: Detect device replacement during system sleep 2024-05-30 12:17:34 -05:00
pnv_php.c pci/hotplug/pnv_php: Fix hotplug driver crash on Powernv 2024-07-04 23:10:40 +10:00
rpadlpar.h PCI: Add SPDX GPL-2.0+ to replace GPL v2 or later boilerplate 2018-01-28 15:49:06 -06:00
rpadlpar_core.c PCI: hotplug: Clean up include files 2022-04-05 11:13:33 -05:00
rpadlpar_sysfs.c PCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions 2021-06-03 22:14:47 -05:00
rpaphp.h PCI: hotplug: Embed hotplug_slot 2018-09-18 17:52:15 -05:00
rpaphp_core.c PCI: Use of_property_present() for testing DT property presence 2023-04-18 16:01:37 -05:00
rpaphp_pci.c PCI: rpaphp: Error out on busy status from get-sensor-state 2023-08-18 23:30:22 +10:00
rpaphp_slot.c PCI: hotplug: Clean up include files 2022-04-05 11:13:33 -05:00
s390_pci_hpc.c s390/pci: Prevent self deletion in disable_slot() 2025-06-27 11:11:14 +01:00
shpchp.h PCI: shpchp: Remove hpc_ops 2024-08-02 11:39:59 -05:00
shpchp_core.c PCI: shpchp: Remove hpc_ops 2024-08-02 11:39:59 -05:00
shpchp_ctrl.c PCI: shpchp: Remove hpc_ops 2024-08-02 11:39:59 -05:00
shpchp_hpc.c PCI: shpchp: Remove hpc_ops 2024-08-02 11:39:59 -05:00
shpchp_pci.c PCI: shpchp: Make shpchp_unconfigure_device() void 2020-05-21 15:23:20 -05:00
shpchp_sysfs.c PCI: Make pci_bus_for_each_resource() index optional 2023-04-05 15:10:09 -05:00
TODO PCI: shpchp: Remove hpc_ops 2024-08-02 11:39:59 -05:00