Skip to main content
Vulnerability Database/CVE-2026-89758

CVE-2026-89758: Linux Kernel Privilege Escalation Vulnerability

CVE-2026-89758 is a privilege escalation flaw in the Linux kernel memory policy handling that can cause system crashes when processing device-private PMDs. This post explains its impact, affected versions, and mitigation steps.

Published:

CVE-2026-89758 Overview

CVE-2026-89758 is a Linux kernel memory management vulnerability in the mm/mempolicy subsystem. The flaw affects queue_folios_pmd(), which fails to skip non-present Page Middle Directory (PMD) entries when queueing folios. Since commit 368076f52ebe added device-private Transparent Huge Page (THP) support, a PMD may hold a device-private swap entry after a Heterogeneous Memory Management (HMM) GPU driver migrates an anonymous THP folio to device memory. Passing such a PMD to pmd_folio() treats the softleaf encoding as a hardware Page Frame Number (PFN) and returns a bogus folio pointer.

Critical Impact

Local attackers with GPU workload access can trigger kernel oops conditions, VM_BUG_ON firings on debug kernels, or silent isolation of unrelated live folios from the Least Recently Used (LRU) list.

Affected Products

  • Linux kernel versions containing commit 368076f52ebe ("mm/huge_memory: add device-private THP support to PMD operations")
  • Systems running HMM-based GPU drivers using migrate_vma_pages()
  • Distributions shipping affected mainline kernel builds prior to the fix commits

Discovery Timeline

  • 2026-09-11 - CVE-2026-89758 published to the National Vulnerability Database (NVD)
  • 2026-09-13 - Last updated in NVD database

Technical Details for CVE-2026-89758

Vulnerability Analysis

The vulnerability resides in queue_folios_pmd(), invoked under pmd_trans_huge_lock() during memory policy walks. The pmd_is_huge() check returns true for any non-present, non-none huge PMD softleaf, including device-private swap entries introduced by HMM-based GPU migration. The function previously assumed either a present THP or a migration entry, but device-private PMDs now bypass those assumptions.

When queue_folios_pmd() calls pmd_folio() on a device-private PMD, the routine interprets the swap-entry encoding as a physical PFN. The resulting folio pointer references arbitrary memory, producing outcomes that range from VM_BUG_ON() panics on debug kernels to oops conditions from bogus vmemmap dereferences. In aliasing cases, the kernel silently isolates an unrelated live folio from the LRU, corrupting page accounting.

Root Cause

The root cause is missing validation of PMD state before folio lookup. The fix mirrors the logic in queue_folios_pte_range() by handling non-present entries before dereferencing them. Migration entries continue to count as failures, while other non-present PMDs such as device-private entries are skipped safely.

Attack Vector

Exploitation requires local access and low privileges on a system running an HMM-based GPU driver. An attacker first triggers migrate_vma_pages() through legitimate GPU workload operations to leave a device-private PMD in an anonymous THP mapping. The attacker then invokes mbind(), migrate_pages(), or set_mempolicy_home_node() on that address range to reach the vulnerable code path. See the kernel git commit fix for the corrected walk logic.

Detection Methods for CVE-2026-89758

Indicators of Compromise

  • Kernel oops messages referencing queue_folios_pmd, pmd_folio, or vmemmap addresses in dmesg or /var/log/kern.log
  • VM_BUG_ON() triggers in mm/mempolicy.c on debug kernels
  • Unexpected LRU accounting anomalies or folio isolation events during GPU workload execution

Detection Strategies

  • Audit running kernel versions against the fix commits 2858b4027f491e6fdb8ee2d8923798b619bf2791 and 3d927093b2add7ced588a926c3dc5d7a83f18596
  • Monitor for processes invoking mbind(), migrate_pages(), or set_mempolicy_home_node() on ranges shared with GPU device memory
  • Correlate GPU driver activity involving migrate_vma_pages() with subsequent NUMA memory policy syscalls from the same process

Monitoring Recommendations

  • Enable kernel crash collection with kdump to capture stack traces referencing the affected walk callbacks
  • Ingest dmesg and audit logs into a centralized data lake for cross-host correlation of MM subsystem faults
  • Track syscall patterns from workloads on GPU-enabled compute nodes to identify anomalous memory policy manipulation

How to Mitigate CVE-2026-89758

Immediate Actions Required

  • Apply the upstream fix commits 2858b4027f491e6fdb8ee2d8923798b619bf2791 and 3d927093b2add7ced588a926c3dc5d7a83f18596 to affected kernels
  • Prioritize patching on hosts running HMM-based GPU drivers with anonymous THP enabled
  • Restrict local execution on GPU compute nodes to trusted users pending patch deployment

Patch Information

The fix updates queue_folios_pmd() to handle non-present PMD entries before invoking pmd_folio(). Migration entries are recorded as failures while device-private and other non-present entries are skipped. Patches are available in the kernel git commit fix and the follow-up commit. Distribution maintainers should backport both patches to supported stable kernel branches.

Workarounds

  • Disable Transparent Huge Pages for anonymous mappings by setting /sys/kernel/mm/transparent_hugepage/enabled to never
  • Restrict use of HMM-based GPU drivers on multi-tenant systems until the kernel is patched
  • Limit access to mbind(), migrate_pages(), and set_mempolicy_home_node() through seccomp filters on untrusted workloads
bash
# Disable anonymous THP as a temporary mitigation
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# Verify current setting
cat /sys/kernel/mm/transparent_hugepage/enabled

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.