CVE-2025-40199

CVE-2025-40199

High · published November 13, 2025

CVSS v3.1
7.8
EPSS
0%
Percentile
3.9
In the wild
Unconfirmed
What it is

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

page_pool: Fix PP_MAGIC_MASK to avoid crashing on some 32-bit arches

Helge reported that the introduction of PP_MAGIC_MASK let to crashes on

boot on his 32-bit parisc machine. The cause of this is the mask is set

too wide, so the page_pool_page_is_pp() incurs false positives which

crashes the machine.

Just disabling the check in page_pool_is_pp() will lead to the page_pool

code itself malfunctioning; so instead of doing this, this patch changes

the define for PP_DMA_INDEX_BITS to avoid mistaking arbitrary kernel

pointers for page_pool-tagged pages.

The fix relies on the kernel pointers that alias with the pp_magic field

always being above PAGE_OFFSET. With this assumption, we can use the

lowest bit of the value of PAGE_OFFSET as the upper bound of the

PP_DMA_INDEX_MASK, which should avoid the false positives.

Because we cannot rely on PAGE_OFFSET always being a compile-time

constant, nor on it always being >0, we fall back to disabling the

dma_index storage when there are not enough bits available. This leaves

us in the situation we were in before the patch in the Fixes tag, but

only on a subset of architecture configurations. This seems to be the

best we can do until the transition to page types in complete for

page_pool pages.

v2:

- Make sure there's at least 8 bits available and that the PAGE_OFFSET

bit calculation doesn't wrap

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00151 · 3.9th percentile
Published
2025-11-13T03:15Z
References (3)
EPSS history
Timeline
  • 12 NOV 21:56Z
    page_pool: Fix PP_MAGIC_MASK to avoid crashing on some 32-bit arches
    cvelistv5