Commit 7c867c88 authored by Jesper Juhl's avatar Jesper Juhl Committed by Jesse Barnes

PCI: Avoid potential NULL pointer dereference in pci_scan_bridge

pci_add_new_bus() calls pci_alloc_child_bus() which calls pci_alloc_bus()
that allocates memory dynamically with kzalloc(). The return value of
kzalloc() is the pointer that's eventually returned from
pci_add_new_bus(), so since kzalloc() can fail and return NULL so can
pci_add_new_bus(). Thus we may end up dereferencing a NULL pointer in
drivers/pci/probe.c::pci_scan_bridge(). Seems to me we should test for
this and bail out if it happens rather than crashing.
Also removed some trailing whitespace that bugged me while looking at
this.
Signed-off-by: default avatarJesper Juhl <jj@chaosbits.net>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent c13ff2ff
...@@ -764,6 +764,8 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, ...@@ -764,6 +764,8 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
if (pci_find_bus(pci_domain_nr(bus), max+1)) if (pci_find_bus(pci_domain_nr(bus), max+1))
goto out; goto out;
child = pci_add_new_bus(bus, dev, ++max); child = pci_add_new_bus(bus, dev, ++max);
if (!child)
goto out;
buses = (buses & 0xff000000) buses = (buses & 0xff000000)
| ((unsigned int)(child->primary) << 0) | ((unsigned int)(child->primary) << 0)
| ((unsigned int)(child->secondary) << 8) | ((unsigned int)(child->secondary) << 8)
...@@ -777,7 +779,7 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, ...@@ -777,7 +779,7 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
buses &= ~0xff000000; buses &= ~0xff000000;
buses |= CARDBUS_LATENCY_TIMER << 24; buses |= CARDBUS_LATENCY_TIMER << 24;
} }
/* /*
* We need to blast all three values with a single write. * We need to blast all three values with a single write.
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment