Message ID | 20140827185651.29388.16082.stgit@gimli.home (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Aug 27, 2014 at 2:57 PM, Alex Williamson <alex.williamson@redhat.com> wrote: > 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@redhat.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> > --- > > 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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel
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;
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@redhat.com> --- drivers/gpu/drm/drm_pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)