Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

arm64: mm: check at build time that PAGE_OFFSET divides the VA space evenly

Commit 8439e62a1561 ("arm64: mm: use bit ops rather than arithmetic in
pa/va translations") changed the boundary check against PAGE_OFFSET from
an arithmetic comparison to a bit test. This means we now silently assume
that PAGE_OFFSET is a power of 2 that divides the kernel virtual address
space into two equal halves. So make that assumption explicit.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>

authored by

Ard Biesheuvel and committed by
Catalin Marinas
6d2aa549 22b39ca3

+7
+7
arch/arm64/mm/init.c
··· 171 171 const s64 linear_region_size = -(s64)PAGE_OFFSET; 172 172 173 173 /* 174 + * Ensure that the linear region takes up exactly half of the kernel 175 + * virtual address space. This way, we can distinguish a linear address 176 + * from a kernel/module/vmalloc address by testing a single bit. 177 + */ 178 + BUILD_BUG_ON(linear_region_size != BIT(VA_BITS - 1)); 179 + 180 + /* 174 181 * Select a suitable value for the base of physical memory. 175 182 */ 176 183 memstart_addr = round_down(memblock_start_of_DRAM(),