Skip to content
  • Ard Biesheuvel's avatar
    PCI/ASPM: Deal with missing root ports in link state handling · db98acd6
    Ard Biesheuvel authored
    commit ee8bdfb6
    
     upstream.
    
    Even though it is unconventional, some PCIe host implementations omit the
    root ports entirely, and simply consist of a host bridge (which is not
    modeled as a device in the PCI hierarchy) and a link.
    
    When the downstream device is an endpoint, our current code does not seem
    to mind this unusual configuration. However, when PCIe switches are
    involved, the ASPM code assumes that any downstream switch port has a
    parent, and blindly dereferences the bus->parent->self field of the pci_dev
    struct to chain the downstream link state to the link state of the root
    port. Given that the root port is missing, the link is not modeled at all,
    and nor is the link state, and attempting to access it results in a NULL
    pointer dereference and a crash.
    
    Avoid this by allowing the link state chain to terminate at the downstream
    port if no root port exists.
    
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    db98acd6