x86/pci: Perform XSM checks on the correct device in pci_conf_write_intercept()

The requested PCI segment needs including in the call to
xsm_pci_config_permission().  Otherwise in a multi-segment system we can check
the perimssions on one device but operate on a different one.

This is only not a vulnerability because pci_conf_write_intercept() is only
reachable by the hardware domain.

Fixes: 300bb048ca ("x86/PCI: make all config space writes subject to XSM checking")
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Daniel P. Smith <dpsmith@apertussolutions.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Andrew Cooper committed 2026-09-03 09:45:16 +01:00
1 parent d5d126a225
commit b4a671acf1
1 file changed
+3 -2
+3 -2
View File
@@ -76,8 +76,9 @@ int pci_conf_write_intercept(unsigned int seg, unsigned int bdf,
unsigned int reg, unsigned int size,
uint32_t *data)
{
pci_sbdf_t sbdf = PCI_SBDF(seg, bdf);
struct pci_dev *pdev;
int rc = xsm_pci_config_permission(XSM_HOOK, current->domain, bdf,
int rc = xsm_pci_config_permission(XSM_HOOK, current->domain, sbdf.sbdf,
reg, reg + size - 1, true);
if ( rc < 0 )
@@ -93,7 +94,7 @@ int pci_conf_write_intercept(unsigned int seg, unsigned int bdf,
pcidevs_lock();
pdev = pci_get_pdev(NULL, PCI_SBDF(seg, bdf));
pdev = pci_get_pdev(NULL, sbdf);
if ( pdev )
rc = pci_msi_conf_write_intercept(pdev, reg, size, data);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.