mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
d5d126a225
commit
b4a671acf1
1 file changed
+3
-2
+3
-2
@@ -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);
|
||||
|
||||
|
||||