linux_dsm_epyc7002/drivers
Íñigo Huguet 1013dc896d sfc: avoid double pci_remove of VFs
[ Upstream commit 45423cff1db66cf0993e8a9bd0ac93e740149e49 ]

If pci_remove was called for a PF with VFs, the removal of the VFs was
called twice from efx_ef10_sriov_fini: one directly with pci_driver->remove
and another implicit by calling pci_disable_sriov, which also perform
the VFs remove. This was leading to crashing the kernel on the second
attempt.

Given that pci_disable_sriov already calls to pci remove function, get
rid of the direct call to pci_driver->remove from the driver.

2 different ways to trigger the bug:
- Create one or more VFs, then attach the PF to a virtual machine (at
  least with qemu/KVM)
- Create one or more VFs, then remove the PF with:
  echo 1 > /sys/bus/pci/devices/PF_PCI_ID/remove

Removing sfc module does not trigger the error, at least for me, because
it removes the VF first, and then the PF.

Example of a log with the error:
    list_del corruption, ffff967fd20a8ad0->next is LIST_POISON1 (dead000000000100)
    ------------[ cut here ]------------
    kernel BUG at lib/list_debug.c:47!
    [...trimmed...]
    RIP: 0010:__list_del_entry_valid.cold.1+0x12/0x4c
    [...trimmed...]
    Call Trace:
    efx_dissociate+0x1f/0x140 [sfc]
    efx_pci_remove+0x27/0x150 [sfc]
    pci_device_remove+0x3b/0xc0
    device_release_driver_internal+0x103/0x1f0
    pci_stop_bus_device+0x69/0x90
    pci_stop_and_remove_bus_device+0xe/0x20
    pci_iov_remove_virtfn+0xba/0x120
    sriov_disable+0x2f/0xe0
    efx_ef10_pci_sriov_disable+0x52/0x80 [sfc]
    ? pcie_aer_is_native+0x12/0x40
    efx_ef10_sriov_fini+0x72/0x110 [sfc]
    efx_pci_remove+0x62/0x150 [sfc]
    pci_device_remove+0x3b/0xc0
    device_release_driver_internal+0x103/0x1f0
    unbind_store+0xf6/0x130
    kernfs_fop_write+0x116/0x190
    vfs_write+0xa5/0x1a0
    ksys_write+0x4f/0xb0
    do_syscall_64+0x5b/0x1a0
    entry_SYSCALL_64_after_hwframe+0x65/0xca

