CVE-2026-23100
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
04/02/2026
Last modified:
04/02/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
mm/hugetlb: fix hugetlb_pmd_shared()<br />
<br />
Patch series "mm/hugetlb: fixes for PMD table sharing (incl. using<br />
mmu_gather)", v3.<br />
<br />
One functional fix, one performance regression fix, and two related<br />
comment fixes.<br />
<br />
I cleaned up my prototype I recently shared [1] for the performance fix,<br />
deferring most of the cleanups I had in the prototype to a later point. <br />
While doing that I identified the other things.<br />
<br />
The goal of this patch set is to be backported to stable trees "fairly"<br />
easily. At least patch #1 and #4.<br />
<br />
Patch #1 fixes hugetlb_pmd_shared() not detecting any sharing<br />
Patch #2 + #3 are simple comment fixes that patch #4 interacts with.<br />
Patch #4 is a fix for the reported performance regression due to excessive<br />
IPI broadcasts during fork()+exit().<br />
<br />
The last patch is all about TLB flushes, IPIs and mmu_gather.<br />
Read: complicated<br />
<br />
There are plenty of cleanups in the future to be had + one reasonable<br />
optimization on x86. But that&#39;s all out of scope for this series.<br />
<br />
Runtime tested, with a focus on fixing the performance regression using<br />
the original reproducer [2] on x86.<br />
<br />
<br />
This patch (of 4):<br />
<br />
We switched from (wrongly) using the page count to an independent shared<br />
count. Now, shared page tables have a refcount of 1 (excluding<br />
speculative references) and instead use ptdesc->pt_share_count to identify<br />
sharing.<br />
<br />
We didn&#39;t convert hugetlb_pmd_shared(), so right now, we would never<br />
detect a shared PMD table as such, because sharing/unsharing no longer<br />
touches the refcount of a PMD table.<br />
<br />
Page migration, like mbind() or migrate_pages() would allow for migrating<br />
folios mapped into such shared PMD tables, even though the folios are not<br />
exclusive. In smaps we would account them as "private" although they are<br />
"shared", and we would be wrongly setting the PM_MMAP_EXCLUSIVE in the<br />
pagemap interface.<br />
<br />
Fix it by properly using ptdesc_pmd_is_shared() in hugetlb_pmd_shared().



