CVE-2026-31466CWE-362

CVE-2026-31466

Medium · published April 22, 2026

CVSS v3.1
4.7
EPSS
0%
Percentile
1.6
In the wild
Unconfirmed
What it is

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

mm/huge_memory: fix folio isn't locked in softleaf_to_folio()

On arm64 server, we found folio that get from migration entry isn't locked

in softleaf_to_folio(). This issue triggers when mTHP splitting and

zap_nonpresent_ptes() races, and the root cause is lack of memory barrier

in softleaf_to_folio(). The race is as follows:

CPU0 CPU1

deferred_split_scan() zap_nonpresent_ptes()

lock folio

split_folio()

unmap_folio()

change ptes to migration entries

__split_folio_to_order() softleaf_to_folio()

set flags(including PG_locked) for tail pages folio = pfn_folio(softleaf_to_pfn(entry))

smp_wmb() VM_WARN_ON_ONCE(!folio_test_locked(folio))

prep_compound_page() for tail pages

In __split_folio_to_order(), smp_wmb() guarantees page flags of tail pages

are visible before the tail page becomes non-compound. smp_wmb() should

be paired with smp_rmb() in softleaf_to_folio(), which is missed. As a

result, if zap_nonpresent_ptes() accesses migration entry that stores tail

pfn, softleaf_to_folio() may see the updated compound_head of tail page

before page->flags.

This issue will trigger VM_WARN_ON_ONCE() in pfn_swap_entry_folio()

because of the race between folio split and zap_nonpresent_ptes()

leading to a folio incorrectly undergoing modification without a folio

lock being held.

This is a BUG_ON() before commit 93976a20345b ("mm: eliminate further

swapops predicates"), which in merged in v6.19-rc1.

To fix it, add missing smp_rmb() if the softleaf entry is migration entry

in softleaf_to_folio() and softleaf_to_page().

[[email protected]: update function name and comments]

The record
Technical detail
CVSS v3.1
4.7 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00117 · 1.6th percentile
Weakness
CWE-362 · Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
Published
2026-04-22T18:16Z
Affected products (12)
ProductVersionsFixed in
linux/linux_kernel≥ 6.13, < 6.18.216.18.21
linux/linux_kernel≥ 6.19, < 6.19.116.19.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernel≥ 4.5, < 5.10.2535.10.253
linux/linux_kernel≥ 5.11, < 5.15.2035.15.203
linux/linux_kernel≥ 5.16, < 6.1.1686.1.168
linux/linux_kernel≥ 6.2, < 6.6.1346.6.134
linux/linux_kernel≥ 6.7, < 6.12.816.12.81
References (11)
EPSS history
Timeline
  • 22 APR 13:53Z
    mm/huge_memory: fix folio isn't locked in softleaf_to_folio()
    cvelistv5