CVE-2026-53283: AMD IOMMU Kernel Panic – Bounds Check Memory Read Vulnerability
CVE-2026-53283 is a memory bounds-checking flaw in the Linux kernel's AMD IOMMU driver. When the system probes PCI devices during boot, the driver looks up which IOMMU manages each device using a lookup table indexed by device ID. For devices not described in the system's IOMMU configuration (IVRS), the driver reads past the end of the lookup table before verifying the device ID is valid. In recent kernel versions where the lookup table is tightly allocated, this out-of-bounds read retrieves adjacent kernel memory that gets incorrectly interpreted as a pointer, causing a crash. The vulnerability is triggered during system initialization and affects AMD-based virtualized environments where the IOMMU configuration is incomplete or restrictive.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 5.5 MEDIUM · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
- Weaknesses (CWE)
- CWE-476
- Affected products
- 4 configuration(s)
- Published / Modified
- 2026-06-26 / 2026-07-08
NVD description (verbatim)
In the Linux kernel, the following vulnerability has been resolved: iommu/amd: Bounds-check devid in __rlookup_amd_iommu() iommu_device_register() walks every device on the PCI bus via bus_for_each_dev() and calls amd_iommu_probe_device() for each. The inlined check_device() path computes the device's sbdf, calls rlookup_amd_iommu() to find the owning IOMMU, and only afterwards verifies devid <= pci_seg->last_bdf. __rlookup_amd_iommu() indexes rlookup_table[devid] with no bounds check of its own, so for a PCI device whose BDF is not described by the IVRS, the lookup reads past the end of the allocation before the caller's bounds check can run. This was harmless before commit e874c666b15b ("iommu/amd: Change rlookup, irq_lookup, and alias to use kvalloc()"): the table was a zeroed page-order allocation, so the over-read returned NULL and the caller's NULL check skipped the device. After that commit the table is a tight kvcalloc() and the over-read returns adjacent slab contents, which check_device() then dereferences as a struct amd_iommu *, causing a boot-time GPF. Seen on Google Compute Engine ct6e VMs, where the virtualized IVRS describes only the four TPU endpoints 00:04.0-07.0; the gVNIC at 00:08.0 (devid 0x40) indexes 56 bytes past the 456-byte allocation, into the adjacent kmalloc-512 slab object: pci 0000:00:04.0: Adding to iommu group 0 pci 0000:00:05.0: Adding to iommu group 1 pci 0000:00:06.0: Adding to iommu group 2 pci 0000:00:07.0: Adding to iommu group 3 Oops: general protection fault, probably for non-canonical address 0x3a64695f78746382: 0000 [#1] SMP NOPTI CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.18.22 #1 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 12/06/2025 RIP: 0010:amd_iommu_probe_device+0x54/0x3a0 Call Trace: __iommu_probe_device+0x107/0x520 probe_iommu_group+0x29/0x50 bus_for_each_dev+0x7e/0xe0 iommu_device_register+0xc9/0x240 iommu_go_to_state+0x9c0/0x1c60 amd_iommu_init+0x14/0x40 pci_iommu_init+0x16/0x60 do_one_initcall+0x47/0x2f0 Guard the array access in __rlookup_amd_iommu(). With the fix applied on 6.18.22, the gVNIC at 00:08.0 is skipped cleanly and the VM boots.
3 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability exists in __rlookup_amd_iommu() within the AMD IOMMU driver. The function indexes a kvalloc()-allocated rlookup_table array with a device ID (devid) without bounds-checking, while the caller (check_device()) only validates devid <= pci_seg->last_bdf after the lookup occurs. Prior to commit e874c666b15b, the table was page-aligned, making out-of-bounds reads return NULL safely. After that commit, tight kvcalloc() allocation means the over-read retrieves adjacent slab memory containing arbitrary kernel data. When that data is dereferenced as a struct amd_iommu pointer, a general protection fault occurs. The fix adds bounds validation in __rlookup_amd_iommu() before array access, allowing PCI devices outside the IOMMU's configuration to be safely skipped rather than crashing the kernel.
Business impact
This vulnerability causes denial of service via uncontrolled kernel crash during system boot on affected AMD IOMMU-based platforms. Virtual machine environments and cloud instances with partial or restrictive IOMMU configurations—such as Google Compute Engine VMs with TPU endpoints—are at risk. Systems fail to complete initialization, rendering them unavailable until patched. There is no data confidentiality or integrity impact; the issue is purely availability-focused. Organizations running such infrastructure face service disruptions if systems are restarted or undergo kernel updates that introduce or expose the vulnerability.
Affected systems
The vulnerability affects the Linux kernel across multiple versions where AMD IOMMU support is compiled and the rlookup_table uses kvalloc() allocation (post-commit e874c666b15b). This includes kernel versions 6.18.22 and likely adjacent stable branches. The vulnerability is most readily triggered on virtualized AMD systems with incomplete or restrictive IOMMU device descriptions—particularly common in cloud environments like Google Compute Engine and other hypervisors that present a limited set of IOMMU-managed devices. Bare-metal systems with complete IOMMU BIOS configurations are less likely to be affected, as they typically enumerate all PCI devices in the IVRS. AMD IOMMU support is optional and must be enabled in the kernel configuration to be vulnerable.
Exploitability
The vulnerability is triggered passively during kernel boot when PCI device enumeration occurs, requiring no special privileges or user interaction beyond system restart or kernel initialization. However, exploitability is environment-dependent: it requires a mismatch between the system's actual PCI topology and the IOMMU's configured device descriptors (IVRS). This scenario is most common in virtualized environments where the hypervisor presents a restricted device set. Attackers cannot directly trigger exploitation from user space; it is entirely dependent on system firmware configuration and kernel code paths. The crash occurs early in boot, before user-space execution, limiting post-compromise scenarios.
Remediation
Apply a kernel patch that adds bounds validation in __rlookup_amd_iommu() to check devid against the allocation size before indexing the rlookup_table array. Verify the fix against your vendor's advisory to confirm the exact patch level. For immediate mitigation, disable AMD IOMMU support in the kernel configuration (CONFIG_AMD_IOMMU=n) if operationally feasible, or update to a patched kernel version once available. Organizations should prioritize patching systems in virtualized environments where IOMMU device enumeration mismatches are common.
Patch guidance
Monitor your Linux distribution's security advisories for kernel updates addressing CVE-2026-53283. Patches should be available via your standard kernel update mechanism (e.g., apt, yum, zypper). Test patched kernels in a staging environment before production deployment to ensure compatibility with your AMD IOMMU configuration and any custom kernel modules. If using custom kernel builds, apply the bounds-checking fix directly to __rlookup_amd_iommu() in the iommu/amd driver code and recompile. Verify that systems boot successfully and that IOMMU device enumeration completes without GPF errors.
Detection guidance
Review kernel logs (dmesg, journalctl) for general protection faults (GPF) during boot with stack traces mentioning amd_iommu_probe_device() or __rlookup_amd_iommu(). Boot failures attributed to IOMMU initialization on AMD systems may indicate exposure. Inspect your system's IVRS (IOMMU Virtualization Reporting Structure) via ACPI tables to identify whether PCI devices present in the system are described in the IOMMU configuration. Mismatches between actual PCI topology and IVRS descriptors indicate vulnerability conditions. Systems in virtualized environments (particularly Google Compute Engine or similar hypervisors) with TPU or specialized device configurations should be reviewed proactively.
Why prioritize this
Although the CVSS score is MEDIUM (5.5), prioritization should reflect the practical impact: kernel boot failures prevent system availability entirely. This is a denial-of-service vulnerability affecting critical infrastructure services in virtualized environments. While user-space exploitation is impossible, the boot-time crash means affected systems are inoperable until patched. Cloud and virtualized deployments should be patched urgently; bare-metal systems with complete IOMMU configurations may have lower risk. The environmental dependency (partial IOMMU configuration) should inform prioritization—systems where such configurations are known should be treated as high priority.
Risk score, explained
The CVSS 3.1 score of 5.5 (MEDIUM) reflects the local-only attack vector, low attack complexity, and denial-of-service impact limited to availability. However, this score underrepresents the practical criticality of a boot-time kernel crash affecting virtualized infrastructure. The score does not account for the environmental specificity (which actually narrows the affected population) or the complete unavailability of affected systems once triggered. For risk prioritization, organizations should factor in their deployment environment: virtualized systems with restrictive IOMMU configurations warrant urgent patching despite the MEDIUM label.
Frequently asked questions
Can this vulnerability be exploited from user space or over the network?
No. The vulnerability is triggered during kernel initialization when PCI devices are enumerated, which occurs before user-space execution begins. It requires a specific mismatch between system firmware (IVRS) and actual PCI topology, not actions by users or remote attackers. Exploitation is passive and boot-time only.
Why does this vulnerability occur in virtualized environments like Google Compute Engine?
Hypervisors often present a limited set of PCI devices to guest VMs and provide corresponding IOMMU configurations (IVRS). If a guest VM discovers additional PCI devices beyond what the IVRS describes, the IOMMU driver's lookup table is too small, causing out-of-bounds reads. This scenario is more common in virtualized environments than bare-metal systems.
What is the difference between this vulnerability and a simple array bounds check?
The vulnerability existed before because the lookup table was page-aligned and zero-filled; out-of-bounds reads returned NULL harmlessly. After commit e874c666b15b changed the allocation to tight kvcalloc(), adjacent slab memory became accessible, turning a harmless over-read into pointer dereference that crashes the kernel.
Do I need to disable AMD IOMMU entirely, or will a kernel patch suffice?
A kernel patch is the proper fix and is strongly preferred. Disabling AMD IOMMU (CONFIG_AMD_IOMMU=n) is only recommended as a temporary workaround if patching is delayed and is not feasible long-term, as it disables IOMMU protection for all devices.
This analysis is provided for informational purposes and should not be considered exhaustive. Information is current as of the published date; vulnerabilities may receive updates, new exploit details, or patch information after publication. Verify all patch versions, affected products, and vendor advisories directly against upstream sources and your distribution's security bulletins. Organizations should conduct their own risk assessments based on their specific environments, configurations, and threat models. This document does not constitute professional security advice; consult with your security team and vendor before applying patches or making configuration changes. Source: NVD (public-domain), retrieved 2026-08-05. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2025-71313MEDIUMLinux Kernel PCI Endpoint NULL Pointer Dereference
- CVE-2026-46118MEDIUMLinux Kernel PAPR Hypervisor Pipe Null Pointer Dereference (POWER Systems)
- CVE-2026-46127MEDIUMLinux Kernel OCRDMA Null Pointer Dereference (DoS)
- CVE-2026-46134MEDIUMLinux Kernel cros_ec Mutex Initialization DoS Vulnerability
- CVE-2026-46188MEDIUMLinux Octeon EP VF NULL Pointer Dereference Denial of Service
- CVE-2026-46211MEDIUMLinux Kernel MSM DRM NULL Pointer and Silent Error in gem_info_get_metadata
- CVE-2026-46216MEDIUMLinux Intel Arc GPU NULL Pointer Dereference (HDCP)
- CVE-2026-46222MEDIUMLinux Rockchip RKCam Driver Null Pointer Dereference