]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
vfio/pci: Require vfio_device_ops.name
authorAlex Williamson <alex.williamson@nvidia.com>
Tue, 31 Mar 2026 20:24:41 +0000 (14:24 -0600)
committerAlex Williamson <alex@shazbot.org>
Thu, 2 Apr 2026 22:35:25 +0000 (16:35 -0600)
vfio-pci-core code makes use of the vfio_device_ops.name field in order
to set a default driver_override for VFs created on a user-owned PF.
This avoids default driver matching, which might otherwise bind those
VFs to native drivers.

The mechanism for this currently uses kasprintf(), which will set
driver_override to the literal "(null)" if name is NULL.  This is
effective in sequestering the device, but presents a challenging debug
situation to differentiate driver_override being set to "(null)" versus
being NULL and interpreted as "(null)" via the sysfs show attribute.

There's also a tree-wide effort to convert to generic driver_override
support, where passing NULL will generate an error, resulting in a
WARN_ON without setting any driver_override.

All drivers making use of vfio-pci-core already set a driver name,
therefore by requiring this behavior, all of these corner cases are
rendered moot.  This is expected to have no impact on current
in-kernel drivers.

Suggested-by: Danilo Krummrich <dakr@kernel.org>
Signed-off-by: Alex Williamson <alex.williamson@nvidia.com>
Reviewed-by: Danilo Krummrich <dakr@kernel.org>
Link: https://lore.kernel.org/r/20260331202443.2598404-1-alex.williamson@nvidia.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
drivers/vfio/pci/vfio_pci_core.c

index d43745fe4c8433d11a6e605b03dc806e74a8d190..84d60689d386cca9639927897a5b32784aa52e22 100644 (file)
@@ -2139,6 +2139,10 @@ int vfio_pci_core_register_device(struct vfio_pci_core_device *vdev)
        if (WARN_ON(vdev != dev_get_drvdata(dev)))
                return -EINVAL;
 
+       /* Drivers must set a name.  Required for sequestering SR-IOV VFs */
+       if (WARN_ON(!vdev->vdev.ops->name))
+               return -EINVAL;
+
        if (pdev->hdr_type != PCI_HEADER_TYPE_NORMAL)
                return -EINVAL;