CVE-2025-37958

mm/huge_memory: fix dereferencing invalid pmd migration entry

published May 20, 2025

CVSS
—
EPSS
0%
Percentile
12.8
In the wild
Unconfirmed
What it is

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

mm/huge_memory: fix dereferencing invalid pmd migration entry

When migrating a THP, concurrent access to the PMD migration entry during

a deferred split scan can lead to an invalid address access, as

illustrated below. To prevent this invalid access, it is necessary to

check the PMD migration entry and return early. In this context, there is

no need to use pmd_to_swp_entry and pfn_swap_entry_to_page to verify the

equality of the target folio. Since the PMD migration entry is locked, it

cannot be served as the target.

Mailing list discussion and explanation from Hugh Dickins: "An anon_vma

lookup points to a location which may contain the folio of interest, but

might instead contain another folio: and weeding out those other folios is

precisely what the "folio != pmd_folio((*pmd)" check (and the "risk of

replacing the wrong folio" comment a few lines above it) is for."

BUG: unable to handle page fault for address: ffffea60001db008

CPU: 0 UID: 0 PID: 2199114 Comm: tee Not tainted 6.14.0+ #4 NONE

Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014

RIP: 0010:split_huge_pmd_locked+0x3b5/0x2b60

Call Trace:

<TASK>

try_to_migrate_one+0x28c/0x3730

rmap_walk_anon+0x4f6/0x770

unmap_folio+0x196/0x1f0

split_huge_page_to_list_to_order+0x9f6/0x1560

deferred_split_scan+0xac5/0x12a0

shrinker_debugfs_scan_write+0x376/0x470

full_proxy_write+0x15c/0x220

vfs_write+0x2fc/0xcb0

ksys_write+0x146/0x250

do_syscall_64+0x6a/0x120

entry_SYSCALL_64_after_hwframe+0x76/0x7e

The bug is found by syzkaller on an internal kernel, then confirmed on

upstream.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00228 · 12.8th percentile
Published
2025-05-20T16:01Z
EPSS history
Timeline
  • 20 MAY 16:01Z
    mm/huge_memory: fix dereferencing invalid pmd migration entry
    cvelistv5