CVE-2026-89803 Overview
CVE-2026-89803 is a use-after-free vulnerability in the Linux kernel's nouveau DRM (Direct Rendering Manager) driver for NVIDIA GPUs. The flaw exists in nouveau_channel_del(), which tears down the fence context before unsubscribing the channel-kill event. A kill event delivered during this narrow window causes the nouveau_channel_killed() handler to walk fctx->pending on a fence context that context_del() has already freed. The issue affects Fermi and newer GPU generations, since the subscription is gated on FERMI_CHANNEL_GPFIFO. Local attackers with low privileges can trigger the race to corrupt kernel memory.
Critical Impact
Local exploitation can lead to kernel memory corruption, privilege escalation, or denial of service on systems with NVIDIA Fermi or newer GPUs using the nouveau driver.
Affected Products
- Linux kernel with nouveau DRM driver enabled
- Systems running NVIDIA Fermi-generation GPUs and newer
- Linux distributions shipping the affected kernel versions prior to the fix commits
Discovery Timeline
- 2026-09-16 - CVE-2026-89803 published to NVD
- 2026-09-16 - Last updated in NVD database
Technical Details for CVE-2026-89803
Vulnerability Analysis
The vulnerability resides in the channel teardown sequence in nouveau_channel_del(). The function invokes context_del() on the fence context first, then proceeds through nvif_object_dtor() calls, and only later calls nvif_event_dtor(&chan->kill) to remove the channel-kill subscription. Between the fence context destruction and the event unsubscription, the kill handler remains active.
If a kill event arrives during that window, nouveau_channel_killed() executes and calls nouveau_channel_kill(), which in turn calls nouveau_fence_context_kill() on chan->fence. The handler acquires fctx->lock and iterates fctx->pending, both of which belong to a fence context whose backing memory has already been released. This constitutes a classic use-after-free on kernel structures.
Root Cause
The root cause is incorrect teardown ordering. Resource lifetime rules require that any asynchronous callback which references an object must be unregistered before the object is freed. nouveau_channel_del() violates this by freeing the fence context while the kill event handler that dereferences it remains subscribed.
Attack Vector
Exploitation requires local access with the ability to open a nouveau DRM channel and trigger channel destruction concurrent with a kill event. The window is narrow because it depends on a kill landing precisely during channel teardown. On current kernels nothing routinely kills channels above Tesla, so the exposure is limited today, but the ordering defect becomes more reachable once recovery paths that kill channels are introduced.
No public proof-of-concept exploit is available. Refer to the upstream fix commits 1fef7553, 51158598, f3830fdd, and f5a79a9e for source-level details of the reordering fix.
Detection Methods for CVE-2026-89803
Indicators of Compromise
- Kernel oops or panic messages referencing nouveau_fence_context_kill, nouveau_channel_killed, or fctx->pending list corruption
- KASAN (Kernel Address Sanitizer) reports flagging use-after-free in nouveau fence context structures
- Unexpected GPU channel resets or DRM subsystem crashes on Fermi or newer NVIDIA hardware
Detection Strategies
- Enable KASAN on test and staging systems running the nouveau driver to surface the use-after-free during stress workloads
- Collect and inspect dmesg output for stack traces originating in drivers/gpu/drm/nouveau/ around channel teardown
- Correlate GPU workload termination events with kernel warnings to identify concurrent kill and destroy sequences
Monitoring Recommendations
- Forward kernel logs to a centralized logging or SIEM platform and alert on crash signatures involving nouveau fence functions
- Monitor unprivileged local user activity that opens DRM render nodes on hosts with NVIDIA GPUs
- Track kernel package versions across the fleet to identify hosts still running vulnerable builds
How to Mitigate CVE-2026-89803
Immediate Actions Required
- Apply the upstream kernel patches referenced in the fix commits or update to a stable kernel release that incorporates them
- Inventory hosts using the nouveau driver and prioritize patching systems with Fermi or newer NVIDIA GPUs
- Restrict local access on affected multi-user systems until patched kernels are deployed
Patch Information
The fix reorders nouveau_channel_del() to call nvif_event_dtor(&chan->kill) before tearing down the fence context, ensuring the kill handler cannot fire against freed memory. Patched commits include 1fef7553, 51158598, f3830fdd, and f5a79a9e. Consult your Linux distribution's security advisories for backported package versions.
Workarounds
- Blacklist the nouveau kernel module on systems that do not require open-source NVIDIA graphics support
- Switch to the proprietary NVIDIA driver where operationally acceptable, as it does not share the vulnerable code path
- Restrict access to /dev/dri/renderD* nodes using group permissions or a mandatory access control policy such as SELinux or AppArmor
# Blacklist the nouveau module and rebuild initramfs
echo 'blacklist nouveau' | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
echo 'options nouveau modeset=0' | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u
sudo reboot
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.