CVE-2025-38084 Overview
CVE-2025-38084 is a race condition vulnerability in the Linux kernel's memory management subsystem, specifically within the HugeTLB page table handling code. The vulnerability exists in the __split_vma() function, which triggers HugeTLB page table unsharing through vm_ops->may_split() at an improper point in the execution flow—before VMA and rmap locks are acquired.
This timing issue creates a race condition where concurrent VMA-locked page faults within the same process, or rmap walks from other processes, can cause page tables to be shared again before the VMA split operation actually completes. The vulnerability affects systems using HugeTLB pages, which are commonly deployed in high-performance computing environments, database servers, and virtualization platforms.
Critical Impact
Local attackers with access to systems using HugeTLB memory can trigger a race condition leading to denial of service through memory corruption or system instability.
Affected Products
- Linux Kernel (multiple versions)
- Debian Linux 11.0
Discovery Timeline
- June 28, 2025 - CVE-2025-38084 published to NVD
- December 18, 2025 - Last updated in NVD database
Technical Details for CVE-2025-38084
Vulnerability Analysis
The vulnerability stems from incorrect ordering of locking operations during VMA (Virtual Memory Area) split operations involving HugeTLB pages. In the vulnerable code path, the __split_vma() function calls into HugeTLB page table unsharing logic via vm_ops->may_split() before acquiring the necessary synchronization primitives.
When HugeTLB pages are involved, multiple processes or threads can share PMD (Page Middle Directory) entries to optimize memory usage. During a VMA split operation, these shared page tables must be properly unshared to maintain memory isolation. However, because the unsharing occurs before the VMA lock and rmap (reverse mapping) locks are taken, a race window exists where:
- A concurrent page fault in the same process (protected by VMA lock) can re-share page tables
- An rmap walk from another process can similarly cause page tables to be shared again
The fix moves the hugetlb_unshare_pmds() call to occur at the same point where THP (Transparent Huge Pages) splitting happens, where both the VMA and rmap are write-locked, eliminating the race condition. This issue was originally introduced despite an earlier attempt to fix related problems in commit b30c14cd6102 ("hugetlb: unshare some PMDs when splitting VMAs").
Root Cause
The root cause is improper synchronization during VMA split operations. The hugetlb_unshare_pmds() helper function can be called from two different locking contexts:
- From hugetlb_split(), holding the mmap lock exclusively, VMA lock, and file rmap lock exclusively
- From hugetlb_unshare_all_pmds(), which may only hold the mmap lock in shared mode
The original implementation called into the unsharing logic before these locks were acquired, creating a Time-of-Check Time-of-Use (TOCTOU) vulnerability where the page table state could change between the unsharing operation and the actual VMA split.
Attack Vector
Exploitation requires local access to the system with the ability to allocate and manipulate HugeTLB pages. An attacker would need to:
- Create a process that uses HugeTLB memory allocations
- Trigger a VMA split operation (e.g., through mprotect(), munmap(), or mremap() on a portion of a HugeTLB mapping)
- Simultaneously trigger page faults or memory operations from concurrent threads or processes to race with the split operation
The attack requires precise timing to exploit the race window between page table unsharing and lock acquisition. Successful exploitation could lead to memory corruption, data leakage between processes, or denial of service through kernel crashes. The local attack vector and requirement for HugeTLB access limits the exposure surface to multi-tenant environments or systems where untrusted code can execute.
Detection Methods for CVE-2025-38084
Indicators of Compromise
- Unexpected kernel crashes or panics related to memory management or page table operations
- System instability when running applications that use HugeTLB pages (databases, VMs, HPC applications)
- Anomalous behavior in processes using large memory allocations with hugepages
Detection Strategies
- Monitor kernel logs for oops or panic messages referencing __split_vma, hugetlb_unshare_pmds, or related memory management functions
- Track system calls related to memory operations (mprotect, munmap, mremap) on HugeTLB mappings for unusual patterns
- Use kernel tracing tools (ftrace, eBPF) to monitor VMA split operations and detect potential race conditions
Monitoring Recommendations
- Enable kernel crash dump collection (kdump) to capture diagnostic information if exploitation causes a kernel panic
- Deploy SentinelOne Singularity Platform for real-time kernel-level monitoring and behavioral analysis of memory operations
- Monitor /proc/meminfo for unexpected changes in HugePages statistics that could indicate exploitation attempts
How to Mitigate CVE-2025-38084
Immediate Actions Required
- Update the Linux kernel to a patched version as soon as available from your distribution
- Review system configurations to identify workloads using HugeTLB pages that may be at risk
- Consider temporarily disabling HugeTLB on systems where immediate patching is not possible and security is critical
Patch Information
Patches have been released across multiple Linux kernel stable branches. The fix explicitly calls into the HugeTLB unshare logic from __split_vma() at the same point where THP splitting occurs, ensuring proper locking is in place. The following kernel commits address this vulnerability:
- Kernel Patch Commit 081056d
- Kernel Patch Commit 2511ac6
- Kernel Patch Commit 366298f
- Kernel Patch Commit 8a21d55
- Kernel Patch Commit 9cf5b2a
- Kernel Patch Commit af6cfcd
- Kernel Patch Commit e8847d1
Debian users should apply updates per the Debian LTS Announcement #7 and Debian LTS Announcement #8.
Additional technical details are available at the Chromium Project Zero Issue #420715744.
Workarounds
- Disable HugeTLB pages by setting vm.nr_hugepages=0 if your workload does not require them
- Restrict access to systems using HugeTLB pages to trusted users only
- Implement process isolation using containers or VMs to limit the impact of potential exploitation
# Disable HugeTLB pages temporarily (requires root)
echo 0 > /proc/sys/vm/nr_hugepages
# Verify HugeTLB is disabled
cat /proc/meminfo | grep HugePages
# Permanent configuration in /etc/sysctl.conf
# Add: vm.nr_hugepages = 0
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

