CVE-2026-89978 Overview
CVE-2026-89978 is a Linux kernel vulnerability in the accel/amdxdna driver used by AMD Ryzen AI Neural Processing Units (NPU). The SYNC_BO ioctl does not validate its size argument. A request for zero bytes reaches drm_clflush_virt_range(), which executes an unconditional clflushopt(end - 1) against the byte preceding the mapped buffer. Because abo->mem.kva originates from vmap(), the access lands in the guard page below the vmalloc area and triggers a kernel page fault. Any process that can open the DRM render node can trigger the fault, resulting in a local denial of service on affected systems.
Critical Impact
Unprivileged local users with access to the render node can trigger a kernel oops on AMD Strix Point NPU systems, causing a denial of service.
Affected Products
- Linux kernel accel/amdxdna driver (AMD XDNA NPU)
- Systems with AMD Strix Point NPU (PCI ID 1022:17f0)
- Distributions shipping vulnerable kernels prior to the fix commits
Discovery Timeline
- 2026-09-16 - CVE-2026-89978 published to NVD
- 2026-09-16 - Last updated in NVD database
Technical Details for CVE-2026-89978
Vulnerability Analysis
The flaw resides in the amdxdna_drm_sync_bo_ioctl() handler in the AMD XDNA accelerator driver. SYNC_BO accepts a user-supplied size without enforcing a non-zero minimum. When the size is zero, the driver still invokes drm_clflush_virt_range() with an empty range. That helper unconditionally issues clflushopt on end - 1, which for an empty range is the byte immediately before the mapping.
Because the buffer's kernel virtual address comes from vmap(), the byte before the mapping falls inside the vmalloc guard page. Reading that address in supervisor mode raises a page fault the kernel cannot resolve, producing an oops. The reporter reproduced the fault three of three times on a Strix Point NPU by calling SYNC_BO with size 0 against an AMDXDNA_BO_SHARE object. The import path takes the same request but flushes the entire scatterlist, so it does not exhibit the same behavior.
Root Cause
The root cause is missing input validation on the size field of the SYNC_BO ioctl combined with an off-by-one boundary condition inside drm_clflush_virt_range(). The helper computes end - 1 without checking whether the range is empty, so a zero-length flush dereferences memory outside the target buffer.
Attack Vector
The attack vector is local. Any user with permission to open /dev/dri/renderD* on a system exposing the AMD XDNA accelerator can issue the malformed SYNC_BO ioctl. No elevated privileges or additional capabilities are required beyond render node access, which is commonly granted to interactive users. The result is a kernel oops and denial of service on the affected CPU path.
// No verified exploit code is published. The condition is triggered by
// invoking the DRM SYNC_BO ioctl on an AMDXDNA_BO_SHARE object with size = 0.
// See the referenced kernel commits for the corrected validation logic.
Detection Methods for CVE-2026-89978
Indicators of Compromise
- Kernel log entries containing BUG: unable to handle page fault for address: followed by an address in the vmalloc guard range
- Oops backtraces referencing drm_clflush_virt_range+0x3c/0x70 and amdxdna_drm_sync_bo_ioctl in the [amdxdna] module
- Unexpected process terminations on hosts with AMD Strix Point NPU hardware (1022:17f0)
Detection Strategies
- Monitor dmesg and journald for kernel oops events tied to the amdxdna module and DRM ioctl paths
- Correlate render node access (/dev/dri/renderD*) with subsequent kernel fault events to identify triggering processes
- Audit installed kernel versions against the fix commits 45962da, dc14753, and f00def8 from the upstream stable tree
Monitoring Recommendations
- Forward kernel logs to a centralized logging or SIEM platform to alert on repeated page fault signatures from DRM drivers
- Track systems exposing AMD XDNA NPU hardware and record their kernel build state for patch compliance
- Alert on unexpected reboots or system instability on workstations equipped with AMD Ryzen AI accelerators
How to Mitigate CVE-2026-89978
Immediate Actions Required
- Apply the upstream Linux kernel patches referenced in the Kernel Git Commit 45962da, Kernel Git Commit dc14753, and Kernel Git Commit f00def8
- Update to a distribution kernel that includes the accel/amdxdna: return early from a zero-length flush fix
- Inventory hosts with AMD Strix Point NPU hardware and prioritize them for patching
Patch Information
The upstream fix adds an early return in amdxdna_drm_sync_bo_ioctl() when the requested flush size is zero, so drm_clflush_virt_range() is never called on an empty range. Backports are tracked in the stable kernel trees under commits 45962da, dc14753, and f00def8. Users should install kernel packages from their distribution vendor once these commits are included in the shipped build.
Workarounds
- Restrict access to /dev/dri/renderD* on affected systems by tightening group membership and udev rules until patched
- Unload or blacklist the amdxdna kernel module on hosts that do not require NPU acceleration
- Disable the AMD XDNA NPU in firmware or BIOS on systems where the accelerator is not used
# Temporarily block the vulnerable driver until the patched kernel is installed
echo 'blacklist amdxdna' | sudo tee /etc/modprobe.d/blacklist-amdxdna.conf
sudo update-initramfs -u
# Reboot to ensure the module is not loaded
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

