]> www.infradead.org Git - users/hch/misc.git/commit
PCI: Fix NULL dereference in SR-IOV VF creation error path
authorShay Drory <shayd@nvidia.com>
Mon, 10 Mar 2025 08:45:24 +0000 (10:45 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 21 Mar 2025 19:54:16 +0000 (14:54 -0500)
commit04d50d953ab46d96b0b32d5ad955fceaa28622db
treebfdd3091c528d7f4d7ee7a0544a19a7f6d55a1a2
parentcc7a371b0bf5e507b24c5a595068dfb4e2b3445b
PCI: Fix NULL dereference in SR-IOV VF creation error path

Clean up when virtfn setup fails to prevent NULL pointer dereference
during device removal. The kernel oops below occurred due to incorrect
error handling flow when pci_setup_device() fails.

Add pci_iov_scan_device(), which handles virtfn allocation and setup and
cleans up if pci_setup_device() fails, so pci_iov_add_virtfn() doesn't need
to call pci_stop_and_remove_bus_device().  This prevents accessing
partially initialized virtfn devices during removal.

  BUG: kernel NULL pointer dereference, address: 00000000000000d0
  RIP: 0010:device_del+0x3d/0x3d0
  Call Trace:
   pci_remove_bus_device+0x7c/0x100
   pci_iov_add_virtfn+0xfa/0x200
   sriov_enable+0x208/0x420
   mlx5_core_sriov_configure+0x6a/0x160 [mlx5_core]
   sriov_numvfs_store+0xae/0x1a0

Link: https://lore.kernel.org/r/20250310084524.599225-1-shayd@nvidia.com
Fixes: e3f30d563a38 ("PCI: Make pci_destroy_dev() concurrent safe")
Signed-off-by: Shay Drory <shayd@nvidia.com>
[bhelgaas: commit log, return ERR_PTR(-ENOMEM) directly]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: Keith Busch <kbusch@kernel.org>
drivers/pci/iov.c