[PATCH v2 2/5] drm/xe/configfs: Enforce canonical device names
Lucas De Marchi
lucas.demarchi at intel.com
Fri Jul 18 20:52:40 UTC 2025
On Fri, Jul 18, 2025 at 04:05:19PM +0200, Michal Wajdeczko wrote:
>While we expect config directory names to match PCI device name,
>currently we are only scanning provided names for domain, bus,
>device and function numbers, without checking their format.
>This would pass slightly broken entries like:
>
> /sys/kernel/config/xe/
> ├── 0000:00:02.0000000000000
> │ └── ...
> ├── 0000:00:02.0x
> │ └── ...
> ├── 0: 0: 2. 0
> │ └── ...
> └── 0:0:2.0
> └── ...
>
>To avoid such mistakes, check if the name provided exactly matches
>the canonical PCI device address format, which we recreated from
>the parsed BDF data. Also simplify scanf format as it can't really
>catch all formatting errors.
>
>Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
>Cc: Lucas De Marchi <lucas.demarchi at intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi at intel.com>
thanks
Lucas De Marchi
>---
>v2: keep using %x for function (Lucas)
>---
> drivers/gpu/drm/xe/xe_configfs.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
>index e9b46a2d0019..f5ce48a0adc8 100644
>--- a/drivers/gpu/drm/xe/xe_configfs.c
>+++ b/drivers/gpu/drm/xe/xe_configfs.c
>@@ -259,12 +259,19 @@ static struct config_group *xe_config_make_device_group(struct config_group *gro
> unsigned int domain, bus, slot, function;
> struct xe_config_device *dev;
> struct pci_dev *pdev;
>+ char canonical[16];
> int ret;
>
>- ret = sscanf(name, "%04x:%02x:%02x.%x", &domain, &bus, &slot, &function);
>+ ret = sscanf(name, "%x:%x:%x.%x", &domain, &bus, &slot, &function);
> if (ret != 4)
> return ERR_PTR(-EINVAL);
>
>+ ret = scnprintf(canonical, sizeof(canonical), "%04x:%02x:%02x.%d", domain, bus,
>+ PCI_SLOT(PCI_DEVFN(slot, function)),
>+ PCI_FUNC(PCI_DEVFN(slot, function)));
>+ if (ret != 12 || strcmp(name, canonical))
>+ return ERR_PTR(-EINVAL);
>+
> pdev = pci_get_domain_bus_and_slot(domain, bus, PCI_DEVFN(slot, function));
> if (!pdev)
> return ERR_PTR(-ENODEV);
>--
>2.47.1
>
More information about the Intel-xe
mailing list