qemu-e2k/linux-user
Vincent Fazio 0266e8e3b3 linux-user/elfload: fix address calculation in fallback scenario
Previously, guest_loaddr was not taken into account when returning an
address from pgb_find_hole when /proc/self/maps was unavailable which
caused an improper guest_base address to be calculated.

This could cause a SIGSEGV later in load_elf_image -> target_mmap for
ET_EXEC type images since the mmap MAP_FIXED flag is specified which
could clobber existing mappings at the address returnd by g2h().

  mmap(0xd87000, 16846912, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE|0x100000, -1, 0) = 0xd87000
  munmap(0xd87000, 16846912)              = 0
  write(2, "Locating guest address space @ 0"..., 40Locating guest address space @ 0xd87000) = 40
  mmap(0x1187000, 16850944, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x1187000
  --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0x2188310} ---
  +++ killed by SIGSEGV +++

Now, pgd_find_hole accounts for guest_loaddr in this scenario.

Fixes: ad592e37df ("linux-user: provide fallback pgd_find_hole for bare chroots")
Signed-off-by: Vincent Fazio <vfazio@gmail.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20210131061948.15990-1-vfazio@xes-inc.com>
[lv: updated it to check if ret == -1]
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2021-03-13 10:45:11 +01:00
..
aarch64 semihosting: Move include/hw/semihosting/ -> include/semihosting/ 2021-03-10 15:34:12 +00:00
alpha linux-user: target: signal: Support TARGET_SS_AUTODISARM 2021-02-13 22:50:50 +01:00
arm semihosting: Move include/hw/semihosting/ -> include/semihosting/ 2021-03-10 15:34:12 +00:00
cris
generic linux-user: target: signal: Support TARGET_SS_AUTODISARM 2021-02-13 22:50:50 +01:00
hexagon Hexagon (linux-user/hexagon) Linux user emulation 2021-02-18 07:48:22 -08:00
host
hppa linux-user: Use cpu_untagged_addr in access_ok; split out *_untagged 2021-02-16 11:04:53 +00:00
i386 linux-user: Use cpu_untagged_addr in access_ok; split out *_untagged 2021-02-16 11:04:53 +00:00
m68k
microblaze
mips linux-user: target: signal: Support TARGET_SS_AUTODISARM 2021-02-13 22:50:50 +01:00
mips64 linux-user/mips: Support the n32 ABI for the R5900 2021-02-15 12:10:03 +01:00
nios2
openrisc
ppc exec: Use cpu_untagged_addr in g2h; split out g2h_untagged 2021-02-16 11:04:53 +00:00
riscv semihosting: Move include/hw/semihosting/ -> include/semihosting/ 2021-03-10 15:34:12 +00:00
s390x
sh4 accel/tcg: Precompute curr_cflags into cpu->tcg_cflags 2021-03-06 11:53:57 -08:00
sparc linux-user: target: signal: Support TARGET_SS_AUTODISARM 2021-02-13 22:50:50 +01:00
sparc64
x86_64
xtensa
cpu_loop-common.h
elfload.c linux-user/elfload: fix address calculation in fallback scenario 2021-03-13 10:45:11 +01:00
errno_defs.h
exit.c
fd-trans.c
fd-trans.h
flat.h
flatload.c exec: Use cpu_untagged_addr in g2h; split out g2h_untagged 2021-02-16 11:04:53 +00:00
ioctls.h
linux_loop.h
linuxload.c
main.c linux-user: manage binfmt-misc preserve-arg[0] flag 2021-03-13 10:45:11 +01:00
meson.build
mmap.c linux-user/aarch64: Implement PROT_MTE 2021-02-16 13:08:46 +00:00
qemu.h Hexagon (linux-user/hexagon) Linux user emulation 2021-02-18 07:48:22 -08:00
safe-syscall.S
semihost.c semihosting: Move include/hw/semihosting/ -> include/semihosting/ 2021-03-10 15:34:12 +00:00
signal-common.h
signal.c linux-user/signal: Decode waitid si_code 2021-02-13 22:50:49 +01:00
socket.h
strace.c
strace.list
syscall_defs.h Remove deprecated target tilegx 2021-03-09 11:26:32 +01:00
syscall_types.h
syscall.c linux-user: Fix executable page of /proc/self/maps 2021-03-13 10:45:11 +01:00
target_flat.h
trace-events
trace.h
uaccess.c linux-user: Handle tags in lock_user/unlock_user 2021-02-16 13:06:11 +00:00
uname.c
uname.h
vm86.c