diff options
| author | Alex Williamson <alex.williamson@nvidia.com> | 2026-03-31 23:24:41 +0300 |
|---|---|---|
| committer | Alex Williamson <alex@shazbot.org> | 2026-04-03 01:35:25 +0300 |
| commit | 7487d8db3336839567aabae24618a4f2f2f2adad (patch) | |
| tree | 5d2391ec57979cec4014500f4bce8e7c0dc71a07 | |
| parent | ad6ed97f8c0ffefd9383a62d19a564e8e0a2c814 (diff) | |
| download | linux-7487d8db3336839567aabae24618a4f2f2f2adad.tar.xz | |
vfio/pci: Require vfio_device_ops.name
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>
| -rw-r--r-- | drivers/vfio/pci/vfio_pci_core.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index d43745fe4c84..84d60689d386 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -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; |
