]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
vfio/pci: Release the VGA arbiter client on register_device() failure
authorAlex Williamson <alex.williamson@nvidia.com>
Mon, 15 Jun 2026 19:12:30 +0000 (13:12 -0600)
committerAlex Williamson <alex@shazbot.org>
Mon, 29 Jun 2026 19:46:49 +0000 (13:46 -0600)
The re-order in the Fixes commit below displaced vfio_pci_vga_init() as
the last failure point of what is now vfio_pci_core_register_device()
without introducing an unwind for the VGA arbiter registration.

In current kernels this is mostly benign because vfio_pci_set_decode()
only uses pci_dev state, but the original failure path could leave a
callback with a freed vdev cookie.  The stale registration also becomes
unsafe again once the callback follows drvdata to the vfio device.

Add the required VGA unwind callout.

Fixes: 4aeec3984ddc ("vfio/pci: Re-order vfio_pci_probe()")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Alex Williamson <alex.williamson@nvidia.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/20260615191241.688297-3-alex.williamson@nvidia.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
drivers/vfio/pci/vfio_pci_core.c

index f8d1755de2ce038093b96bb1e9260692b2ca9cb8..dab82c0785808162c092fce05473cebac9e16df3 100644 (file)
@@ -2254,6 +2254,7 @@ out_power:
                pm_runtime_get_noresume(dev);
 
        pm_runtime_forbid(dev);
+       vfio_pci_vga_uninit(vdev);
 out_vf:
        vfio_pci_vf_uninit(vdev);
        return ret;