Cloudanix VulnDB

CVE-2026-98310

None

CVSS

—

EPSS

0.2%

Published

Oct 6, 2026

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

A graphics driver bug can cause errors or instability when the system tries to free memory while the graphics hardware is in a low-power state.

Exploitation
Local Privilege
Attacker needs
Local User
Complexity
Low
Impact
Denial Of Service
Component
OS kernel
Class
Race Condition
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The shrinker walks non-system memory LRUs without a runtime PM reference on suspended Xe devices, causing GPU mapping invalidation to fail with assertions and -ENODEV during TLB operations.

Why it matters to the business

Memory pressure scenarios on systems using Xe graphics can trigger warnings, failed reclaim operations, or instability when the GPU is runtime suspended, increasing operational risk on affected Linux kernels.

How an attack unfolds

A local process triggers slab shrink or cache drop while the device is suspended; the shrinker path for non-system BOs then attempts mapping invalidation without resuming the device first, hitting the assert in non-fault-mode VMs.

How to fix it

Update the Linux kernel to a version containing commit 628f92b28bf4c371c10207daf6fc4caee0c0db2e or later; ensure xe_device_is_l2_flush_optimized paths acquire the shrinker runtime PM reference before non-system walks.

How to confirm the fix worked

Confirm the fix by checking that xe_shrinker.c acquires the runtime PM ref before walking non-XE_PL_SYSTEM memory and stops the walk once the scan target is met; reproduce with igt@xe_madvise@dontneed-before-exec under suspend.

Typical attack path

  1. Place Xe GPU into runtime suspend
  2. Trigger memory reclaim via sysctl or madvise operations
  3. Shrinker walks TT or other non-system LRUs without PM reference
  4. xe_bo_move_notify asserts during zap and TLB invalidation returns error

How to detect it

Search kernel logs for the xe_bo_move_notify warning and xe_bo_shrink stack traces; correlate with runtime suspend events and drop_caches activity on Xe hardware.

What your security team should do

  • Prioritize kernel updates on systems with Xe GPUs
  • Monitor for WARN_ON in xe_bo.c during reclaim while suspended
  • Apply the change that gates non-system reclaim on the L2 flush optimization flag

The record

In the Linux kernel, the following vulnerability has been resolved: drm/xe/shrinker: Take a runtime PM ref before shrinking non-system memory __xe_shrinker_walk() walks the SYSTEM and TT LRUs without a runtime PM reference. Shrinking a bo outside system memory invalidates its GPU mappings, which needs the device resumed, so while it is runtime suspended the page table zap trips an assert and the TLB invalidation returns -ENODEV: WARNING: drivers/gpu/drm/xe/xe_bo.c:770 at xe_bo_move_notify+0x1fc/0x450 [xe] xe_bo_shrink+0x20f/0x2b0 [xe] __xe_shrinker_walk+0x174/0x410 [xe] xe_shrinker_scan+0x10c/0x1e0 [xe] do_shrink_slab+0x176/0x7e0 drop_caches_sysctl_handler+0x9c/0xf0 Take a reference before walking a memory type other than XE_PL_SYSTEM and stop there if it cannot be acquired. Reuse the shrinker's existing acquire path, which resumes the device directly where reclaim allows that and otherwise queues the PM worker for a later scan. Stop the walk once the scan target is met, so a satisfied scan does not wake the device. System memory is still reclaimed while the device is suspended. Gate this on xe_device_is_l2_flush_optimized(), the same condition under which xe_bo_trigger_rebind() issues the invalidation for a non-fault-mode vm, so reclaim is unaffected elsewhere. The System CCS copy already has its own reference in xe_bo_shrink(). Only a non-fault-mode vm can reach this, since a fault-mode vm requires LR mode and that holds a runtime PM reference for the vm's lifetime. Reproduced with igt@xe_madvise@dontneed-before-exec while the GPU is runtime suspended. v2: simplify needs_rpm check. (Matt) retarget Fixes tag since the issue occurs with the non-fault-mode path added by 4e7ebff69aed. v3: handle this in xe_shrinker.c instead of xe_bo.c (Thomas) v4: stop the walk once the scan target is met. (Sashiko) v5: rebase on the freed page accounting fix. (Sashiko) v6: reuse the shrinker acquire path so runtime pm can be resumed directly instead of always queueing a worker. (Thomas) v7: replace xe_pm_runtime_put() with xe_shrinker_runtime_pm_put(). (Thomas) (cherry picked from commit 628f92b28bf4c371c10207daf6fc4caee0c0db2e)

Affected packages

Ecosystem Package Introduced Fixed