diff --git asys/bus/pci/x86_64/pci_cfgreg.c.orig bsys/bus/pci/x86_64/pci_cfgreg.c index 33a4f302..ee9db93d 100644 --- a/sys/bus/pci/x86_64/pci_cfgreg.c +++ b/sys/bus/pci/x86_64/pci_cfgreg.c @@ -320,7 +320,9 @@ pciereg_cfgread(int bus, unsigned slot, unsigned func, unsigned reg, int data = -1; if (bus < pcie_minbus || bus > pcie_maxbus || slot > PCI_SLOTMAX || - func > PCI_FUNCMAX || reg > PCIE_REGMAX) + func > PCI_FUNCMAX || reg > PCIE_REGMAX || + (bytes != 1 && bytes != 2 && bytes != 4) || + (reg & (bytes - 1)) != 0 || reg + bytes > PCIE_REGMAX + 1) return -1; va = PCIE_VADDR(pcie_base, reg, bus, slot, func); @@ -346,7 +348,9 @@ pciereg_cfgwrite(int bus, unsigned slot, unsigned func, unsigned reg, int data, volatile vm_offset_t va; if (bus < pcie_minbus || bus > pcie_maxbus || slot > PCI_SLOTMAX || - func > PCI_FUNCMAX || reg > PCIE_REGMAX) + func > PCI_FUNCMAX || reg > PCIE_REGMAX || + (bytes != 1 && bytes != 2 && bytes != 4) || + (reg & (bytes - 1)) != 0 || reg + bytes > PCIE_REGMAX + 1) return; va = PCIE_VADDR(pcie_base, reg, bus, slot, func);