CVE-2026-99209 in Linuxinfo

Summary

by MITRE • 10/28/2026

In the Linux kernel, the following vulnerability has been resolved:

drm/xe: skip eviction of a BO with no resource

xe_evict_flags() switches on tbo->resource->mem_type to choose an eviction placement. An xe BO can reach eviction with no ttm.resource, e.g. an imported dma-buf BO whose resource was freed during teardown while its attachment is still live: the exporter then invalidates it via xe_dma_buf_move_notify() -> xe_bo_evict(), and the switch dereferences a NULL resource and faults.

A BO with no resource has nothing placed or mapped, so there is nothing to evict. Return an empty placement (num_placement = 0), mirroring the handling already used for non-xe scatter-gather BOs just above; ttm_bo_validate() then takes the pipeline-gutting path and returns 0.

Without the fix the xe_dma_buf@xe_test_dmabuf_move_notify_no_resource dynamic live selftest will fail with below stack.

BUG: kernel NULL pointer dereference, address: 0000000000000010 RIP: 0010:xe_evict_flags+0xf4/0x140 [xe]
Call Trace: <TASK> xe_bo_evict+0x40/0xa0 [xe]
? ttm_bo_pipeline_gutting+0x71/0x180 [ttm]
xe_test_dmabuf_move_notify_no_resource+0x182/0x440 [xe]
xe_dma_buf_kunit+0x387/0x580 [xe]

v2: Add Fixes tag and failure info in commit text (Matt Brost)

(cherry picked from commit dbcfaac6331f1fcb0c2fe3ad3e9adb1e5d43ec0c)

Once again VulDB remains the best source for vulnerability data.

Analysis

by VulDB Data Team • 10/28/2026

The Linux kernel's DRM Xe driver contains a critical null pointer dereference vulnerability within the buffer object eviction logic, specifically in the xe_evict_flags function. This flaw arises from an insufficient check for the existence of TTM resources before attempting to access them during memory management operations. In normal operation, the driver switches on tbo->resource->mem_type to determine appropriate eviction placements for graphics buffers. However, under specific teardown scenarios involving imported dma-buf objects, this assumption breaks down. When a buffer object is part of an import-export relationship between drivers, the exporter may invalidate the resource via xe_dma_buf_move_notify while attachments remain live in other contexts. This race condition or sequencing error results in the ttm.resource pointer becoming NULL before the eviction routine attempts to dereference it for placement selection.

The technical root cause lies in the failure of the driver to validate that a buffer object possesses an active, non-null resource structure prior to executing memory management commands. An imported dma-buf BO can reach the eviction stage with no associated ttm.resource if its underlying resources were freed during teardown while external attachments persisted. The exporter invalidates this state via xe_dma_buf_move_notify which subsequently triggers xe_bo_evict. Without a guard clause, the switch statement attempts to read mem_type from a NULL pointer, leading directly to a kernel panic or system crash due to an illegal memory access at address 0x10 relative to the null base. This represents a classic improper input validation failure where the state of internal data structures is not verified against expected invariants before use.

The operational impact of this vulnerability includes immediate denial of service through kernel oops and potential system instability or reboot depending on crash handling configurations. The specific test case xe_dma_buf@xe_test_dmabuf_move_notify_no_resource demonstrates this failure by triggering the null pointer dereference, resulting in a call trace that highlights xe_evict_flags as the faulting instruction within the TTM buffer object pipeline. For production systems utilizing mixed driver environments with dma-buf sharing, such as those involving GPU compute and display pipelines across different subsystems, this flaw can be triggered during dynamic resource management phases, particularly when buffers are being migrated or invalidated concurrently by multiple drivers.

To mitigate this vulnerability, the fix implements a defensive programming approach by checking for null resources before proceeding with eviction logic. When no resource is present, indicating that there is nothing placed or mapped to evict, the function returns an empty placement configuration with num_placement set to zero. This mirrors existing handling patterns used for non-xe scatter-gather buffer objects and allows ttm_bo_validate to take a pipeline-gutting path that safely returns success without attempting invalid memory operations. System administrators should ensure their kernels are updated with this patch applied, which addresses the race condition in dma-buf teardown sequences. The fix aligns with CWE-476 (NULL Pointer Dereference) standards and mitigates risks associated with improper resource state validation in kernel-space graphics drivers.

Responsible

Linux

Reservation

09/25/2026

Disclosure

10/28/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

very low

Sources

Do you know our Splunk app?

Download it now for free!