If we have a GPU on the PCI root bus that calls drm_pcie_get_speed_cap_mask() we end up with a NULL pointer dereference since pdev->bus->self is NULL. We already protect against callers passing non-PCI devices, so let's also catch this case and return -EINVAL. Root complex graphics are not terribly likely outside of IGD, but when we assign a standard plugin GPU to a virtual machine, our assumption that we have a parent device quickly becomes invalid. Signed-off-by: Alex Williamson <alex.williamson@xxxxxxxxxx> --- drivers/gpu/drm/drm_pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c index 020cfd9..411e806 100644 --- a/drivers/gpu/drm/drm_pci.c +++ b/drivers/gpu/drm/drm_pci.c @@ -390,7 +390,7 @@ int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *mask) u32 lnkcap, lnkcap2; *mask = 0; - if (!dev->pdev) + if (!dev->pdev || pci_is_root_bus(dev->pdev->bus)) return -EINVAL; root = dev->pdev->bus->self; _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel