The AArch64 ARM architecture supports a hardware enforcement mode for mutual exclusion between code and data: any page that is mapped writable is implicitly non-executable as well.
This means that remapping part of a runtime image for reapplying relocation fixups may result in any code sharing the same page to lose its executable permissions. Let's avoid this, by moving all quantities that are subject to relocation fixups to a separate page if the build is using 64k section alignment, which is only the case when building a runtime driver for AArch64. Signed-off-by: Ard Biesheuvel <a...@kernel.org> --- BaseTools/Scripts/GccBase.lds | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/BaseTools/Scripts/GccBase.lds b/BaseTools/Scripts/GccBase.lds index 83cebd29d599..63e097e0727c 100644 --- a/BaseTools/Scripts/GccBase.lds +++ b/BaseTools/Scripts/GccBase.lds @@ -21,9 +21,8 @@ SECTIONS { . = PECOFF_HEADER_SIZE; .text : ALIGN(CONSTANT(COMMONPAGESIZE)) { - *(.text .text.* .stub .gnu.linkonce.t.*) + *(.text .text.* .stub .gnu.linkonce.t.* .plt) *(.rodata .rodata.* .gnu.linkonce.r.*) - *(.got .got.*) /* * The contents of AutoGen.c files are mostly constant from the POV of the @@ -34,6 +33,16 @@ SECTIONS { * emitted GUIDs here. */ *:AutoGen.obj(.data.g*Guid) + + /* + * AArch64 runtime drivers use 64k alignment, and may run in a mode where + * mutual exclusion of RO and XP mappings are hardware enforced. In such + * cases, the input sections below, which carry any quantities that are + * subject to relocation fixups at runtime, must not share a 4 KiB page + * with any code content. + */ + . = ALIGN(CONSTANT(COMMONPAGESIZE) > 0x1000 ? 0x1000 : 0x20); + *(.got .got.* .data.rel.ro) } /* -- 2.39.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#100099): https://edk2.groups.io/g/devel/message/100099 Mute This Topic: https://groups.io/mt/96937494/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-