pci: fix overflow in __pci_hose_bus_to_phys w/ large RAM
PATCH 1/1 pci: fix overflow in __pci_hose_bus_to_phys w/ large RAM
From: Stephen Warren <[email protected]>
If a 32-bit system has 2GB of RAM, and the base address of that RAM is 2GB, then start+size will overflow a 32-bit value (to a value of 0).
To avoid such an overflow, convert __pci_hose_bus_to_phys() to calculate the offset of a bus address into a PCI region, rather than comparing a bus address against the end of a PCI region.
--- drivers/pci/pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/pci/pci.c +1 -1
@@ -323,7 +323,7 @@ int __pci_hose_bus_to_phys(struct pci_controller *hose,continue ;if (bus_addr >= res->bus_start && - bus_addr < res->bus_start + res->size) { + (bus_addr - res->bus_start) < res->size) { *pa = (bus_addr - res->bus_start + res->phys_start);return 0 ; }
Signature · 1 line
1.9.1
PATCH 1/1 pci: fix overflow in __pci_hose_bus_to_phys w/ large RAM
Quoted 5 lines · On Mon, 11 Aug 2014 16:09:28 -0600 Stephen Warren <[email protected]> wrote:
From: Stephen Warren <[email protected]>
If a 32-bit system has 2GB of RAM, and the base address of that RAM is 2GB, then start+size will overflow a 32-bit value (to a value of 0).
Quoted 8 lines
To avoid such an overflow, convert
__pci_hose_bus_to_phys()to calculate the offset of a bus address into a PCI region, rather than comparing a bus address against the end of a PCI region.Signed-off-by Stephen Warren <[email protected]>--- drivers/pci/pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
applied to u-boot-staging/agust at denx.de. thanks!
Anatolij