arm64: kaslr: Adjust randomization range dynamically
authorArd Biesheuvel <ardb@kernel.org>
Wed, 13 Dec 2023 08:40:32 +0000 (09:40 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 9 Feb 2024 10:56:12 +0000 (10:56 +0000)
commit3567fa63cb5680d3e1e8375c547a0e305c8a0ff5
tree3f212eb24c06bac296572694e80943bbd462f0dc
parentd432b8d57c0c41873f1b8743203776baeb5778b6
arm64: kaslr: Adjust randomization range dynamically

Currently, we base the KASLR randomization range on a rough estimate of
the available space in the upper VA region: the lower 1/4th has the
module region and the upper 1/4th has the fixmap, vmemmap and PCI I/O
ranges, and so we pick a random location in the remaining space in the
middle.

Once we enable support for 5-level paging with 4k pages, this no longer
works: the vmemmap region, being dimensioned to cover a 52-bit linear
region, takes up so much space in the upper VA region (the size of which
is based on a 48-bit VA space for compatibility with non-LVA hardware)
that the region above the vmalloc region takes up more than a quarter of
the available space.

So instead of a heuristic, let's derive the randomization range from the
actual boundaries of the vmalloc region.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20231213084024.2367360-16-ardb@google.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
arch/arm64/kernel/image-vars.h
arch/arm64/kernel/pi/kaslr_early.c