Skip to content
  • Ard Biesheuvel's avatar
    arm64: kaslr: increase randomization granularity · 6f26b367
    Ard Biesheuvel authored
    
    
    Currently, our KASLR implementation randomizes the placement of the core
    kernel at 2 MB granularity. This is based on the arm64 kernel boot
    protocol, which mandates that the kernel is loaded TEXT_OFFSET bytes above
    a 2 MB aligned base address. This requirement is a result of the fact that
    the block size used by the early mapping code may be 2 MB at the most (for
    a 4 KB granule kernel)
    
    But we can do better than that: since a KASLR kernel needs to be relocated
    in any case, we can tolerate a physical misalignment as long as the virtual
    misalignment relative to this 2 MB block size is equal in size, and code to
    deal with this is already in place.
    
    Since we align the kernel segments to 64 KB, let's randomize the physical
    offset at 64 KB granularity as well (unless CONFIG_DEBUG_ALIGN_RODATA is
    enabled). This way, the page table and TLB footprint is not affected.
    
    The higher granularity allows for 5 bits of additional entropy to be used.
    
    Reviewed-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    6f26b367