CVE-2026-64181

CVE-2026-64181

High · published July 19, 2026

CVSS v3.1
7.8
EPSS
0%
Percentile
6.4
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

mm: fix __vm_normal_page() to handle missing support for pmd_special()/pud_special()

On x86 32-bit with THP enabled, zap_huge_pmd() is seen to generate a

"WARNING: mm/memory.c:735 at __vm_normal_page+0x6a/0x7d", from the

VM_WARN_ON_ONCE(is_zero_pfn(pfn) || is_huge_zero_pfn(pfn)); followed by

"BUG: Bad rss-counter state"s, then later "BUG: Bad page state"s when

reclaim gets to call shrink_huge_zero_folio_scan().

It's as if the _PAGE_SPECIAL bit never got set in the huge_zero pmd: and

indeed, whereas pte_special() and pte_mkspecial() are subject to a

dedicated CONFIG_ARCH_HAS_PTE_SPECIAL, pmd_special() and pmd_mkspecial()

are subject to CONFIG_ARCH_SUPPORTS_PMD_PFNMAP, which is never enabled on

any 32-bit architecture.

While the problem was exposed through commit d80a9cb1a64a

("mm/huge_memory: add and use normal_or_softleaf_folio_pmd()"), it was an

oversight in commit af38538801c6 ("mm/memory: factor out common code from

vm_normal_page_*()") and would result in other problems:

* huge zero folio accounted in smaps, pagemap (PAGE_IS_FILE) and

numamaps as file-backed THP

* folio_walk_start() returning the folio even without FW_ZEROPAGE set.

Callers seem to tolerate that, though.

... and triggering the VM_WARN_ON_ONE(), although never reported so far.

To fix it, teach vm_normal_page_pmd()/vm_normal_page_pud() to consider

whether pmd_special/pud_special is actually implemented.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00173 · 6.4th percentile
Published
2026-07-19T20:18Z
Affected products (6)
ProductVersionsFixed in
linux/linux_kernel≥ 6.18, < 6.18.346.18.34
linux/linux_kernel≥ 6.19, < 7.0.117.0.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (3)
EPSS history
Timeline
  • 19 JUL 15:41Z
    mm: fix __vm_normal_page() to handle missing support for pmd_special()/pud_special()
    cvelistv5