CVE-2026-80541 Overview
CVE-2026-80541 is a Linux kernel vulnerability in the AMD GPU (amdgpu) Direct Rendering Manager (DRM) driver. The AMDGPU_GEM_CREATE ioctl validated domain bits against AMDGPU_GEM_DOMAIN_MASK but did not validate domain combinations. Userspace processes could combine CPU, GTT, or VRAM domains with DOORBELL, GDS, GWS, or OA domains. This causes amdgpu_bo_placement_from_domain() to exceed AMDGPU_BO_MAX_PLACEMENTS and trigger a BUG_ON(), crashing the kernel.
Critical Impact
A local unprivileged user with access to the amdgpu device can trigger a kernel BUG_ON(), resulting in a denial of service on affected Linux systems with AMD graphics hardware.
Affected Products
- Linux kernel builds containing the drm/amdgpu driver prior to the referenced stable commits
- Distributions shipping the vulnerable amdgpu GEM_CREATE ioctl implementation
- Systems with AMD GPU hardware exposing /dev/dri/* device nodes to unprivileged users
Discovery Timeline
- 2026-08-26 - CVE-2026-80541 published to the National Vulnerability Database (NVD)
- 2026-08-27 - Last updated in NVD database
Technical Details for CVE-2026-80541
Vulnerability Analysis
The flaw resides in the amdgpu_gem_create_ioctl() path of the AMD GPU kernel driver. This ioctl handles Graphics Execution Manager (GEM) buffer object creation requests from userspace. The handler accepted any bitmask matching AMDGPU_GEM_DOMAIN_MASK without checking whether the combination of domains was semantically valid.
AMD GPU buffer objects can reside in placement domains including CPU, GTT (Graphics Translation Table), VRAM, DOORBELL, GDS (Global Data Store), GWS (Global Wave Sync), and OA (Ordered Append). The helper function amdgpu_bo_placement_from_domain() builds a placement array sized by AMDGPU_BO_MAX_PLACEMENTS. Combining incompatible domains causes the placement count to exceed this bound.
When the placement count overflows the fixed-size array, the kernel hits a BUG_ON() assertion. This is a kernel-level panic condition classifiable as a denial-of-service issue and kernel driver flaw.
Root Cause
The root cause is missing input validation on domain combinations supplied through the AMDGPU_GEM_CREATE ioctl. The original code checked only that requested bits fell within AMDGPU_GEM_DOMAIN_MASK. It did not enforce mutual exclusion rules between the memory placement domains (CPU/GTT/VRAM) and the specialized hardware domains (DOORBELL, GDS, GWS, OA).
Attack Vector
A local attacker with permission to open the amdgpu DRM device node issues an AMDGPU_GEM_CREATE ioctl. The attacker sets the domains field to an invalid combination such as AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GDS. The kernel builds a placement list exceeding AMDGPU_BO_MAX_PLACEMENTS and hits the BUG_ON(). The result is a kernel oops or panic affecting system availability.
The vulnerability requires local access with low privileges and no user interaction. The exploitation mechanism is described in the upstream commits linked below rather than through a proof-of-concept exploit. See the Kernel Git Commit 220aa25 for the authoritative patch details.
Detection Methods for CVE-2026-80541
Indicators of Compromise
- Kernel log entries showing BUG_ON triggered inside amdgpu_bo_placement_from_domain or amdgpu_gem_create_ioctl
- Repeated kernel oops or panic events on hosts with AMD graphics hardware
- Unexpected process crashes or system hangs following userspace access to /dev/dri/renderD* or /dev/dri/card* nodes
Detection Strategies
- Monitor dmesg and journalctl -k output for amdgpu-related kernel assertions and stack traces referencing amdgpu_bo_placement_from_domain
- Audit ioctl() syscalls targeting DRM device nodes to identify processes issuing GEM_CREATE with unusual domain bitmasks
- Correlate GPU driver crash events with the running kernel version to confirm exposure to the unpatched code path
Monitoring Recommendations
- Ship kernel ring buffer logs to a centralized logging pipeline for retention and alerting on BUG: or Oops: markers
- Track kernel package versions across the fleet and alert when hosts run pre-patch kernels containing the vulnerable amdgpu driver
- Enable auditd rules for open operations on DRM device files from non-graphics workloads to spot anomalous access patterns
How to Mitigate CVE-2026-80541
Immediate Actions Required
- Apply the upstream kernel patch that introduces amdgpu_gem_are_domains_valid() and returns -EINVAL for invalid domain combinations
- Update to a distribution kernel that includes the stable backports referenced in the kernel.org commits
- Restrict access to /dev/dri/* device nodes to trusted local users and graphics-facing service accounts until patches are deployed
Patch Information
The fix adds a helper amdgpu_gem_are_domains_valid() that allows combinations only within CPU/GTT/VRAM and requires DOORBELL, GDS, GWS, and OA domains to be specified individually. Invalid combinations return -EINVAL from amdgpu_gem_create_ioctl(). The upstream fix was cherry-picked as commit db39852d0c39843cb02048dfb47e4b8c703e9080 and backported through the following stable commits: 220aa25, 4933550, 584e3d4, 5c73485, 5e9d136, 66133fc, 80f0b53, and ce5da47.
Workarounds
- Tighten permissions on DRM device nodes so only trusted graphics processes can issue ioctls to the amdgpu driver
- Deny untrusted containers and sandboxes access to /dev/dri/* by removing device passthrough in container runtime configurations
- Where GPU access is not required, blacklist the amdgpu module or unbind the device to eliminate the attack surface
# Example: restrict DRM render node access to the video group only
sudo chown root:video /dev/dri/renderD128
sudo chmod 0660 /dev/dri/renderD128
# Verify running kernel does not match known-vulnerable builds
uname -r
apt list --installed 2>/dev/null | grep linux-image
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

