[PATCH] iommu/amd: Fix NULL pointer dereference for GPUs without upstream bridge

From: Jean-Christophe Guillain

Date: Tue Nov 03 2026 - 10:44:41 EST


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: bf5bdfd1f8d4 ("iommu/amd: Force identity mode for selected GPUs only")

Signed-off-by: Jean-Christophe Guillain <jean-christophe@xxxxxxxxxxxx>
---
drivers/iommu/amd/iommu.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index 960e1dc05ec6..75e98e2e9d83 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -3372,6 +3372,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 */
@@ -3383,7 +3384,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 */
--
2.47.3