Cloudanix VulnDB

CVE-2026-63884

High · 7.8

CVSS

7.8

EPSS

0.2%

Published

Jul 19, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in the Linux Intel graphics driver could let someone with local access crash the machine or possibly gain full control of it.

Exploitation
Local Privilege
Attacker needs
Low Privilege
Complexity
Low
Impact
Privilege Gain
Component
OS kernel
Class
Use After Free
Remediation
Patch
Effort
Low
Patch risk
Low

What it actually does

This is a Linux kernel use-after-free flaw in the Intel i915 Direct Rendering Manager graphics driver, specifically in the Translation Table Maps object purge path. Under certain GPU memory pressure, eviction, validation, or object placement changes can replace the backing TTM page-vector container while later code continues to use a stale pointer. A local user who can exercise the i915 graphics ioctl paths may be able to trigger a kernel crash and, depending on allocator state and exploit reliability, potentially corrupt kernel memory to gain elevated privileges. The CVSS vector indicates local access with low complexity and low privileges required, no user interaction, and high confidentiality, integrity, and availability impact.

Why it matters to the business

Systems using affected Linux kernels with Intel i915 graphics enabled may be exposed to local denial of service or local privilege escalation. On workstations, graphics hosts, shared Linux desktops, GPU-enabled build systems, kiosks, and multi-user servers with local shell or containerized access to GPU devices, exploitation could let a low-privileged user crash the host or potentially take full control of it. The vulnerability is not currently listed in CISA KEV, has low EPSS, and has no reported exploit maturity in the supplied data, but kernel local privilege escalation issues should still be prioritized where untrusted users or workloads can access /dev/dri devices.

How an attack unfolds

An attacker first needs local code execution as an unprivileged user on a Linux system using the vulnerable i915 driver, typically with access to Direct Rendering Infrastructure device nodes such as /dev/dri/card* or /dev/dri/renderD*. The attacker then drives i915 GEM/TTM operations through graphics ioctls, creating and manipulating GPU buffer objects so that memory pressure, eviction, movement, validation, or purge behavior is reached. In the vulnerable path, ttm_bo_validate() can change the buffer object's TTM backing object, while subsequent i915 purge logic may still treat an earlier pointer as valid and dereference freed or replaced memory. A simple exploit may only produce a kernel oops or panic, causing denial of service. A more advanced exploit would attempt to shape kernel heap allocations around the freed object so the stale pointer references attacker-influenced data, potentially turning the use-after-free into kernel memory corruption and privilege escalation.

How to fix it

Apply a Linux kernel update from the relevant distribution, vendor, or upstream stable kernel branch that includes the i915 TTM object purge fix for this vulnerability. No exact fixed package versions were provided in the input, so administrators should rely on their operating system vendor advisories and kernel changelogs for the corrected build. Reboot systems after installing the fixed kernel so the patched i915 module is loaded. Where immediate patching is not possible, reduce exposure by restricting untrusted local users and containers from accessing /dev/dri devices, removing unnecessary membership in video/render groups, disabling GPU passthrough to untrusted workloads, and considering temporary disablement or blacklisting of the i915 module only where operationally acceptable. Kernel hardening features, lockdown modes, module signing, and rapid crash monitoring can reduce risk but should not be treated as complete mitigations.

How to confirm the fix worked

Confirm the running kernel version is the vendor-fixed build, not just that the package is installed. On Linux systems, compare `uname -r` and distribution package metadata against the vendor advisory for this issue, then reboot if the running kernel predates the fixed package. Verify whether i915 is loaded with `lsmod | grep '^i915'` and whether GPU device nodes are exposed with `ls -l /dev/dri`. Review kernel logs after patching to confirm there are no recurring i915 TTM purge crashes, general protection faults, or call traces involving `i915_ttm_purge`, `i915_ttm_move`, `ttm_bo_validate`, or `i915_gem_execbuffer2_ioctl`. For mitigation validation, ensure untrusted accounts or containers cannot open `/dev/dri/card*` or `/dev/dri/renderD*` unless required.

Typical attack path

  1. Obtain local low-privileged execution on a Linux host using the Intel i915 graphics driver.
  2. Confirm access to GPU/DRM device nodes such as /dev/dri/card0 or /dev/dri/renderD128.
  3. Use DRM/i915 GEM ioctl calls to allocate, bind, execute against, and evict GPU buffer objects.
  4. Create memory pressure or object state transitions that force TTM buffer-object validation, movement, eviction, and purge handling.
  5. Trigger the stale pointer dereference in the i915 TTM purge path after the backing TTM object has been replaced.
  6. Cause a kernel oops/panic for denial of service or attempt heap grooming to convert the use-after-free into privilege escalation.

How to detect it

Detection should focus on host telemetry because this is a local kernel-driver issue rather than a network-exposed vulnerability. Review `dmesg`, journald, syslog, kdump, crash dumps, and EDR process telemetry for kernel oops or panic messages involving the i915 and TTM modules. Key artifacts include general protection faults in `i915_ttm_purge`, call traces through `i915_ttm_move`, `ttm_bo_evict`, `ttm_bo_validate`, `__i915_ttm_get_pages`, `i915_gem_do_execbuffer`, or `i915_gem_execbuffer2_ioctl`, especially when associated with untrusted user sessions or unusual GPU workload processes. Look for repeated GPU/DRM crashes, unexpected host reboots, or local processes rapidly opening `/dev/dri` devices and issuing high volumes of DRM ioctls. If crash dumps are available, examine whether the faulting pointer resembles freed slab poison patterns, such as repeated byte values, and correlate the timestamp with shell history, auditd exec events, container starts, or processes holding `/dev/dri/card*` or `/dev/dri/renderD*`. Absence of these artifacts does not prove non-exploitation because a successful privilege-escalation attempt may not leave a clean kernel oops.

  • Oops: general protection fault, probably for non-canonical address
  • RIP: 0010:i915_ttm_purge
  • i915_ttm_purge+0x84/0x100 [i915]
  • i915_ttm_move+0x2b9/0x420 [i915]
  • ttm_bo_handle_move_mem
  • ttm_bo_evict
  • ttm_lru_walk_for_evict
  • ttm_bo_alloc_resource
  • ttm_bo_validate
  • __i915_ttm_get_pages
  • i915_ttm_get_pages
  • i915_gem_do_execbuffer
  • i915_gem_execbuffer2_ioctl
  • /dev/dri/card
  • /dev/dri/renderD
  • Comm: Xorg
  • RAX: a56b6b6b6b6b6b6b

What your security team should do

  • Inventory Linux systems with Intel i915 graphics enabled, prioritizing multi-user hosts, shared workstations, VDI fleets, GPU-enabled CI/build infrastructure, and container platforms exposing /dev/dri devices.
  • Patch affected systems with the vendor-fixed kernel as soon as practical and ensure they are rebooted into the fixed kernel.
  • Restrict access to /dev/dri/card* and /dev/dri/renderD* for untrusted users and workloads until patching is complete.
  • Review group membership for video and render groups and remove unnecessary users, services, and containers.
  • Monitor kernel logs for i915/TTM crash signatures that could indicate attempted exploitation or accidental triggering under load.
  • If crashes matching this issue are observed, preserve kernel logs, audit local users with GPU access, and investigate recent processes using DRM/i915 ioctls.
  • Track vendor advisories for exact fixed kernel versions because no fixed versions were supplied in the input.

The record

