|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 1/2] x86/pci: prevent cross-device accesses in pci_mmcfg_{read,write}()
Introduce a specific check that prevents an accesses from spilling across
two devices.
Signed-off-by: Roger Pau Monné <roger@xxxxxxxxxxxxxx>
---
Changes since v1:
- New in this version.
---
xen/arch/x86/x86_64/mmconfig_64.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/x86_64/mmconfig_64.c
b/xen/arch/x86/x86_64/mmconfig_64.c
index 940cf6d7471b..91b1a398e646 100644
--- a/xen/arch/x86/x86_64/mmconfig_64.c
+++ b/xen/arch/x86/x86_64/mmconfig_64.c
@@ -61,7 +61,8 @@ int pci_mmcfg_read(unsigned int seg, unsigned int bus,
char __iomem *addr;
/* Why do we have this when nobody checks it. How about a BUG()!? -AK */
- if (unlikely((bus > 255) || (devfn > 255) || (reg > 4095))) {
+ if (unlikely((bus > 255) || (devfn > 255) ||
+ (reg + len > PCI_CFG_SPACE_EXP_SIZE))) {
err: *value = -1;
return -EINVAL;
}
@@ -91,7 +92,8 @@ int pci_mmcfg_write(unsigned int seg, unsigned int bus,
char __iomem *addr;
/* Why do we have this when nobody checks it. How about a BUG()!? -AK */
- if (unlikely((bus > 255) || (devfn > 255) || (reg > 4095)))
+ if (unlikely((bus > 255) || (devfn > 255) ||
+ (reg + len > PCI_CFG_SPACE_EXP_SIZE)))
return -EINVAL;
addr = pci_dev_base(seg, bus, devfn);
--
2.53.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |