From bd4c1685e7e871405c3c94365dfc61786dd2001e Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Wed, 20 Sep 2023 05:46:05 +0200 Subject: linux: update to 6.1.53, remove 6.4 --- .../armnommu-fix-elf-fdpic-personality.patch | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 target/linux/patches/6.1.53/armnommu-fix-elf-fdpic-personality.patch (limited to 'target/linux/patches/6.1.53/armnommu-fix-elf-fdpic-personality.patch') diff --git a/target/linux/patches/6.1.53/armnommu-fix-elf-fdpic-personality.patch b/target/linux/patches/6.1.53/armnommu-fix-elf-fdpic-personality.patch new file mode 100644 index 000000000..78b1a10ff --- /dev/null +++ b/target/linux/patches/6.1.53/armnommu-fix-elf-fdpic-personality.patch @@ -0,0 +1,54 @@ +From ab7647c2b04501297c50ce7cdb6f6895b9582d22 Mon Sep 17 00:00:00 2001 +From: Greg Ungerer +Date: Fri, 21 Apr 2023 00:21:38 +1000 +Subject: [PATCH] fs: binfmt_elf_efpic: fix personality for fdpic ELF + +The elf-fdpic loader hard sets the process personality to either +PER_LINUX_FDPIC for true elf-fdpic binaries or to PER_LINUX for +normal ELF binaries (in this case they would be constant displacement +compiled with -pie for example). The problem with that is that it +will lose any other bits that may be in the ELF header personality +(such as the "bug emulation" bits). + +On the ARM architecture the ADDR_LIMIT_32BIT flag is used to signify +a normal 32bit binary - as opposed to a legacy 26bit address binary. +This matters since start_thread() will set the ARM CPSR register as +required based on this flag. If the elf-fdpic loader loses this bit +the process will be mis-configured and crash out pretty quickly. + +Modify elf-fdpic loaders personality setting binaries so that it +preserves the upper three bytes by using the SET_PERSONALITY macro +to set it. This macro in the generic case sets PER_LINUX and preserves +the upper bytes. Architectures can override this for their specific +use case, and ARM does exactly this. + +The problem shows up quite easily runing under qemu, but not necessarily +on all types of real ARM hardware. If the underlying ARM processor does +not support the legacy 26-bit addressing mode then everyting will work +as expected. + +Signed-off-by: Greg Ungerer +--- + fs/binfmt_elf_fdpic.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c +index a05eafcacfb2..f29ae1d96fd7 100644 +--- a/fs/binfmt_elf_fdpic.c ++++ b/fs/binfmt_elf_fdpic.c +@@ -345,10 +345,9 @@ + /* there's now no turning back... the old userspace image is dead, + * defunct, deceased, etc. + */ ++ SET_PERSONALITY(exec_params.hdr); + if (elf_check_fdpic(&exec_params.hdr)) +- set_personality(PER_LINUX_FDPIC); +- else +- set_personality(PER_LINUX); ++ current->personality |= PER_LINUX_FDPIC; + if (elf_read_implies_exec(&exec_params.hdr, executable_stack)) + current->personality |= READ_IMPLIES_EXEC; + +-- +2.25.1 + -- cgit v1.2.3