mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
iommu/amd: Fix NULL pointer dereference for GPUs without upstream bridge
pci_upstream_bridge() can return NULL for devices without an upstream
bridge. The AMD GPU identity mapping quirk dereferences the returned
pointer unconditionally, causing a kernel panic during boot.
Check the pointer before accessing the bridge vendor ID.
This fixes a boot regression on a Lenovo system with an AMD PRO
A10-9700E APU. The system now boots with AMD IOMMU enabled.
Fixes: bf5bdfd1f8 ("iommu/amd: Force identity mode for selected GPUs only")
Signed-off-by: Jean-Christophe Guillain <jean-christophe@guillain.net>
Signed-off-by: Vasant Hegde <vasant.hegde@amd.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
parent
fa77b023eb
commit
2cf4be57b3
|
|
@ -3191,6 +3191,7 @@ static bool amd_iommu_is_attach_deferred(struct device *dev)
|
|||
|
||||
static bool quirks_force_identity_mapping(struct pci_dev *pdev)
|
||||
{
|
||||
struct pci_dev *bridge;
|
||||
int class = pdev->class >> 8;
|
||||
|
||||
/* AMD GPU vendor ID */
|
||||
|
|
@ -3202,7 +3203,8 @@ static bool quirks_force_identity_mapping(struct pci_dev *pdev)
|
|||
class != PCI_CLASS_DISPLAY_OTHER)
|
||||
return false;
|
||||
|
||||
if (pci_upstream_bridge(pdev)->vendor == PCI_VENDOR_ID_ATI)
|
||||
bridge = pci_upstream_bridge(pdev);
|
||||
if (bridge && bridge->vendor == PCI_VENDOR_ID_ATI)
|
||||
return false;
|
||||
|
||||
/* It is the GPU in an APU, force identity domain */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user