Skip to content
  • Matt Fleming's avatar
    x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE · 92dc3350
    Matt Fleming authored
    Mike Galbraith reported that his machine started rebooting during boot
    after,
    
      commit 8e80632f
    
     ("efi/esrt: Use efi_mem_reserve() and avoid a kmalloc()")
    
    The ESRT table on his machine is 56 bytes and at no point in the
    efi_arch_mem_reserve() call path is that size rounded up to
    EFI_PAGE_SIZE, nor is the start address on an EFI_PAGE_SIZE boundary.
    
    Since the EFI memory map only deals with whole pages, inserting an EFI
    memory region with 56 bytes results in a new entry covering zero
    pages, and completely screws up the calculations for the old regions
    that were trimmed.
    
    Round all sizes upwards, and start addresses downwards, to the nearest
    EFI_PAGE_SIZE boundary.
    
    Additionally, efi_memmap_insert() expects the mem::range::end value to
    be one less than the end address for the region.
    
    Reported-by: default avatarMike Galbraith <umgwanakikbuti@gmail.com>
    Reported-by: default avatarMike Krinkin <krinkin.m.u@gmail.com>
    Tested-by: default avatarMike Krinkin <krinkin.m.u@gmail.com>
    Cc: Peter Jones <pjones@redhat.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Taku Izumi <izumi.taku@jp.fujitsu.com>
    Signed-off-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    92dc3350