Description
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)
Published: 2026-10-23
Score: 7.8 High
EPSS: < 1% Very Low
KEV: No
Impact: Memory corruption via use‑after‑free caused by stale list entry in the DRM/xe subsystem
Action: Immediate Patch
AI Analysis

Impact

During the pinning and unpinning process of display buffers in the Linux kernel's DRM/xe driver, a faulty list removal logic caused a buffer object to remain in the pinned list after its reference count dropped to zero. When that object was freed, the lingering list entry pointed to deallocated memory, corrupting the list structure and creating a use‑after‑free condition. The flaw can lead to memory corruption, which an attacker with sufficient privileges could exploit to execute arbitrary code or cause a denial of service.

Affected Systems

All unpatched Linux kernel releases that include the xe DRM driver before the patch identified in the commit sequence are affected. The CNA vendor/product list indicates that the target is the Linux kernel (Linux:Linux), but specific version numbers are not provided, so any system running an unpatched kernel containing these functions is at risk. This assessment is inferred from the available vendor and product information.

Risk and Exploitability

The EPSS score is <1% and the vulnerability is not listed in the CISA KEV catalog, but the flaw’s nature—list corruption leading to a use‑after‑free—provides a theoretical pathway for privilege escalation in a local or remote exploitation scenario. The absence of exploitation evidence does not diminish the potential impact; attackers may develop techniques to trigger the memory corruption. The risk is considered moderate until verification or a proof‑of‑concept demonstrates active exploitation. The likely attack vector is local, requiring kernel‑level access, but can also be leveraged in privileged process contexts or through compromised drivers. The CVSS score of 7.8 indicates high severity.

Generated by OpenCVE AI on October 29, 2026 at 20:47 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the Linux kernel update that incorporates the patch correcting the stale pinned_link handling in the DRM/xe subsystem, ensuring the commit is applied.
  • Reboot the system to load the updated kernel and restart services that rely on DRM/xe.
  • Apply any vendor‑supplied security updates that address DRM or memory corruption issues, ensuring all related packages are up to date.

Generated by OpenCVE AI on October 29, 2026 at 20:47 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Thu, 29 Oct 2026 19:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Thu, 29 Oct 2026 12:15:00 +0000


Sat, 24 Oct 2026 17:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Sat, 24 Oct 2026 16:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Sat, 24 Oct 2026 14:15:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.8, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'}


Fri, 23 Oct 2026 18:45:00 +0000

Type Values Removed Values Added
First Time appeared Linux linux
Vendors & Products Linux linux

Fri, 23 Oct 2026 17:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Fri, 23 Oct 2026 12:45:00 +0000

Type Values Removed Values Added
Description 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)
Title drm/xe: Fix stale pinned_link entry when fb-pin performs the final unpin
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-10-24T14:09:56.167Z

Reserved: 2026-09-25T10:25:14.385Z

Link: CVE-2026-98999

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-23T13:17:22.177

Modified: 2026-10-24T14:16:51.610

Link: CVE-2026-98999

cve-icon Redhat

Severity : Important

Publid Date: 2026-10-23T00:00:00Z

Links: CVE-2026-98999 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-29T21:00:21Z

Weaknesses
  • CWE-825

    Expired Pointer Dereference