From 2cf4be57b301ed2d7af82e70cff5dfd96894d8de Mon Sep 17 00:00:00 2001 From: Jean-Christophe Guillain Date: Thu, 5 Nov 2026 16:32:19 +0000 Subject: [PATCH] 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: bf5bdfd1f8d4 ("iommu/amd: Force identity mode for selected GPUs only") Signed-off-by: Jean-Christophe Guillain Signed-off-by: Vasant Hegde Signed-off-by: Joerg Roedel --- 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 91981c8a9614..41ee4ad1dcf8 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -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 */