CVE-2026-98514 Overview
CVE-2026-98514 is a memory leak vulnerability in the Linux kernel's drm/nouveau graphics driver. The flaw resides in the validate_init() function, where the error-handling paths for ttm_bo_reserve() failure and "vma not found" conditions break out of the loop without releasing the GEM (Graphics Execution Manager) object reference acquired via drm_gem_object_lookup(). Because validate_fini() only iterates spliced lists, the leaked reference is never dropped. Kernel maintainers resolved the issue by releasing the reference before breaking on both error paths.
Critical Impact
Repeated triggering of the affected error paths can leak kernel GEM object references, leading to resource exhaustion on systems using Nouveau graphics drivers.
Affected Products
- Linux kernel versions containing the vulnerable drm/nouveauvalidate_init() implementation
- Systems using the Nouveau open-source NVIDIA graphics driver
- Distributions shipping kernels prior to the referenced stable patch commits
Discovery Timeline
- 2026-10-18 - CVE-2026-98514 published to NVD
- 2026-10-19 - Last updated in NVD database
Technical Details for CVE-2026-98514
Vulnerability Analysis
The vulnerability occurs inside the validate_init() function of the Nouveau Direct Rendering Manager (DRM) driver. The function iterates over user-supplied buffer objects, performing a lookup with drm_gem_object_lookup() which increments a reference count on each GEM object. The looked-up objects are expected to be added to a validation list so that validate_fini() can release their references after processing.
Two error paths violate this contract. When ttm_bo_reserve() fails, or when the associated virtual memory area (vma) is not found, the loop breaks immediately. The acquired GEM reference is neither placed on a validation list nor explicitly released. Each triggering of these paths leaks one kernel object reference.
Root Cause
The root cause is incorrect error-path cleanup in validate_init(). The code assumes validate_fini() will release all acquired references, but validate_fini() only walks spliced lists. Objects that never made it onto those lists are orphaned with their reference counts elevated, matching a classic Memory Leak pattern.
Attack Vector
A local user with access to the Nouveau DRM device nodes (typically /dev/dri/card*) can submit ioctl requests that steer execution into the faulty error paths. Repeated invocation leaks kernel memory associated with GEM objects and their backing buffers, which can degrade system availability over time. The upstream advisory does not indicate remote exploitability or privilege escalation.
No verified public exploit code is available. See the referenced kernel commits for technical details of the fix.
Detection Methods for CVE-2026-98514
Indicators of Compromise
- Sustained growth in kernel slab allocations associated with drm and ttm caches without a corresponding workload increase
- Processes repeatedly issuing Nouveau DRM ioctls that return -EINVAL or -EBUSY from buffer validation paths
- Gradual reduction in available system memory on hosts running the Nouveau driver
Detection Strategies
- Inspect running kernel version against the patched stable commits listed in the kernel.org references
- Monitor /proc/slabinfo for abnormal growth in nouveau and ttm_bo object counts
- Audit which users and processes hold open handles to /dev/dri/card* nodes on affected systems
Monitoring Recommendations
- Track kernel memory usage trends via vmstat, slabtop, and node_exporter metrics in Prometheus
- Alert on sustained increases in kernel slab usage that do not correlate with user workload
- Collect dmesg output for Nouveau or TTM subsystem warnings that may accompany validation failures
How to Mitigate CVE-2026-98514
Immediate Actions Required
- Apply the stable kernel update that includes the validate_init() reference-leak fix for your distribution
- Restrict access to /dev/dri/* device nodes to trusted users via group membership and udev rules
- On servers that do not require graphical output, blacklist the nouveau module
Patch Information
The fix drops the GEM reference before breaking out of the loop on both the ttm_bo_reserve() failure path and the "vma not found" path. Patched stable commits include 030e93f, 3c80e06, 5ea72f7, 74485cd, 8281930, 9576191, 9e13c39, and af2f48c. Reference the Kernel Patch Commit 030e93f and sibling commits for the complete fix across supported stable branches.
Workarounds
- Unload or blacklist the nouveau kernel module on systems that do not require it: add blacklist nouveau to a file under /etc/modprobe.d/
- Switch to the proprietary NVIDIA driver on affected workstations when operationally acceptable
- Limit DRM device access to a dedicated video group and remove unprivileged users from that group
# Configuration example
# Blacklist the nouveau driver until the kernel is patched
echo 'blacklist nouveau' | sudo tee /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.

