CVE-2026-31466
EUVD-2026-2481122.04.2026, 14:16
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().
[tujinjiang@huawei.com: update function name and comments]Affected Products (NVD)
| Vendor | Product | Version |
|---|---|---|
| linux | linux_kernel | 4.5 ≤ 𝑥 < 5.10.253 |
| linux | linux_kernel | 5.11 ≤ 𝑥 < 5.15.203 |
| linux | linux_kernel | 5.16 ≤ 𝑥 < 6.1.168 |
| linux | linux_kernel | 6.2 ≤ 𝑥 < 6.6.134 |
| linux | linux_kernel | 6.7 ≤ 𝑥 < 6.12.81 |
| linux | linux_kernel | 6.13 ≤ 𝑥 < 6.18.21 |
| linux | linux_kernel | 6.19 ≤ 𝑥 < 6.19.11 |
| linux | linux_kernel | 7.0:rc1 |
| linux | linux_kernel | 7.0:rc2 |
| linux | linux_kernel | 7.0:rc3 |
| linux | linux_kernel | 7.0:rc4 |
| linux | linux_kernel | 7.0:rc5 |
𝑥
= Vulnerable software versions
Early Detection
Affected products identified ahead of NVD analysis through intelligence sources.
| Vendor | Product | Version | Source |
|---|---|---|---|
| Siemens | SIMATIC S7-1500 CPU 1518-4 PN/DP MFP | V3.1.6 ≤ 𝑥 < * | ADP |
| Siemens | SIMATIC S7-1500 CPU 1518-4 PN/DP MFP | V3.1.5 ≤ 𝑥 < * | ADP |
| Siemens | SIMATIC S7-1500 CPU 1518-4 PN/DP MFP | V3.1.6 ≤ 𝑥 < * | ADP |
| Siemens | SIMATIC S7-1500 CPU 1518-4 PN/DP MFP | V3.1.5 ≤ 𝑥 < * | ADP |
| Siemens | SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP | V3.1.6 ≤ 𝑥 < * | ADP |
| Siemens | SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP | V3.1.5 ≤ 𝑥 < * | ADP |
| Siemens | SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP | V3.1.6 ≤ 𝑥 < * | ADP |
| Siemens | SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP | V3.1.5 ≤ 𝑥 < * | ADP |
| Siemens | SIPLUS S7-1500 CPU 1518-4 PN/DP MFP | V3.1.6 ≤ 𝑥 < * | ADP |
| Siemens | SIPLUS S7-1500 CPU 1518-4 PN/DP MFP | V3.1.5 ≤ 𝑥 < * | ADP |
Debian Releases
openSUSE / SLES Releases
openSUSE Product | |||||||
|---|---|---|---|---|---|---|---|
| kernel-64kb |
| ||||||
| kernel-default |
| ||||||
| kernel-default-base |
| ||||||
| kernel-obs-build |
| ||||||
| kernel-source |
| ||||||
| kernel-zfcpdump |
|
Amazon Linux Releases
Amazon Package | |||
|---|---|---|---|
| bpftool |
| ||
| bpftool-debuginfo |
| ||
| bpftool6.12 |
| ||
| bpftool6.12-debuginfo |
| ||
| bpftool6.18 |
| ||
| bpftool6.18-debuginfo |
| ||
| kernel |
| ||
| kernel-debuginfo |
| ||
| kernel-debuginfo-common-aarch64 |
| ||
| kernel-debuginfo-common-x86_64 |
| ||
| kernel-devel |
| ||
| kernel-headers |
| ||
| kernel-libbpf |
| ||
| kernel-libbpf-debuginfo |
| ||
| kernel-libbpf-devel |
| ||
| kernel-libbpf-static |
| ||
| kernel-livepatch-6.1.168-202.320 |
| ||
| kernel-livepatch-6.12.83-113.160 |
| ||
| kernel-livepatch-6.18.25-52.107 |
| ||
| kernel-modules-extra |
| ||
| kernel-modules-extra-common |
| ||
| kernel-tools |
| ||
| kernel-tools-debuginfo |
| ||
| kernel-tools-devel |
| ||
| kernel6.12 |
| ||
| kernel6.12-debuginfo |
| ||
| kernel6.12-debuginfo-common-aarch64 |
| ||
| kernel6.12-debuginfo-common-x86_64 |
| ||
| kernel6.12-devel |
| ||
| kernel6.12-headers |
| ||
| kernel6.12-modules-extra |
| ||
| kernel6.12-modules-extra-common |
| ||
| kernel6.12-tools |
| ||
| kernel6.12-tools-debuginfo |
| ||
| kernel6.12-tools-devel |
| ||
| kernel6.18 |
| ||
| kernel6.18-debuginfo |
| ||
| kernel6.18-debuginfo-common-aarch64 |
| ||
| kernel6.18-debuginfo-common-x86_64 |
| ||
| kernel6.18-devel |
| ||
| kernel6.18-headers |
| ||
| kernel6.18-modules-extra |
| ||
| kernel6.18-modules-extra-common |
| ||
| kernel6.18-tools |
| ||
| kernel6.18-tools-debuginfo |
| ||
| kernel6.18-tools-devel |
| ||
| perf |
| ||
| perf-debuginfo |
| ||
| perf6.12 |
| ||
| perf6.12-debuginfo |
| ||
| perf6.18 |
| ||
| perf6.18-debuginfo |
| ||
| python3-perf |
| ||
| python3-perf-debuginfo |
| ||
| python3-perf6.12 |
| ||
| python3-perf6.12-debuginfo |
| ||
| python3-perf6.18 |
| ||
| python3-perf6.18-debuginfo |
|
References