[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