arm64: Enable RW, RX and RO mappings for the relocated binary
authorIlias Apalodimas <ilias.apalodimas@linaro.org>
Thu, 20 Feb 2025 13:54:43 +0000 (15:54 +0200)
committerIlias Apalodimas <ilias.apalodimas@linaro.org>
Fri, 14 Mar 2025 11:37:54 +0000 (13:37 +0200)
commitfb553201b67aededdc794f3a0880e386771cbd58
tree3050611012b20a57a1e08e1d1d399ae1d6ac2499
parentec1c6cfb1cfce92909a248f10c36bd8b18894d7e
arm64: Enable RW, RX and RO mappings for the relocated binary

Now that we have everything in place switch the page permissions for
.rodata, .text and .data just after we relocate everything in top of the
RAM.

Unfortunately we can't enable this by default, since we have examples of
U-Boot crashing due to invalid access. This usually happens because code
defines const variables that it later writes. So hide it behind a Kconfig
option until we sort it out.

It's worth noting that EFI runtime services are not covered by this
patch on purpose. Since the OS can call SetVirtualAddressMap which can
relocate runtime services, we need to set them to RX initially but remap
them as RWX right before ExitBootServices.

Link: https://lore.kernel.org/u-boot/20250129-rockchip-pinctrl-const-v1-0-450ccdadfa7e@cherry.de/
Link: https://lore.kernel.org/u-boot/20250130133646.2177194-1-andre.przywara@arm.com/
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
common/Kconfig
common/board_r.c