CVE-2025-37922 Information
Description
In the Linux kernel the following vulnerability has been resolved:
book3s64/radix : Align section vmemmap start address to PAGE_SIZE
A vmemmap altmap is a device-provided region used to provide backing storage for struct pages. For each namespace the altmap should belong to that same namespace. If the namespaces are created unaligned there is a chance that the section vmemmap start address could also be unaligned. If the section vmemmap start address is unaligned the altmap page allocated from the current namespace might be used by the previous namespace also. During the free operation since the altmap is shared between two namespaces the previous namespace may detect that the page does not belong to its altmap and incorrectly assume that the page is a normal page. It then attempts to free the normal page which leads to a kernel crash.
Kernel attempted to read user page (18) - exploit attempt? (uid: 0)
BUG: Kernel NULL pointer dereference on read at 0x00000018
Faulting instruction address: 0xc000000000530c7c
Oops: Kernel access of bad area sig: 11 [1]
LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA pSeries
CPU: 32 PID: 2104 Comm: ndctl Kdump: loaded Tainted: G W
NIP: c000000000530c7c LR: c000000000530e00 CTR: 0000000000007ffe
REGS: c000000015e57040 TRAP: 0300 Tainted: G W
MSR: 800000000280b033
Another issue is that if there is no altmap a PMD-sized vmemmap page will be allocated from RAM regardless of the alignment of the section start address. If the section start address is not aligned to the PMD size a VM_BUG_ON will be triggered when setting the PMD-sized page to page table.
In this patch we are aligning the section vmemmap start address to PAGE_SIZE. After alignment the start address will not be part of the current namespace and a normal page will be allocated for the vmemmap mapping of the current section. For the remaining sections altmaps will be allocated. During the free operation the normal page will be correctly freed.
In the same way a PMD_SIZE vmemmap page will be allocated only if the section start address is PMD_SIZE-aligned; otherwise it will fall back to a PAGE-sized vmemmap allocation.
Without this patch
NS1 start NS2 start
| NS1 | NS2 |
| Altmap| Altmap | …..|Altmap| Altmap | ……….. | NS1 | NS1
truncated—
Reference
https://git.kernel.org/stable/c/400be767deaf31a073c6d14c5d151ae5ac2a60e2 https://git.kernel.org/stable/c/7f5476d80f2cb364701cd1fa138a14b241ca99e9 https://git.kernel.org/stable/c/9a8d4d7072d4df108479b1adc4b0840e96f6f61d https://git.kernel.org/stable/c/9cf7e13fecbab0894f6986fc6986ab2eba8de52e
Share on: