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: Jesper Juhl <jj@chaosbits.net> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
c13ff2ff3a
commit
7c867c8899
|
@ -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,
|
||||||
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.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue