• Ard Biesheuvel's avatar
    efi/arm: Clean EFI stub exit code from cache instead of avoiding it · 0698fac4
    Ard Biesheuvel authored
    The following commit:
    
      c7225494 ("efi/arm: Work around missing cache maintenance in decompressor handover")
    
    modified the EFI handover code written in assembler to work around the
    missing cache maintenance of the piece of code that is executed after the
    MMU and caches are turned off.
    
    Due to the fact that this sequence incorporates a subroutine call, cleaning
    that code from the cache is not a matter of simply passing the start and end of
    the currently running subroutine into cache_clean_flush(), which is why
    instead, the code jumps across into the cleaned copy of the image.
    
    However, this assumes that this copy is executable, and this means we
    expect EFI_LOADER_DATA regions to be executable as well, which is not
    a reasonable assumption to make, even if this is true for most UEFI
    implementations today.
    
    So change this back, and add a cache_clean_flush() call to cover the
    remaining code in the subroutine, and any code it may execute in the
    context of cache_off().
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: linux-efi@vger.kernel.org
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Link: https://lore.kernel.org/r/20200228121408.9075-5-ardb@kernel.org
    0698fac4
head.S 37.1 KB