CVE-2026-97945
Received Received - Intake

Data Loss in Linux Kernel with MADV_FREE and THP

Vulnerability report for CVE-2026-97945, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-09-25

Last updated on: 2026-09-25

Assigner: kernel.org

Description

In the Linux kernel, the following vulnerability has been resolved: x86/mm: Fix user-space data loss with MADV_FREE and THP Some of users of Polars (a data analytics library) have lost production data from this bug. They seem to have just the right combination of huge pages, MADV_FREE and heavy reclaim pressure. pmd_modify() masks the old value with (_HPAGE_CHG_MASK & ~_PAGE_DIRTY), silently discarding the hardware dirty bit. The subsequent pmd_mksaveddirty() call is supposed to transfer _PAGE_DIRTY into _PAGE_SAVED_DIRTY when write-protecting, but the dirty bit was already stripped from the value, so there is nothing left to transfer. Contrast with pte_modify(), which keeps _PAGE_DIRTY_BITS in its mask, and pud_modify(), which keeps _HPAGE_CHG_MASK untouched: pmd_modify() is the odd one out. Any pmd_modify() on a writable, dirty PMD loses the dirty state. One visible consequence is data loss with MADV_FREE on PMD-mapped THP: memset(buf, 0x5A, size); // PMD-mapped THP, PMD dirty madvise(buf, size, MADV_FREE); // PMD cleaned but left writable, // folio marked lazyfree memset(buf, 0x5A, size); // hardware sets _PAGE_DIRTY again mprotect(buf, size, PROT_READ); // pmd_modify() drops the dirty bit mprotect(buf, size, PROT_READ|PROT_WRITE); // ... memory pressure ... Reclaim (e.g. under memcg pressure) then finds the lazyfree folio with no dirty bit set anywhere and frees it in __discard_anon_folio_pmd_locked(), even though the data was rewritten after MADV_FREE; subsequent reads fault in fresh zero pages. NUMA hinting alone can trigger the same loss, as do_huge_pmd_numa_page() restores the PMD through pmd_modify() as well. PMD-mapped file THPs are affected too: mprotect()/NUMA hinting dropping the dirty bit means rewritten data is never written back. Fix it by keeping _PAGE_DIRTY in the preserved mask, exactly like pte_modify() and pud_modify() do. The existing pmd_mksaveddirty()/pmd_clear_saveddirty() pair then performs the hardware-dirty <-> saved-dirty transition based on the write bit, preserving the shadow-stack encoding rules.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-09-25
Last Modified
2026-09-25
Generated
2026-09-25
AI Q&A
2026-09-25
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 2 associated CPEs
Vendor Product Version / Range
linux linux_kernel *
polars polars *

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-UNKNOWN

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability in the Linux kernel causes data loss when using MADV_FREE with Transparent Huge Pages (THP). The issue occurs in pmd_modify() which incorrectly strips the dirty bit from memory pages, leading to data being freed even after it was rewritten. This happens because the dirty state is lost during operations like mprotect() or NUMA hinting.

Detection Guidance

This vulnerability is specific to the Linux kernel and requires kernel-level detection. Check your kernel version with 'uname -r' and compare it against patched versions. Look for symptoms like unexpected data loss in applications using MADV_FREE with THP or file-backed THPs.

Impact Analysis

Users may experience data loss in production environments, particularly when using Polars or similar data analytics tools with huge pages and heavy memory pressure. The bug can cause rewritten data to be discarded during memory reclaim, resulting in incorrect or missing data in applications.

Compliance Impact

This vulnerability could lead to violations of data integrity requirements in GDPR and HIPAA, as it may cause permanent loss of personal or health-related data. Organizations handling sensitive data under these regulations could face compliance issues if the bug leads to unauthorized data deletion or corruption.

Mitigation Strategies

Update your Linux kernel to the latest patched version. Avoid using MADV_FREE with THP or file-backed THPs until patched. Monitor systems for data loss symptoms and apply kernel patches immediately.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-97945. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart