linux-stable/drivers
Lin Ma 5773a1e6e5 igb: Add lock to avoid data race
commit 6faee3d4ee upstream.

The commit c23d92b80e ("igb: Teardown SR-IOV before
unregister_netdev()") places the unregister_netdev() call after the
igb_disable_sriov() call to avoid functionality issue.

However, it introduces several race conditions when detaching a device.
For example, when .remove() is called, the below interleaving leads to
use-after-free.

 (FREE from device detaching)      |   (USE from netdev core)
igb_remove                         |  igb_ndo_get_vf_config
 igb_disable_sriov                 |  vf >= adapter->vfs_allocated_count?
  kfree(adapter->vf_data)          |
  adapter->vfs_allocated_count = 0 |
                                   |    memcpy(... adapter->vf_data[vf]

Moreover, the igb_disable_sriov() also suffers from data race with the
requests from VF driver.

 (FREE from device detaching)      |   (USE from requests)
igb_remove                         |  igb_msix_other
 igb_disable_sriov                 |   igb_msg_task
  kfree(adapter->vf_data)          |    vf < adapter->vfs_allocated_count
  adapter->vfs_allocated_count = 0 |

To this end, this commit first eliminates the data races from netdev
core by using rtnl_lock (similar to commit 7194792308 ("dpaa2-eth: add
MAC/PHY support through phylink")). And then adds a spinlock to
eliminate races from driver requests. (similar to commit 1e53834ce5
("ixgbe: Add locking to prevent panic when setting sriov_numvfs to zero")

Fixes: c23d92b80e ("igb: Teardown SR-IOV before unregister_netdev()")
Signed-off-by: Lin Ma <linma@zju.edu.cn>
Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://lore.kernel.org/r/20220817184921.735244-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-08-25 11:11:35 +02:00
..
accessibility
acpi ACPI: property: Return type of acpi_add_nondev_subnodes() should be bool 2022-08-25 11:11:32 +02:00
amba ARM: 9120/1: Revert "amba: make use of -1 IRQs warn" 2021-11-12 14:28:22 +01:00
android binder: fix async_free_space accounting for empty parcels 2022-01-05 12:33:49 +01:00
ata ata: libata-eh: Add missing command name 2022-08-25 11:11:31 +02:00
atm atm: idt77252: fix use-after-free bugs caused by tst_timer 2022-08-25 11:11:33 +02:00
auxdisplay auxdisplay: ht16k33: Fix frame buffer device blanking 2021-11-26 11:40:35 +01:00
base x86/speculation/mmio: Add sysfs reporting for Processor MMIO Stale Data 2022-06-16 13:01:55 +02:00
bcma bcma: Fix memory leak for internally-handled cores 2021-09-22 11:45:22 +02:00
block xen/blkfront: force data bouncing when backend is untrusted 2022-07-07 17:31:18 +02:00
bluetooth Bluetooth: hci_intel: Add check for platform_driver_register 2022-08-25 11:11:19 +02:00
bus bus: sunxi-rsb: Fix the return value of sunxi_rsb_device_create() 2022-05-12 12:17:07 +02:00
cdrom
char Revert "Revert "char/random: silence a lockdep splat with printk()"" 2022-07-29 17:06:50 +02:00
clk clk: at91: generated: consider range when calculating best rate 2022-05-25 08:41:20 +02:00
clocksource clocksource/drivers/sp804: Avoid error on multiple instances 2022-06-14 16:54:00 +02:00
connector
cpufreq cpufreq: pmac32-cpufreq: Fix refcount leak bug 2022-07-21 20:42:46 +02:00
cpuidle cpuidle: Fix kobject memory leaks in error paths 2021-11-26 11:40:29 +01:00
crypto crypto: ccp - ccp_dmaengine_unregister release dma channels 2022-04-20 09:08:13 +02:00
dax
dca
devfreq
dio
dma dmaengine: ti: Add missing put_device in ti_dra7_xbar_route_allocate 2022-07-12 16:27:29 +02:00
dma-buf dma-buf/sync_file: Don't leak fences on merge failure 2021-07-28 11:12:16 +02:00
edac EDAC: Fix calculation of returned address and next offset in edac_align_ptr() 2022-02-23 11:57:35 +01:00
eisa
extcon extcon: Modify extcon device to be created after driver data is set 2022-06-14 16:54:00 +02:00
firewire firewire: core: extend card->lock in fw_core_handle_bus_reset 2022-05-12 12:17:09 +02:00
firmware firmware: dmi-sysfs: Fix memory leak in dmi_sysfs_register_handle 2022-06-14 16:53:57 +02:00
fmc
fpga fpga: altera-pr-ip: fix unsigned comparison with less than zero 2022-08-25 11:11:21 +02:00
fsi
gpio gpio: gpiolib-of: Fix refcount bugs in of_mm_gpiochip_add_data() 2022-08-25 11:11:22 +02:00
gpu drm: bridge: sii8620: fix possible off-by-one 2022-08-25 11:11:17 +02:00
hid HID: wacom: Don't register pad_input for touch switch 2022-08-25 11:11:10 +02:00
hsi HSI: core: Fix return freed object in hsi_new_client 2022-01-27 09:00:54 +01:00
hv random: remove unused irq_flags argument from add_interrupt_randomness() 2022-06-25 11:46:30 +02:00
hwmon hwmon: (ibmaem) don't call platform_device_del() if platform_device_add() fails 2022-07-07 17:31:17 +02:00
hwspinlock
hwtracing intel_th: pci: Add Meteor Lake-P support 2022-08-25 11:11:29 +02:00
i2c i2c: mux-gpmux: Add of_node_put() when breaking out of loop 2022-08-25 11:11:20 +02:00
ide
idle
iio iio: light: isl29028: Fix the warning in isl29028_remove() 2022-08-25 11:11:12 +02:00
infiniband RDMA/rxe: Fix error unwind in rxe_create_qp() 2022-08-25 11:11:23 +02:00
input Input: bcm5974 - set missing URB_NO_TRANSFER_DMA_MAP urb flag 2022-06-14 16:54:02 +02:00
iommu iommu/arm-smmu: qcom_iommu: Add of_node_put() when breaking out of loop 2022-08-25 11:11:25 +02:00
ipack ipack: ipoctal: fix module reference leak 2021-10-06 15:05:09 +02:00
irqchip irqchip: or1k-pic: Undefine mask_ack for level triggered hardware 2022-07-21 20:42:47 +02:00
isdn mISDN: change function names to avoid conflicts 2022-01-11 13:57:38 +01:00
leds leds: ktd2692: Fix an error handling path 2021-07-20 16:17:41 +02:00
lightnvm lightnvm: disable the subsystem 2022-05-12 12:17:04 +02:00
macintosh macintosh/adb: fix oob read in do_adb_query() function 2022-08-25 11:11:10 +02:00
mailbox mailbox: forward the hrtimer if not queued and under a lock 2022-06-14 16:53:51 +02:00
mcb mcb: fix error handling in mcb_alloc_bus() 2021-10-06 15:05:05 +02:00
md dm raid: fix address sanitizer warning in raid_status 2022-08-25 11:11:29 +02:00
media media: platform: mtk-mdp: Fix mdp_ipi_comm structure alignment 2022-08-25 11:11:17 +02:00
memory memory: atmel-ebi: Fix missing of_node_put in atmel_ebi_probe 2022-04-20 09:08:31 +02:00
memstick memstick/ms_block: Fix a memory leak 2022-08-25 11:11:21 +02:00
message
mfd mfd: t7l66xb: Drop platform disable callback 2022-08-25 11:11:25 +02:00
misc misc: atmel-ssc: Fix IRQ check in ssc_probe 2022-06-25 11:46:44 +02:00
mmc mmc: cavium-thunderx: Add of_node_put() when breaking out of loop 2022-08-25 11:11:22 +02:00
mtd mtd: st_spi_fsm: Add a clk_disable_unprepare() in .probe()'s error path 2022-08-25 11:11:21 +02:00
mux
net igb: Add lock to avoid data race 2022-08-25 11:11:35 +02:00
nfc NFC: nxp-nci: don't print header length mismatch on i2c error 2022-07-21 20:42:46 +02:00
ntb
nubus
nvdimm nvdimm: Fix badblocks clear off-by-one error 2022-07-07 17:31:16 +02:00
nvme nvme-pci: fix a NULL pointer dereference in nvme_alloc_admin_tags 2022-06-14 16:53:45 +02:00
nvmem nvmem: Fix shift-out-of-bound (UBSAN) with byte size cells 2021-10-20 10:42:04 +02:00
of fdt: Update CRC check for rng-seed 2022-07-02 16:18:10 +02:00
oprofile
parisc parisc: Fix CPU affinity for Lasi, WAX and Dino chips 2022-04-20 09:08:28 +02:00
parport parport: remove non-zero check on count 2021-09-22 11:45:31 +02:00
pci PCI: hv: Fix interrupt mapping for multi-MSI 2022-07-29 17:06:53 +02:00
pcmcia pcmcia: db1xxx_ss: restrict to MIPS_DB1XXX boards 2022-06-14 16:53:55 +02:00
perf perf: qcom_l2_pmu: fix an incorrect NULL check on list iterator 2022-04-20 09:08:30 +02:00
phy phy: qcom-qmp: fix reset-controller leak on probe errors 2022-06-14 16:53:55 +02:00
pinctrl pinctrl: qcom: msm8916: Allow CAMSS GP clocks to be muxed 2022-08-25 11:11:32 +02:00
platform platform/olpc: Fix uninitialized data in debugfs write 2022-08-25 11:11:22 +02:00
pnp
power power/reset: arm-versatile: Fix refcount leak in versatile_reboot_probe 2022-07-29 17:06:49 +02:00
powercap
pps
ps3
ptp ptp: replace snprintf with sysfs_emit 2022-04-20 09:08:26 +02:00
pwm pwm: lp3943: Fix duty calculation in case period was clamped 2022-06-14 16:53:56 +02:00
rapidio
ras
regulator regulator: of: Fix refcount leak bug in of_get_regulation_constraints() 2022-08-25 11:11:16 +02:00
remoteproc remoteproc: qcom: wcnss: Fix handling of IRQs 2022-08-25 11:11:24 +02:00
reset reset: ti-syscon: fix to_ti_syscon_reset_data macro 2021-07-28 11:12:14 +02:00
rpmsg rpmsg: qcom_smd: Fix irq_of_parse_and_map() return value 2022-06-14 16:53:56 +02:00
rtc rtc: mt6397: check return value after calling platform_get_resource() 2022-06-14 16:53:56 +02:00
s390 scsi: zfcp: Fix missing auto port scan and thus missing target ports 2022-08-25 11:11:27 +02:00
sbus
scsi scsi: sg: Allow waiting for commands to complete on removed device 2022-08-25 11:11:30 +02:00
sfi
sh maple: fix wrong return value of maple_bus_init(). 2021-11-26 11:40:39 +01:00
sn
soc soc: fsl: guts: machine variable might be unset 2022-08-25 11:11:15 +02:00
spi spi: img-spfi: Fix pm_runtime_get_sync() error checking 2022-06-14 16:53:48 +02:00
spmi
ssb ssb: sdio: Don't overwrite const buffer if block_write fails 2021-07-20 16:17:30 +02:00
staging tty: the rest, stop using tty_schedule_flip() 2022-07-29 17:06:52 +02:00
target scsi: target: tcmu: Fix possible page UAF 2022-04-20 09:08:32 +02:00
tc
tee tee: handle lookup of shm with reference count 0 2022-01-05 12:33:48 +01:00
thermal thermal: int340x: Increase bitmap size 2022-04-20 09:08:12 +02:00
thunderbolt
tty tty: n_gsm: fix DM command 2022-08-25 11:11:24 +02:00
uio
usb USB: serial: fix tty-port initialized comments 2022-08-25 11:11:22 +02:00
uwb
vfio vfio: Use config not menuconfig for VFIO_NOIOMMU 2021-09-22 11:45:26 +02:00
vhost vringh: Fix loop descriptors check in the indirect cases 2022-06-14 16:54:01 +02:00
video video: fbdev: s3fb: Check the size of screen before memset_io() 2022-08-25 11:11:27 +02:00
virt
virtio virtio_mmio: Restore guest page size on resume 2022-07-21 20:42:46 +02:00
vlynq
vme
w1 w1: w1_therm: fixes w1_seq for ds28ea00 sensors 2022-04-20 09:08:28 +02:00
watchdog ar7: fix kernel builds for compiler test 2021-11-26 11:40:35 +01:00
xen xen/xenbus: fix return type in xenbus_file_read() 2022-08-25 11:11:33 +02:00
zorro
Kconfig
Makefile