[PATCH 1/1] efi_loader: make .data section of *_efi.so files RW

When building with binutils 2.39 warnings
*_efi.so has a LOAD segment with RWX permissions
occur.
Use SHF_WRITE | SHF_ALLOC as section flags for the .data section.
Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com --- arch/arm/lib/elf_aarch64_efi.lds | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/arm/lib/elf_aarch64_efi.lds b/arch/arm/lib/elf_aarch64_efi.lds index ffc6f6e604..3e3da47d6a 100644 --- a/arch/arm/lib/elf_aarch64_efi.lds +++ b/arch/arm/lib/elf_aarch64_efi.lds @@ -7,6 +7,12 @@
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") OUTPUT_ARCH(aarch64) + +PHDRS +{ + data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */ +} + ENTRY(_start) SECTIONS { @@ -49,7 +55,7 @@ SECTIONS . = ALIGN(512); _bss_end = .; _edata = .; - } + } :data _data_size = _edata - _data; .rela.dyn : { *(.rela.dyn) } .rela.plt : { *(.rela.plt) }

Hi Heinrich
On Wed, Jan 04, 2023 at 11:43:08PM +0100, Heinrich Schuchardt wrote:
When building with binutils 2.39 warnings
*_efi.so has a LOAD segment with RWX permissions
occur.
Use SHF_WRITE | SHF_ALLOC as section flags for the .data section.
Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com
arch/arm/lib/elf_aarch64_efi.lds | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/arm/lib/elf_aarch64_efi.lds b/arch/arm/lib/elf_aarch64_efi.lds index ffc6f6e604..3e3da47d6a 100644 --- a/arch/arm/lib/elf_aarch64_efi.lds +++ b/arch/arm/lib/elf_aarch64_efi.lds @@ -7,6 +7,12 @@
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") OUTPUT_ARCH(aarch64)
+PHDRS +{
- data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */
+}
ENTRY(_start) SECTIONS { @@ -49,7 +55,7 @@ SECTIONS . = ALIGN(512); _bss_end = .; _edata = .;
- }
- } :data
Is this only to signal the end of the .data section? If so let's get rid of it since no other section has that
_data_size = _edata - _data; .rela.dyn : { *(.rela.dyn) } .rela.plt : { *(.rela.plt) } -- 2.37.2
other than that Reviewed-by: Ilias Apalodimas ilias.apalodimas@linaro.org

On 1/5/23 10:12, Ilias Apalodimas wrote:
Hi Heinrich
On Wed, Jan 04, 2023 at 11:43:08PM +0100, Heinrich Schuchardt wrote:
When building with binutils 2.39 warnings
*_efi.so has a LOAD segment with RWX permissions
occur.
Use SHF_WRITE | SHF_ALLOC as section flags for the .data section.
Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com
arch/arm/lib/elf_aarch64_efi.lds | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/arm/lib/elf_aarch64_efi.lds b/arch/arm/lib/elf_aarch64_efi.lds index ffc6f6e604..3e3da47d6a 100644 --- a/arch/arm/lib/elf_aarch64_efi.lds +++ b/arch/arm/lib/elf_aarch64_efi.lds @@ -7,6 +7,12 @@
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") OUTPUT_ARCH(aarch64)
+PHDRS +{
- data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */
+}
- ENTRY(_start) SECTIONS {
@@ -49,7 +55,7 @@ SECTIONS . = ALIGN(512); _bss_end = .; _edata = .;
- }
- } :data
Is this only to signal the end of the .data section? If so let's get rid of it since no other section has that
:data is the reference to PHDRS entry data.
Best regards
Heinrich
_data_size = _edata - _data; .rela.dyn : { *(.rela.dyn) } .rela.plt : { *(.rela.plt) } -- 2.37.2
other than that Reviewed-by: Ilias Apalodimas ilias.apalodimas@linaro.org

On 1/5/23 10:59, Heinrich Schuchardt wrote:
On 1/5/23 10:12, Ilias Apalodimas wrote:
Hi Heinrich
On Wed, Jan 04, 2023 at 11:43:08PM +0100, Heinrich Schuchardt wrote:
When building with binutils 2.39 warnings
*_efi.so has a LOAD segment with RWX permissions
occur.
Use SHF_WRITE | SHF_ALLOC as section flags for the .data section.
Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com
arch/arm/lib/elf_aarch64_efi.lds | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/arm/lib/elf_aarch64_efi.lds b/arch/arm/lib/elf_aarch64_efi.lds index ffc6f6e604..3e3da47d6a 100644 --- a/arch/arm/lib/elf_aarch64_efi.lds +++ b/arch/arm/lib/elf_aarch64_efi.lds @@ -7,6 +7,12 @@ OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") OUTPUT_ARCH(aarch64)
+PHDRS +{ + data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */ +}
ENTRY(_start) SECTIONS { @@ -49,7 +55,7 @@ SECTIONS . = ALIGN(512); _bss_end = .; _edata = .; - } + } :data
Is this only to signal the end of the .data section? If so let's get rid of it since no other section has that
:data is the reference to PHDRS entry data.
Best regards
Heinrich
_data_size = _edata - _data; .rela.dyn : { *(.rela.dyn) } .rela.plt : { *(.rela.plt) } -- 2.37.2
other than that Reviewed-by: Ilias Apalodimas ilias.apalodimas@linaro.org
As Benjamin Herrenschmidt pointed out aligning sections on 64KiB boundaries would be an alternative way of silencing the linker's RWX warnings. But I would not want helloworld.efi to be 128 KiB large.
Best regards
Heinrich
participants (2)
-
Heinrich Schuchardt
-
Ilias Apalodimas