[PATCH v3 2/4] arm64: Trap PIE builds early if load address is not 4K aligned
Edgar E. Iglesias
edgar.iglesias at gmail.com
Wed Sep 9 19:07:25 CEST 2020
From: "Edgar E. Iglesias" <edgar.iglesias at xilinx.com>
PIE requires a 4K aligned load address. If this is not met, trap
the startup sequence in a WFI loop rather than running into obscure
failures.
Tested-by: Michal Simek <michal.simek at xilinx.com>
Suggested-by: André Przywara <andre.przywara at arm.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias at xilinx.com>
---
arch/arm/cpu/armv8/start.S | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
index 002698b501..85baebc5f7 100644
--- a/arch/arm/cpu/armv8/start.S
+++ b/arch/arm/cpu/armv8/start.S
@@ -59,6 +59,23 @@ reset:
save_boot_params_ret:
#if CONFIG_POSITION_INDEPENDENT
+ /* Verify that we're 4K aligned. */
+ adr x0, _start
+ ands x0, x0, #0xfff
+ b.eq 1f
+0:
+ /*
+ * FATAL, can't continue.
+ * U-Boot needs to be loaded at a 4K aligned address.
+ *
+ * We use ADRP and ADD to load some symbol addresses during startup.
+ * The ADD uses an absolute (non pc-relative) lo12 relocation
+ * thus requiring 4K alignment.
+ */
+ wfi
+ b 0b
+1:
+
/*
* Fix .rela.dyn relocations. This allows U-Boot to be loaded to and
* executed at a different address than it was linked at.
--
2.25.1
More information about the U-Boot
mailing list