Signed-off-by: Íñigo Huguet <ihuguet@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-07-19 09:44:52 +02:00
..
accessibility
acpi ACPI: bgrt: Fix CFI violation 2021-07-14 16:56:12 +02:00
amba
android
ata pata_ep93xx: fix deferred probing 2021-07-14 16:56:04 +02:00
atm atm: nicstar: register the interrupt handler in the right place 2021-07-19 09:44:52 +02:00
auxdisplay
base drivers: base: Fix device link removal 2021-06-03 09:00:34 +02:00
bcma
block loop: Fix missing discard support when using LOOP_CONFIGURE 2021-07-14 16:55:46 +02:00
bluetooth Bluetooth: btqca: Don't modify firmware contents in-place 2021-07-14 16:55:34 +02:00
bus bus: mhi: Wait for M2 state during system resume 2021-07-14 16:55:42 +02:00
cdrom cdrom: gdrom: initialize global variable at init time 2021-05-26 12:06:55 +02:00
char tpm: Replace WARN_ONCE() with dev_err_once() in tpm_tis_status() 2021-07-14 16:56:53 +02:00
clk clk: tegra: Ensure that PLLU configuration is applied properly 2021-07-19 09:44:43 +02:00
clocksource clocksource/drivers/timer-ti-dm: Save and restore timer TIOCP_CFG 2021-07-14 16:56:12 +02:00
connector
counter
cpufreq cpufreq: Make cpufreq_online() call driver->offline() on errors 2021-07-14 16:56:13 +02:00
cpuidle
crypto crypto: qce - fix error return code in qce_skcipher_async_req_handle() 2021-07-14 16:56:54 +02:00
dax
dca
devfreq PM / devfreq: Add missing error code in devfreq_add_device() 2021-07-14 16:56:11 +02:00
dio
dma dmaengine: mediatek: use GFP_NOWAIT instead of GFP_ATOMIC in prep_dma 2021-06-30 08:47:20 -04:00
dma-buf
edac EDAC/Intel: Do not load EDAC driver when running as a guest 2021-07-14 16:56:00 +02:00
eisa
extcon extcon: max8997: Add missing modalias string 2021-07-14 16:56:47 +02:00
firewire
firmware firmware: stratix10-svc: Fix a resource leak in an error handling path 2021-07-14 16:56:39 +02:00
fpga
fsi fsi/sbefifo: Fix reset timeout 2021-07-14 16:56:41 +02:00
gnss
gpio gpio: AMD8111 and TQMX86 require HAS_IOPORT_MAP 2021-07-07 08:22:46 -04:00
gpu drm/amdkfd: Walk through list with dqm lock hold 2021-07-19 09:44:51 +02:00
greybus
hid HID: wacom: Correct base usage for capacitive ExpressKey status bits 2021-07-14 16:56:01 +02:00
hsi
hv drivers: hv: Fix missing error code in vmbus_connect() 2021-07-14 16:55:59 +02:00
hwmon hwmon: (max31790) Fix fan speed reporting for fan7..12 2021-07-14 16:56:08 +02:00
hwspinlock
hwtracing coresight: core: Fix use of uninitialized pointer 2021-07-14 16:56:46 +02:00
i2c i2c: robotfuzz-osif: fix control-request directions 2021-06-30 08:47:25 -04:00
i3c
ide
idle
iio iio: prox: isl29501: Fix buffer alignment in iio_push_to_buffers_with_timestamp() 2021-07-14 16:56:46 +02:00
infiniband RDMA/rxe: Don't overwrite errno from ib_umem_get() 2021-07-19 09:44:52 +02:00
input Input: hil_kbd - fix error return code in hil_dev_connect() 2021-07-14 16:56:38 +02:00
interconnect interconnect: qcom: Add missing MODULE_DEVICE_TABLE 2021-06-03 09:00:46 +02:00
iommu iommu/dma: Fix compile warning in 32-bit builds 2021-07-14 16:56:55 +02:00
ipack
irqchip irqchip/gic-v3: Workaround inconsistent PMR setting on NMI entry 2021-06-23 14:42:49 +02:00
isdn mISDN: fix possible use-after-free in HFC_cleanup() 2021-07-19 09:44:38 +02:00
leds leds: ktd2692: Fix an error handling path 2021-07-14 16:56:48 +02:00
lightnvm
macintosh
mailbox mailbox: qcom-ipcc: Fix IPCC mbox channel exhaustion 2021-07-14 16:56:53 +02:00
mcb
md dm writecache: commit just one block, not a full page 2021-07-19 09:44:50 +02:00
media media: exynos4-is: remove a now unused integer 2021-07-14 16:56:54 +02:00
memory
memstick memstick: rtsx_usb_ms: fix UAF 2021-07-14 16:55:53 +02:00
message
mfd mfd: rn5t618: Fix IRQ trigger by changing it to level mode 2021-07-14 16:56:40 +02:00
misc habanalabs: Fix an error handling path in 'hl_pci_probe()' 2021-07-14 16:56:47 +02:00
mmc mmc: vub3000: fix control-request direction 2021-07-14 16:56:54 +02:00
most
mtd mtd: rawnand: marvell: add missing clk_disable_unprepare() on error in marvell_nfc_resume() 2021-07-14 16:56:47 +02:00
mux
net sfc: avoid double pci_remove of VFs 2021-07-19 09:44:52 +02:00
nfc
ntb
nubus
nvdimm
nvme nvme-pci: look for StorageD3Enable on companion ACPI device instead 2021-07-14 16:56:11 +02:00
nvmem
of of: Fix truncation of memory sizes on 32-bit platforms 2021-07-14 16:56:46 +02:00
opp
oprofile
parisc
parport
pci PCI: hv: Add check for hyperv_initialized in init_hv_pci_drv() 2021-07-14 16:56:00 +02:00
pcmcia
perf perf/arm-cmn: Fix invalid pointer when access dtc object sharing the same IRQ number 2021-07-14 16:56:08 +02:00
phy phy: ti: dm816x: Fix the error handling path in 'dm816x_usb_phy_probe() 2021-07-14 16:56:47 +02:00
pinctrl pinctrl: mcp23s08: fix race condition in irq handler 2021-07-19 09:44:46 +02:00
platform platform/x86: toshiba_acpi: Fix missing error code in toshiba_acpi_setup_keyboard() 2021-07-14 16:56:00 +02:00
pnp
power
powercap
pps
ps3
ptp ptp: improve max_adj check against unreasonable values 2021-06-23 14:42:45 +02:00
pwm pwm: atmel: Fix duty cycle calculation in .get_state() 2021-05-19 10:13:04 +02:00
rapidio rapidio: handle create_workqueue() failure 2021-05-26 12:06:52 +02:00
ras
regulator regulator: hi655x: Fix pass wrong pointer to config.driver_data 2021-07-14 16:56:09 +02:00
remoteproc remoteproc: qcom_q6v5_mss: Validate p_filesz in ELF loader 2021-05-19 10:13:01 +02:00
reset
rpmsg rpmsg: qcom_glink_native: fix error return code of qcom_glink_rx_data() 2021-05-19 10:13:02 +02:00
rtc rtc: stm32: Fix unbalanced clk_disable_unprepare() on probe error path 2021-07-14 16:55:44 +02:00
s390 s390/cio: dont call css_wait_for_slow_path() inside a lock 2021-07-14 16:55:43 +02:00
sbus
scsi scsi: core: Retry I/O for Notify (Enable Spinup) Required error 2021-07-14 16:56:54 +02:00
sfi
sh
siox
slimbus
soc
soundwire soundwire: stream: Fix test for DP prepare complete 2021-07-14 16:56:47 +02:00
spi spi: spi-sun6i: Fix chipselect/clock bug 2021-07-14 16:56:10 +02:00
spmi
ssb ssb: Fix error return code in ssb_bus_scan() 2021-07-14 16:56:21 +02:00
staging staging: mt7621-dts: fix pci address for PCI memory range 2021-07-14 16:56:46 +02:00
target scsi: target: cxgbit: Unmap DMA buffer before calling target_execute_cmd() 2021-07-14 16:56:53 +02:00
tc
tee optee: use export_uuid() to copy client UUID 2021-06-10 13:39:21 +02:00
thermal thermal/cpufreq_cooling: Update offline CPUs per-cpu thermal_pressure 2021-07-14 16:55:47 +02:00
thunderbolt thunderbolt: Bond lanes only when dual_link_port != NULL in alloc_dev_default() 2021-07-14 16:56:44 +02:00
tty serial: mvebu-uart: correctly calculate minimal possible baudrate 2021-07-14 16:56:50 +02:00
uio uio_hv_generic: Fix a memory leak in error handling paths 2021-05-26 12:06:52 +02:00
usb usb: dwc2: Don't reset the core after setting turnaround time 2021-07-14 16:56:43 +02:00
vdpa {net,vdpa}/mlx5: Configure interface MAC into mpfs L2 table 2021-06-03 09:00:36 +02:00
vfio vfio/pci: Handle concurrent vma faults 2021-07-14 16:56:50 +02:00
vhost
video backlight: lm3630a_bl: Put fwnode in error case during ->probe() 2021-07-14 16:56:38 +02:00
virt
virtio
visorbus visorbus: fix error return code in visorchipset_init() 2021-07-14 16:56:41 +02:00
vlynq
vme
w1
watchdog
xen xen/events: reset active flag for lateeoi events later 2021-07-11 12:53:31 +02:00
zorro
Kconfig
Makefile