Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

redhat логотип

CVE-2026-98999

Опубликовано: 23 окт. 2026
Источник: redhat
CVSS3: 7.8

Описание

In the Linux kernel, the following vulnerability has been resolved: drm/xe: Fix stale pinned_link entry when fb-pin performs the final unpin xe_bo_pin_external() and xe_bo_unpin_external() maintain the bo's pinned_link list membership in xe->pinned.late.external, based on whether the current call is the outermost pin or the final unpin. However, the same external bo's pin_count can also be raised and lowered directly by __xe_pin_fb_vma()/__xe_unpin_fb_vma(), which pin the bo as a display scanout buffer without going through xe_bo_pin_external()/xe_bo_unpin_external() at all, and have no notion of, or ownership over, pinned_link. If a bo is pinned both externally (e.g. dma-buf export) and as an fb, and the external unpin happens first, xe_bo_unpin_external() correctly observes pin_count > 1 and leaves the bo on pinned_link. When the fb unpin later performs the true last unpin (pin_count 1 -> 0), it never touches pinned_link, leaving the bo linked on xe->pinned.late.external indefinitely. Once the bo is subsequently freed, this stale list entry points into freed memory, corrupting the list and risking a use-after-free the next time the list is walked or spliced. The backup object pin/unpin sites in xe_bo_notifier_prepare_pinned()/ xe_bo_notifier_unprepare_pinned() have the same bypass characteristic, though they never add their bo to a pinned list, so are not affected by this particular list-corruption issue. Move the pinned_link removal into xe_bo_account_unpin(), which already runs on every unpin path (kernel, external, framebuffer, backup object) right before the true 1 -> 0 pin_count transition. Since list_del_init() only operates on the node itself, this removal is list-agnostic and safe to perform regardless of which list (external or kernel_bo_present) the bo happens to be linked on, or which code path is performing the final unpin. Drop the now-redundant explicit list_del_init() calls in xe_bo_unpin_external() and xe_bo_unpin(). v2:

  • New patch v3:
  • Rebased on changes to previous patch. (cherry picked from commit ca58d36a1f93af586ee93b340c9f9fd81312cc01)

    A flaw was found in the Linux kernel's Intel Xe graphics driver (drm/xe). A local user could exploit this vulnerability to cause a denial of service (DoS) or potentially escalate privileges. When a graphics buffer object is pinned both externally and as a display framebuffer, releasing the external reference before the framebuffer reference leaves a stale entry on the driver's tracking list. Once the buffer is subsequently freed, accessing this corrupted list results in a use-after-free condition.

Отчет

This vulnerability is rated as Important severity because an authenticated local user with access to the GPU rendering interface can corrupt kernel memory structures, potentially enabling privilege escalation to root or causing an immediate system denial of service. The issue requires systems to be running hardware supported by the Intel Xe graphics driver. Standard server installations without dedicated or integrated Intel Xe graphics hardware, or where DRM device nodes are restricted from untrusted users, face negligible exposure.

Меры по смягчению последствий

--- CME Mitigation Guidance (2026-11-02) --- Disclaimer: The following mitigation solutions are provided as a courtesy, pending the application of an official patch. This content was generated utilizing AI tools in conjunction with data from https://cmetaxonomy.org. Customers are advised to independently evaluate and test these temporary mitigations within their own infrastructure. The highest-value action is to relocate buffer object tracking list detachment into common unpin accounting within the Intel Xe graphics driver to guarantee node removal on final unpin: upgrade to Linux kernel 6.18.57, 7.2.11, 7.3 (or the fixed Kernel/Kernel Ivos Qualcomm/Openshift/Ose Rhel Coreos/Kpatch builds), which move pinned_link removal via list_del_init into xe_bo_account_unpin so it unlinks the node during any 1-to-0 pin count transition, closing all 2 injection vectors (interleaved buffer object pinning via external dma-buf export and display framebuffer creation, triggering final unpin via framebuffer release to leave a stale list entry prior to buffer deallocation). Until patched, this is only a concern on Linux systems with Intel Xe graphics hardware and driver (drm/xe) where local users have access to DRM graphics rendering device nodes — Systems without Intel Xe graphics hardware or where DRM device nodes are restricted from untrusted users are unaffected — so restrict local user access to DRM graphics rendering device nodes, confine rendering privileges, and prevent untrusted users from accessing Intel Xe device interfaces. As a compensating measure, deploy KASAN or HWASan to detect use-after-free conditions and corrupted list pointer dereferences when the tracking list is traversed or spliced, enable SLAB freelist randomization and integrity checks to mitigate heap exploitation when manipulating freed buffer objects, enforce SELinux in enforcing mode to restrict local user access to Intel DRM device nodes and confine process domains, enable KASLR to randomize kernel code and data layouts to hinder locating kernel structures during exploitation, enable SMEP to prevent kernel-mode execution of userspace code if list corruption hijacks control flow, and enable SMAP to prevent kernel-mode access to userspace memory during use-after-free exploitation. These controls limit blast radius and contain exploitation, but they do not fix the underlying use-after-free list-corruption defect — apply the upstream patch to fully remediate. Highest-impact CME: CME-301 SELinux (Enforcing Mode) (medium)

