{
  "cveId": "CVE-2026-98999",
  "url": "https://patchblox.com/security/cve/CVE-2026-98999",
  "summary": "CVE-2026-98999 is fixed in linux on 1 platform by DEBIAN-CVE-2026-98999 (version 7.2.11-1), released October 24, 2026. It is not reported as exploited. Patch Radar priority: High.",
  "title": "linux: In the Linux kernel, the following vulnerability has been resolved:  drm/xe: Fix stale pinned_link entry when fb-pin...",
  "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\u0027s pinned_link list membership in xe-\u003Epinned.late.external, based on whether the current call is the outermost pin or the final unpin. However, the same external bo\u0027s 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 \u003E 1 and leaves the bo on pinned_link. When the fb unpin later performs the true last unpin (pin_count 1 -\u003E 0), it never touches pinned_link, leaving the bo linked on xe-\u003Epinned.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 -\u003E 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-23T13:17:22Z",
  "severity": "high",
  "cvss": 7.8,
  "cvssVector": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
  "epss": 0.00179,
  "epssPercentile": 0.07487,
  "priority": "High",
  "priorityTier": 3,
  "exploited": false,
  "vendorExploited": false,
  "disclosed": false,
  "fixes": [
    {
      "platform": "linux",
      "product": "linux",
      "release": "Debian 14",
      "fixedVersion": "7.2.11-1",
      "fix": "DEBIAN-CVE-2026-98999",
      "url": "https://patchblox.com/security/fix/linux/debian-cve-2026-98999",
      "released": "2026-10-24T13:25:57Z"
    }
  ],
  "noFixYet": [],
  "dataAsOf": "2026-11-09T13:31:49Z",
  "attribution": {
    "text": "Data: Patchblox Patch Radar",
    "url": "https://patchblox.com/security/patch-radar",
    "terms": "https://patchblox.com/security/patch-radar/use-the-data"
  }
}