• Ard Biesheuvel's avatar
    efi/esrt: Only call efi_mem_reserve() for boot services memory · 61f0d555
    Ard Biesheuvel authored
    The following commit:
    
      7e1550b8 ("efi: Drop type and attribute checks in efi_mem_desc_lookup()")
    
    refactored the implementation of efi_mem_desc_lookup() so that the type
    check is moved to the callers, one of which is the x86 version of
    efi_arch_mem_reserve(), where we added a modified check that only takes
    EFI_BOOT_SERVICES_DATA regions into account.
    
    This is reasonable, since it is the only memory type that requires this,
    but doing so uncovered some unexpected behavior in the ESRT code, which
    permits the ESRT table to reside in other types of memory than what the
    UEFI spec mandates (i.e., EFI_BOOT_SERVICES_DATA), and unconditionally
    calls efi_mem_reserve() on the region in question. This may result in
    errors such as
    
      esrt: Reserving ESRT space from 0x000000009c810318 to 0x000000009c810350.
      efi: Failed to lookup EFI memory descriptor for 0x000000009c810318
    
    when the ESRT table is not in EFI_BOOT_SERVICES_DATA memory, but we try
    to reserve it nonetheless.
    
    So make the call to efi_mem_reserve() conditional on the memory type.
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Jones <pjones@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    61f0d555
esrt.c 10.4 KB