mirror_qemu/linux-user
Helge Deller 38dd78c41e linux-user/armeb: Fix __kernel_cmpxchg() for armeb
Commit 7f4f0d9ea8 ("linux-user/arm: Implement __kernel_cmpxchg with host
atomics") switched to use qatomic_cmpxchg() to swap a word with the memory
content, but missed to endianess-swap the oldval and newval values when
emulating an armeb CPU, which expects words to be stored in big endian in
the guest memory.

The bug can be verified with qemu >= v7.0 on any little-endian host, when
starting the armeb binary of the upx program, which just hangs without
this patch.

Cc: qemu-stable@nongnu.org
Signed-off-by: Helge Deller <deller@gmx.de>
Reported-by: "Markus F.X.J. Oberhumer" <markus@oberhumer.com>
Reported-by: John Reiser <jreiser@BitWagon.com>
Closes: https://github.com/upx/upx/issues/687
Message-Id: <ZMQVnqY+F+5sTNFd@p100>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2023-07-31 12:19:13 -07:00
..
aarch64 linux-user: Split TARGET_PROT_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
alpha linux-user: Split TARGET_MAP_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
arm linux-user/armeb: Fix __kernel_cmpxchg() for armeb 2023-07-31 12:19:13 -07:00
cris linux-user: Provide MADV_* definitions 2022-09-27 09:30:09 +02:00
generic linux-user: Split TARGET_PROT_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
hexagon Hexagon (linux-user/hexagon): handle breakpoints 2023-05-18 12:40:52 -07:00
hppa linux-user: Split TARGET_MAP_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
i386 target/i386: emulate 64-bit ring 0 for linux-user if LM feature is set 2023-06-29 10:49:43 +02:00
include linux-user: Implment host/ppc/host-signal.h 2023-01-23 14:39:48 -10:00
loongarch64 target/loongarch: Add LSX data type VReg 2023-05-06 11:19:42 +08:00
m68k linux-user: move target_flat.h to target subdirs 2023-02-03 22:55:12 +01:00
microblaze linux-user/microblaze: Handle privileged exception 2023-02-21 08:44:13 -10:00
mips linux-user: Split TARGET_PROT_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
mips64 linux-user: Split TARGET_MAP_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
nios2 linux-user: Provide MADV_* definitions 2022-09-27 09:30:09 +02:00
openrisc linux-user: Provide MADV_* definitions 2022-09-27 09:30:09 +02:00
ppc linux-user: Split TARGET_MAP_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
riscv linux-user/riscv: Add syscall riscv_hwprobe 2023-07-10 22:29:15 +10:00
s390x linux-user/s390x: Fix single-stepping SVC 2023-06-05 07:27:23 +02:00
sh4 linux-user: move target_flat.h to target subdirs 2023-02-03 22:55:12 +01:00
sparc linux-user: Split TARGET_MAP_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
x86_64 linux-user: Provide MADV_* definitions 2022-09-27 09:30:09 +02:00
xtensa linux-user: Split TARGET_PROT_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
cpu_loop-common.h linux-user: Add guest memory layout to exception dump 2022-10-25 09:20:40 +02:00
elfload.c Revert "linux-user: Fix qemu-arm to run static armhf binaries" 2023-07-22 19:54:22 +03:00
errnos.c.inc linux-user: Simplify host <-> target errno conversion using macros 2021-07-12 21:53:35 +02:00
exit.c *: Add missing includes of qemu/plugin.h 2023-03-22 15:06:57 +00:00
fd-trans.c linux-user: handle netlink flag NLA_F_NESTED 2023-03-10 20:45:47 +01:00
fd-trans.h linux-user: fix timerfd read endianness conversion 2023-03-10 20:42:00 +01:00
flat.h linux-user/: fix some comment spelling errors 2020-09-17 20:39:22 +02:00
flatload.c linux-user: Pass last not end to probe_guest_base 2023-03-28 15:23:10 -07:00
ioctls.h linux-user: remove conditionals for many fs.h ioctls 2022-10-21 17:46:19 +02:00
linux_loop.h linux-user: implement more loop ioctls 2021-11-29 14:54:17 +01:00
linuxload.c linux-user: Clean up arg_start/arg_end confusion 2022-05-23 08:15:19 +02:00
loader.h linux-user/elfload: Introduce elf_hwcap_str() on s390x 2023-06-05 20:48:34 +02:00
main.c linux-user, bsd-user: Preserve incoming order of environment variables in the target 2023-06-13 11:28:53 +02:00
meson.build accel/tcg: Add debuginfo support 2023-01-16 10:14:12 -10:00
mmap.c include/exec: Add WITH_MMAP_LOCK_GUARD 2023-07-23 17:57:10 +01:00
qemu.h accel/tcg: Return bool from page_check_range 2023-07-15 08:02:32 +01:00
semihost.c semihosting: Remove qemu_semihosting_console_outs 2022-06-28 04:41:20 +05:30
signal-common.h linux-user: Add missing signals in strace output 2022-09-27 09:29:33 +02:00
signal.c gdbstub: move chunks of user code into own files 2023-03-07 20:44:04 +00:00
socket.h Supply missing header guards 2019-06-12 13:20:21 +02:00
strace.c linux-user: Fix strace output for old_mmap 2023-07-18 20:42:05 +02:00
strace.h linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
strace.list linux-user: Improve strace output of pread64() and pwrite64() 2023-07-08 16:55:08 +02:00
syscall.c linux-user: Fix signed math overflow in brk() syscall 2023-07-18 20:42:05 +02:00
syscall_defs.h linux-user: Split TARGET_PROT_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
syscall_types.h linux-user: implement more loop ioctls 2021-11-29 14:54:17 +01:00
thunk.c linux-user: Move thunk.c from top-level 2021-12-20 10:12:29 -08:00
trace-events linux-user: Rename user_force_sig tracepoint to match function name 2022-01-18 12:41:42 +01:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
uaccess.c linux-user: Split linux-user internals out of qemu.h 2021-09-13 20:35:45 +02:00
uname.c linux-user: Remove pointless CPU{ARCH}State casts 2022-05-23 22:47:20 +02:00
uname.h linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
user-internals.h linux-user: Pass last not end to probe_guest_base 2023-03-28 15:23:10 -07:00
user-mmap.h linux-user: Widen target_mmap offset argument to off_t 2023-07-15 08:02:32 +01:00
vm86.c linux-user: Split linux-user internals out of qemu.h 2021-09-13 20:35:45 +02:00