Public vulnerability disclosure

CVE-2026-31466

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

published

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]

Technical severityUnscoredNo score in collected sources
Published2026-04-22Source updated 2026-11-05
Collected2026-11-052 attributed sources

Fixes and workarounds

No remediation reported in collected sources.

Missing remediation information is not evidence that no patch exists.

Affected products and versions

Affected products, source version ranges and reporting authorities
ProductVersionsAuthority
Linux
Linux
≥ e9b61f19858a5d6c42ce2298cf138279375d0d9b; < 426ee10711586617da869c8bb798214965337617 (affected, git)
≥ e9b61f19858a5d6c42ce2298cf138279375d0d9b; < f1acf5887c2bbaf998dc3fe32c72b7a8b84a3ddd (affected, git)
≥ e9b61f19858a5d6c42ce2298cf138279375d0d9b; < 722cfaf6b31d31123439e67b5deac6b1261a3dea (affected, git)
≥ e9b61f19858a5d6c42ce2298cf138279375d0d9b; < 7ddcf4a245c1c5a91fdd9698757e3d95179ffe41 (affected, git)
≥ e9b61f19858a5d6c42ce2298cf138279375d0d9b; < b8c49ad888892ad7b77062b9c102b799a3e9b4f8 (affected, git)
≥ e9b61f19858a5d6c42ce2298cf138279375d0d9b; < 7ad1997b9bc8032603df8f091761114479285769 (affected, git)
≥ e9b61f19858a5d6c42ce2298cf138279375d0d9b; < 8bfb8414e9f2ce6f5f2f0e3d0da52f2d132128e7 (affected, git)
≥ e9b61f19858a5d6c42ce2298cf138279375d0d9b; < 4c5e7f0fcd592801c9cc18f29f80fbee84eb8669 (affected, git)
Other versions: unaffected
CNA: Linux
Linux
Linux
4.5 (affected)
≥ 0; < 4.5 (unaffected, semver)
≥ 5.10.253; ≤ 5.10.* (unaffected, semver)
≥ 5.15.203; ≤ 5.15.* (unaffected, semver)
≥ 6.1.168; ≤ 6.1.* (unaffected, semver)
≥ 6.6.134; ≤ 6.6.* (unaffected, semver)
≥ 6.12.81; ≤ 6.12.* (unaffected, semver)
≥ 6.18.21; ≤ 6.18.* (unaffected, semver)
≥ 6.19.11; ≤ 6.19.* (unaffected, semver)
≥ 7.0; ≤ * (unaffected, original_commit_for_fix)
Other versions: affected
CNA: Linux
SIMATIC S7-1500 CPU 1518-4 PN/DP MFP
Siemens
≥ V3.1.6; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP
SIMATIC S7-1500 CPU 1518-4 PN/DP MFP
Siemens
≥ V3.1.5; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP
SIMATIC S7-1500 CPU 1518-4 PN/DP MFP
Siemens
≥ V3.1.7; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP
SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP
Siemens
≥ V3.1.6; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP
SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP
Siemens
≥ V3.1.5; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP
SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP
Siemens
≥ V3.1.7; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP
SIPLUS S7-1500 CPU 1518-4 PN/DP MFP
Siemens
≥ V3.1.6; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP
SIPLUS S7-1500 CPU 1518-4 PN/DP MFP
Siemens
≥ V3.1.5; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP
SIPLUS S7-1500 CPU 1518-4 PN/DP MFP
Siemens
≥ V3.1.7; < * (affected, custom)
Other versions: unknown
ADP: siemens-SADP

Version ranges are source assertions. Check the vendor advisory and your installed configuration before determining exposure.

CVSS assessments

No CVSS assessment reported. An unscored record is not a low-severity determination.

Exploit evidence

No exploit evidence in collected sources. This is not proof of no exploitation.

References

For agents and automation

Read public disclosures for free as Markdown or JSON. Compatible browsers also expose native WebMCP tools to search disclosures, read this page, and discover API access.

Use the ontology-linked Cyber API with x402 pay per request, or a Y2 Pro or Elite API key with the intel:cyber scope.

Endpoints and access details

https://api.y2.dev/api/v2/cyber/cves
https://api.y2.dev/api/v2/cyber/cves/{cveId}

A workspace owner or admin can create a Pro or Elite API key. Send Authorization: Bearer <Y2_API_KEY> from your trusted agent runtime.

For x402, omit Authorization and read the HTTP 402 payment challenge before signing a retry. Public browser tools do not make payments.

Agent access JSON · OpenAPI · CVE API guide