aboutsummaryrefslogtreecommitdiff
path: root/linux-user
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2023-07-17 22:06:02 +0200
committerHelge Deller <deller@gmx.de>2023-07-18 20:42:05 +0200
commit518f32221af759a29500ac172c4c857bef142067 (patch)
tree2f027ebea1fd43e3edb25fa23791caf256ad17ad /linux-user
parentd971040c2d16b7fda9fcd52c993262b437501538 (diff)
downloadqemu-518f32221af759a29500ac172c4c857bef142067.zip
qemu-518f32221af759a29500ac172c4c857bef142067.tar.gz
qemu-518f32221af759a29500ac172c4c857bef142067.tar.bz2
linux-user: Fix qemu-arm to run static armhf binaries
qemu-user crashes immediately when running static binaries on the armhf architecture. The problem is the memory layout where the executable is loaded before the interpreter library, in which case the reserved brk region clashes with the interpreter code and is released before qemu tries to start the program. At load time qemu calculates a brk value for interpreter and executable each. The fix is to choose the higher one of both. Signed-off-by: Helge Deller <deller@gmx.de> Cc: Andreas Schwab <schwab@suse.de> Cc: qemu-stable@nongnu.org Reported-by: Venkata.Pyla@toshiba-tsip.com Closes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1040981
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/elfload.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index a26200d..9495163 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -3615,6 +3615,13 @@ int load_elf_binary(struct linux_binprm *bprm, struct image_info *info)
if (elf_interpreter) {
load_elf_interp(elf_interpreter, &interp_info, bprm->buf);
+ /*
+ * adjust brk address if the interpreter was loaded above the main
+ * executable, e.g. happens with static binaries on armhf
+ */
+ if (interp_info.brk > info->brk) {
+ info->brk = interp_info.brk;
+ }
/* If the program interpreter is one of these two, then assume
an iBCS2 image. Otherwise assume a native linux image. */