• Benjamin Herrenschmidt's avatar
    arm64: efi: kaslr: Fix occasional random alloc (and boot) failure · 4152433c
    Benjamin Herrenschmidt authored
    The EFI stub random allocator used for kaslr on arm64 has a subtle
    bug. In function get_entry_num_slots() which counts the number of
    possible allocation "slots" for the image in a given chunk of free
    EFI memory, "last_slot" can become negative if the chunk is smaller
    than the requested allocation size.
    
    The test "if (first_slot > last_slot)" doesn't catch it because
    both first_slot and last_slot are unsigned.
    
    I chose not to make them signed to avoid problems if this is ever
    used on architectures where there are meaningful addresses with the
    top bit set. Instead, fix it with an additional test against the
    allocation size.
    
    This can cause a boot failure in addition to a loss of randomisation
    due to another bug in the arm64 stub fixed separately.
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    Fixes: 2ddbfc81 ("efi: stub: add implementation of efi_random_alloc()")
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    4152433c
randomalloc.c 3.52 KB