CVE-2025-40199
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
12/11/2025
Last modified:
12/11/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
page_pool: Fix PP_MAGIC_MASK to avoid crashing on some 32-bit arches<br />
<br />
Helge reported that the introduction of PP_MAGIC_MASK let to crashes on<br />
boot on his 32-bit parisc machine. The cause of this is the mask is set<br />
too wide, so the page_pool_page_is_pp() incurs false positives which<br />
crashes the machine.<br />
<br />
Just disabling the check in page_pool_is_pp() will lead to the page_pool<br />
code itself malfunctioning; so instead of doing this, this patch changes<br />
the define for PP_DMA_INDEX_BITS to avoid mistaking arbitrary kernel<br />
pointers for page_pool-tagged pages.<br />
<br />
The fix relies on the kernel pointers that alias with the pp_magic field<br />
always being above PAGE_OFFSET. With this assumption, we can use the<br />
lowest bit of the value of PAGE_OFFSET as the upper bound of the<br />
PP_DMA_INDEX_MASK, which should avoid the false positives.<br />
<br />
Because we cannot rely on PAGE_OFFSET always being a compile-time<br />
constant, nor on it always being >0, we fall back to disabling the<br />
dma_index storage when there are not enough bits available. This leaves<br />
us in the situation we were in before the patch in the Fixes tag, but<br />
only on a subset of architecture configurations. This seems to be the<br />
best we can do until the transition to page types in complete for<br />
page_pool pages.<br />
<br />
v2:<br />
- Make sure there&#39;s at least 8 bits available and that the PAGE_OFFSET<br />
bit calculation doesn&#39;t wrap



