]> git.baikalelectronics.ru Git - kernel.git/commit
efi/arm: Work around missing cache maintenance in decompressor handover
authorArd Biesheuvel <ardb@kernel.org>
Tue, 18 Feb 2020 11:34:05 +0000 (12:34 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Sat, 22 Feb 2020 18:04:54 +0000 (19:04 +0100)
commit460136ab49498ff8e83c4205b2f401a9bc7634da
tree42feaf1e3e703f56a1f3fedd8fb20d9196cbf277
parent900abd43b6d837ba70928a9ee9599ba3be1d2fb6
efi/arm: Work around missing cache maintenance in decompressor handover

The EFI stub executes within the context of the zImage as it was
loaded by the firmware, which means it is treated as an ordinary
PE/COFF executable, which is loaded into memory, and cleaned to
the PoU to ensure that it can be executed safely while the MMU
and caches are on.

When the EFI stub hands over to the decompressor, we clean the caches
by set/way and disable the MMU and D-cache, to comply with the Linux
boot protocol for ARM. However, cache maintenance by set/way is not
sufficient to ensure that subsequent instruction fetches and data
accesses done with the MMU off see the correct data. This means that
proceeding as we do currently is not safe, especially since we also
perform data accesses with the MMU off, from a literal pool as well as
the stack.

So let's kick this can down the road a bit, and jump into the relocated
zImage before disabling the caches. This removes the requirement to
perform any by-VA cache maintenance on the original PE/COFF executable,
but it does require that the relocated zImage is cleaned to the PoC,
which is currently not the case. This will be addressed in a subsequent
patch.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/arm/boot/compressed/head.S