aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci.c
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2012-06-19 09:35:34 -0400
committerBjorn Helgaas <bhelgaas@google.com>2012-06-20 19:28:53 -0400
commit8291550f8479fde2cee571d1b367e6918819f189 (patch)
tree111ffade25983b6c92dc8b2dc8634f2ed978a533 /drivers/pci/pci.c
parentd6d88c832eaea6c6947ddf7b664601930a9f8a14 (diff)
PCI: fix upstream P2P bridge checks when enabling OBFF and LTR
pci_enable_obff() and pci_enable_ltr() incorrectly check "dev->bus" instead of "dev->bus->self" to determine whether the upstream device is a P2P bridge or a host bridge. For devices on the root bus, the upstream device is a host bridge, "dev->bus != NULL" and "dev->bus->self == NULL", and we panic with a null pointer dereference. These functions should previously have panicked when called on devices supporting OBFF or LTR, so they should be regarded as untested. Found by Coverity (CID 143038 and CID 143039). Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r--drivers/pci/pci.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 8f4a5ea543fc..b9e93cf1eb40 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2108,7 +2108,7 @@ int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type type)
2108 return -ENOTSUPP; /* no OBFF support at all */ 2108 return -ENOTSUPP; /* no OBFF support at all */
2109 2109
2110 /* Make sure the topology supports OBFF as well */ 2110 /* Make sure the topology supports OBFF as well */
2111 if (dev->bus) { 2111 if (dev->bus->self) {
2112 ret = pci_enable_obff(dev->bus->self, type); 2112 ret = pci_enable_obff(dev->bus->self, type);
2113 if (ret) 2113 if (ret)
2114 return ret; 2114 return ret;
@@ -2215,7 +2215,7 @@ int pci_enable_ltr(struct pci_dev *dev)
2215 return -EINVAL; 2215 return -EINVAL;
2216 2216
2217 /* Enable upstream ports first */ 2217 /* Enable upstream ports first */
2218 if (dev->bus) { 2218 if (dev->bus->self) {
2219 ret = pci_enable_ltr(dev->bus->self); 2219 ret = pci_enable_ltr(dev->bus->self);
2220 if (ret) 2220 if (ret)
2221 return ret; 2221 return ret;