In the Linux kernel, the following vulnerability has been resolved: drm/i915: Fix potential UAF in TTM object purge TLDR: The bo->ttm object might be changed by calling ttm_bo_validate(), move casting it to an i915_tt object later to actually get the right pointer. A user reported hitting the following bug under heavy use on DG2: [26620.095550] Oops: general protection fault, probably for non-canonical address 0xa56b6b6b6b6b6b8b: 0000 1 SMP NOPTI [26620.095556] CPU: 2 UID: 0 PID: 631 Comm: Xorg Not tainted 6.18.8 #1 PREEMPT(lazy) [26620.095558] Hardware name: ASRock B850M Steel Legend WiFi/B850M Steel Legend WiFi, BIOS 3.50 09/18/2025 [26620.095559] RIP: 0010:i915_ttm_purge+0x84/0x100 [i915] [26620.095604] Code: 00 00 00 48 8d 54 24 10 48 89 e6 48 89 fb e8 83 aa ae ff 85 c0 75 6f 48 83 bb a8 01 00 00 00 74 2c 48 8b 45 78 48 85 c0 74 23 <48> 8b 78 20 48 c7 c2 ff ff ff ff 31 f6 e8 7a 73 e3 e0 48 8b 7d 78 [26620.095605] RSP: 0018:ffffc90005fd7430 EFLAGS: 00010282 [26620.095607] RAX: a56b6b6b6b6b6b6b RBX: ffff8881f46c3dc0 RCX: 0000000000000000 [26620.095608] RDX: 0000000000000000 RSI: 0000000000000246 RDI: 00000000ffffffff [26620.095609] RBP: ffff888289610f00 R08: 0000000000000001 R09: ffff88823b022000 [26620.095609] R10: ffff888103029b28 R11: ffff8881fc7f3800 R12: ffff88810b6150d0 [26620.095609] R13: ffff888289610f00 R14: 0000000000000000 R15: ffff8881f46c3dc0 [26620.095610] FS: 00007f1004d86900(0000) GS:ffff88901c858000(0000) knlGS:0000000000000000 [26620.095611] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [26620.095611] CR2: 00007f0fdf489000 CR3: 000000035b0c1000 CR4: 0000000000750ef0 [26620.095612] PKRU: 55555554 [26620.095612] Call Trace: [26620.095615] <TASK> [26620.095615] i915_ttm_move+0x2b9/0x420 [i915] [26620.095642] ? ttm_tt_init+0x65/0x80 [ttm] [26620.095644] ? i915_ttm_tt_create+0xc6/0x150 [i915] [26620.095667] ttm_bo_handle_move_mem+0xb6/0x160 [ttm] [26620.095669] ttm_bo_evict+0x100/0x150 [ttm] [26620.095671] ? preempt_count_add+0x64/0xa0 [26620.095673] ? _raw_spin_lock+0xe/0x30 [26620.095675] ? _raw_spin_unlock+0xd/0x30 [26620.095675] ? i915_gem_object_evictable+0xb7/0xd0 [i915] [26620.095704] ttm_bo_evict_cb+0x6e/0xd0 [ttm] [26620.095705] ttm_lru_walk_for_evict+0xa6/0x200 [ttm] [26620.095708] ttm_bo_alloc_resource+0x185/0x4f0 [ttm] [26620.095709] ? init_object+0x62/0xd0 [26620.095712] ttm_bo_validate+0x7a/0x180 [ttm] [26620.095713] ? _raw_spin_unlock_irqrestore+0x16/0x30 [26620.095714] __i915_ttm_get_pages+0xb0/0x170 [i915] [26620.095737] i915_ttm_get_pages+0x9f/0x150 [i915] [26620.095759] ? i915_gem_do_execbuffer+0xedc/0x2b40 [i915] [26620.095786] ? alloc_debug_processing+0xd0/0x100 [26620.095787] ? _raw_spin_unlock_irqrestore+0x16/0x30 [26620.095788] ? i915_vma_instance+0xa0/0x4e0 [i915] [26620.095822] __i915_gem_object_get_pages+0x2f/0x40 [i915] [26620.095848] i915_vma_pin_ww+0x706/0x980 [i915] [26620.095875] ? i915_gem_do_execbuffer+0xedc/0x2b40 [i915] [26620.095904] eb_validate_vmas+0x170/0xa00 [i915] [26620.095930] i915_gem_do_execbuffer+0x1201/0x2b40 [i915] [26620.095953] ? alloc_debug_processing+0xd0/0x100 [26620.095954] ? _raw_spin_unlock_irqrestore+0x16/0x30 [26620.095955] ? i915_gem_execbuffer2_ioctl+0xc9/0x240 [i915] [26620.095977] ? __wake_up_sync_key+0x32/0x50 [26620.095979] ? i915_gem_execbuffer2_ioctl+0xc9/0x240 [i915] [26620.096001] ? __slab_alloc.isra.0+0x67/0xc0 [26620.096003] i915_gem_execbuffer2_ioctl+0x11a/0x240 [i915] Results from decode_stacktrace.sh pointed to dereference of a file pointer field of a i915 TTM page vector container associated with an object being purged on eviction. That path is taken when the object is marked as no longer needed. Code analysis revealed a possibility of the i915 TTM page vector container being replaced with a new instance inside a function that purges content of the object, should it be still busy. That function is called, indirectly via a more general function that changes the object's placement and caching policy, ---truncated---

Affected packages

Ecosystem Package Introduced Fixed