lkml.org 
[lkml]   [2018]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 075/235] efi/arm: preserve early mapping of UEFI memory map longer for BGRT
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Ard Biesheuvel <ard.biesheuvel@linaro.org>

    [ Upstream commit 3ea86495aef2f6de26b7cb1599ba350dd6a0c521 ]

    The BGRT code validates the contents of the table against the UEFI
    memory map, and so it expects it to be mapped when the code runs.

    On ARM, this is currently not the case, since we tear down the early
    mapping after efi_init() completes, and only create the permanent
    mapping in arm_enable_runtime_services(), which executes as an early
    initcall, but still leaves a window where the UEFI memory map is not
    mapped.

    So move the call to efi_memmap_unmap() from efi_init() to
    arm_enable_runtime_services().

    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    [will: fold in EFI_MEMMAP attribute check from Ard]
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/firmware/efi/arm-init.c | 1 -
    drivers/firmware/efi/arm-runtime.c | 4 +++-
    2 files changed, 3 insertions(+), 2 deletions(-)

    --- a/drivers/firmware/efi/arm-init.c
    +++ b/drivers/firmware/efi/arm-init.c
    @@ -259,7 +259,6 @@ void __init efi_init(void)

    reserve_regions();
    efi_esrt_init();
    - efi_memmap_unmap();

    memblock_reserve(params.mmap & PAGE_MASK,
    PAGE_ALIGN(params.mmap_size +
    --- a/drivers/firmware/efi/arm-runtime.c
    +++ b/drivers/firmware/efi/arm-runtime.c
    @@ -110,11 +110,13 @@ static int __init arm_enable_runtime_ser
    {
    u64 mapsize;

    - if (!efi_enabled(EFI_BOOT)) {
    + if (!efi_enabled(EFI_BOOT) || !efi_enabled(EFI_MEMMAP)) {
    pr_info("EFI services will not be available.\n");
    return 0;
    }

    + efi_memmap_unmap();
    +
    if (efi_runtime_disabled()) {
    pr_info("EFI runtime services will be disabled.\n");
    return 0;

    \
     
     \ /
      Last update: 2018-09-24 14:49    [W:4.614 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site