Skip to contentSkip to conversation

pci: fix overflow in __pci_hose_bus_to_phys w/ large RAM

PATCH New Stephen Warren 2 participants 2 messages Aug 11, 2014 – Aug 14, 2014 PCI

lore
Share & tools
lore
#0 lore raw

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
index ed113bf4022f..4fd9c532b3fb 100644
@@ -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
#1 lore raw

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.

---
 drivers/pci/pci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

applied to u-boot-staging/agust at denx.de. thanks!

Anatolij