Затронутые пакеты

ПлатформаПакетСостояниеРекомендацияРелиз
Red Hat Enterprise Linux 10kernelAffected
Red Hat Enterprise Linux 6kernelNot affected
Red Hat Enterprise Linux 7kernelNot affected
Red Hat Enterprise Linux 7kernel-rtNot affected
Red Hat Enterprise Linux 8kernelNot affected
Red Hat Enterprise Linux 8kernel-rtNot affected
Red Hat Enterprise Linux 9kernelAffected
Red Hat Enterprise Linux 9kernel-rtNot affected
Red Hat OpenShift Container Platform 4openshift/ose-rhel-coreos-8Not affected
Red Hat OpenShift Container Platform 4openshift/ose-rhel-coreos-9Affected

Показывать по

Дополнительная информация

Статус:

Important
Дефект:
CWE-825
https://bugzilla.redhat.com/show_bug.cgi?id=2559694kernel: drm/xe: Fix stale pinned_link entry when fb-pin performs the final unpin

7.8 High

CVSS3

Связанные уязвимости

CVSS3: 7.8
ubuntu
17 дней назад

In the Linux kernel, the following vulnerability has been resolved: drm/xe: Fix stale pinned_link entry when fb-pin performs the final unpin xe_bo_pin_external() and xe_bo_unpin_external() maintain the bo's pinned_link list membership in xe->pinned.late.external, based on whether the current call is the outermost pin or the final unpin. However, the same external bo's pin_count can also be raised and lowered directly by __xe_pin_fb_vma()/__xe_unpin_fb_vma(), which pin the bo as a display scanout buffer without going through xe_bo_pin_external()/xe_bo_unpin_external() at all, and have no notion of, or ownership over, pinned_link. If a bo is pinned both externally (e.g. dma-buf export) and as an fb, and the external unpin happens first, xe_bo_unpin_external() correctly observes pin_count > 1 and leaves the bo on pinned_link. When the fb unpin later performs the true last unpin (pin_count 1 -> 0), it never touches pinned_link, leaving the bo linked on xe->pinned.late.external indefinit...

CVSS3: 7.8
nvd
17 дней назад

In the Linux kernel, the following vulnerability has been resolved: drm/xe: Fix stale pinned_link entry when fb-pin performs the final unpin xe_bo_pin_external() and xe_bo_unpin_external() maintain the bo's pinned_link list membership in xe->pinned.late.external, based on whether the current call is the outermost pin or the final unpin. However, the same external bo's pin_count can also be raised and lowered directly by __xe_pin_fb_vma()/__xe_unpin_fb_vma(), which pin the bo as a display scanout buffer without going through xe_bo_pin_external()/xe_bo_unpin_external() at all, and have no notion of, or ownership over, pinned_link. If a bo is pinned both externally (e.g. dma-buf export) and as an fb, and the external unpin happens first, xe_bo_unpin_external() correctly observes pin_count > 1 and leaves the bo on pinned_link. When the fb unpin later performs the true last unpin (pin_count 1 -> 0), it never touches pinned_link, leaving the bo linked on xe->pinned.late.external indefinit

CVSS3: 7.8
debian
17 дней назад

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

CVSS3: 7.8
github
17 дней назад

In the Linux kernel, the following vulnerability has been resolved: drm/xe: Fix stale pinned_link entry when fb-pin performs the final unpin xe_bo_pin_external() and xe_bo_unpin_external() maintain the bo's pinned_link list membership in xe->pinned.late.external, based on whether the current call is the outermost pin or the final unpin. However, the same external bo's pin_count can also be raised and lowered directly by __xe_pin_fb_vma()/__xe_unpin_fb_vma(), which pin the bo as a display scanout buffer without going through xe_bo_pin_external()/xe_bo_unpin_external() at all, and have no notion of, or ownership over, pinned_link. If a bo is pinned both externally (e.g. dma-buf export) and as an fb, and the external unpin happens first, xe_bo_unpin_external() correctly observes pin_count > 1 and leaves the bo on pinned_link. When the fb unpin later performs the true last unpin (pin_count 1 -> 0), it never touches pinned_link, leaving the bo linked on xe->pinned.late.external indefi...

7.8 High

CVSS3