• Mark Rutland's avatar
    arm64: efi: Fix stub cache maintenance · d856a4f7
    Mark Rutland authored
    commit 9b0b2658 upstream.
    
    While efi-entry.S mentions that efi_entry() will have relocated the
    kernel image, it actually means that efi_entry will have placed a copy
    of the kernel in the appropriate location, and until this is branched to
    at the end of efi_entry.S, all instructions are executed from the
    original image.
    
    Thus while the flush in efi_entry.S does ensure that the copy is visible
    to noncacheable accesses, it does not guarantee that this is true for
    the image instructions are being executed from. This could have
    disasterous effects when the MMU and caches are disabled if the image
    has not been naturally evicted to the PoC.
    
    Additionally, due to a missing dsb following the ic ialluis, the new
    kernel image is not necessarily clean in the I-cache when it is branched
    to, with similar potentially disasterous effects.
    
    This patch adds additional flushing to ensure that the currently
    executing stub text is flushed to the PoC and is thus visible to
    noncacheable accesses. As it is placed after the instructions cache
    maintenance for the new image and __flush_dcache_area already contains a
    dsb, we do not need to add a separate barrier to ensure completion of
    the icache maintenance.
    
    Comments are updated to clarify the situation with regard to the two
    images and the maintenance required for both.
    
    Fixes: 3c7f2550Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarJoel Schopp <joel.schopp@amd.com>
    Reviewed-by: default avatarRoy Franz <roy.franz@linaro.org>
    Tested-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Ian Campbell <ijc@hellion.org.uk>
    Cc: Leif Lindholm <leif.lindholm@linaro.org>
    Cc: Mark Salter <msalter@redhat.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    d856a4f7
efi-entry.S 2.88 KB