Skip to content

Commit

Permalink
PCI: fix upstream P2P bridge checks when enabling OBFF and LTR
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Bjorn Helgaas committed Jun 20, 2012
1 parent d6d88c8 commit 8291550
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drivers/pci/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -2108,7 +2108,7 @@ int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type type)
return -ENOTSUPP; /* no OBFF support at all */

/* Make sure the topology supports OBFF as well */
if (dev->bus) {
if (dev->bus->self) {
ret = pci_enable_obff(dev->bus->self, type);
if (ret)
return ret;
Expand Down Expand Up @@ -2215,7 +2215,7 @@ int pci_enable_ltr(struct pci_dev *dev)
return -EINVAL;

/* Enable upstream ports first */
if (dev->bus) {
if (dev->bus->self) {
ret = pci_enable_ltr(dev->bus->self);
if (ret)
return ret;
Expand Down

0 comments on commit 8291550

Please sign in to comment.