qemu/linux-user
Peter Maydell 2b3f64cbf3 linux-user: Fix getdents emulation for 64 bit guest on 32 bit host
Currently we mishandle emulation of the getdents syscall for the
case of a 64 bit guest on a 32 bit host -- it defaults into
the 'host and guest same size' codepath and generates incorrect
structures in the guest buffer.

We can't easily handle the 64-on-32 case using the host getdents
syscall, because the guest struct dirent is bigger than the
host struct dirent, and we might find the host syscall has handed
us back more records than we can fit in the guest buffer after
conversion. Instead, always emulate 64-on-32 getdents with
the host getdents64. This avoids the buffer-overrun problem
because a dirent64 struct is always the same size on any host
and always larger than any architecture's dirent struct.

Reported-by: Henry Wertz <hwertz10@gmail.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <20180419125740.2695-1-peter.maydell@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2018-04-30 09:47:46 +02:00
..
aarch64 linux-user: Implement aarch64 PR_SVE_SET/GET_VL 2018-03-09 17:09:43 +00:00
alpha linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
arm linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
cris linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
host linux-user: Fix register used for 6th and 7th syscall argument on aarch64 2018-02-18 18:52:32 +01:00
hppa linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
i386 linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
m68k linux-user, m68k: select CPU according to ELF header values 2018-02-25 17:29:21 +01:00
microblaze linux-user: fix microblaze get_sp_from_cpustate() 2018-04-10 17:41:55 +02:00
mips linux-user: MIPS set cpu to r6 CPU if binary is R6 2018-02-25 17:29:45 +01:00
mips64 linux-user: MIPS set cpu to r6 CPU if binary is R6 2018-02-25 17:29:45 +01:00
nios2 linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
openrisc linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
ppc linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
riscv linux-user: set minimum uname for RISC-V 2018-04-30 09:47:46 +02:00
s390x linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
sh4 linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
sparc linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
sparc64 linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
tilegx linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
x86_64 linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
xtensa target/xtensa: linux-user: fix sysv IPC structures 2018-04-01 14:05:23 -07:00
elfload.c linux-user: implement HWCAP bits on MIPS 2018-04-10 18:00:14 +02:00
errno_defs.h linux-user: Handle ERFKILL and EHWPOISON 2017-01-22 18:14:10 -08:00
flat.h Support for 32 bit ABI on 64 bit targets (only enabled Sparc64) 2007-10-14 16:27:31 +00:00
flatload.c linux-user: Fix error handling in flatload.c target_pread() 2016-09-21 14:27:19 +03:00
ioctls.h linux-user: Implement ioctl cmd TIOCGPTPEER 2018-02-18 18:52:32 +01:00
linux_loop.h linux-user: Add loop control ioctls 2016-07-19 15:22:33 +03:00
linuxload.c linux-user: Clean up includes 2016-01-29 15:07:22 +00:00
m68k-sim.c linux-user: Clean up includes 2016-01-29 15:07:22 +00:00
main.c target/xtensa: linux-user: rewind pc for restarted syscall 2018-03-31 14:06:35 -07:00
Makefile.objs linux-user: Provide safe_syscall for fixing races between signals and syscalls 2016-05-27 14:49:51 +03:00
mmap.c linux-user: drop unused target_msync function 2018-03-13 11:30:22 -07:00
qemu.h linux-user: drop unused target_msync function 2018-03-13 11:30:22 -07:00
safe-syscall.S linux-user: Provide safe_syscall for fixing races between signals and syscalls 2016-05-27 14:49:51 +03:00
signal.c linux-user: check that all of AArch64 SVE extended sigframe is writable 2018-04-17 12:04:58 +01:00
socket.h linux-user: Add HPPA socket.h definitions 2017-01-23 09:52:39 -08:00
strace.c linux-user: fix O_TMPFILE handling 2017-10-16 16:00:56 +03:00
strace.list linux-user: add rt_tgsigqueueinfo() strace 2017-05-29 14:56:08 +03:00
syscall_defs.h linux-user: fix TARGET___O_TMPFILE for sparc 2018-04-03 11:50:24 +02:00
syscall_types.h linux-user: Add FICLONE and FICLONERANGE ioctls 2017-02-16 15:29:30 +01:00
syscall.c linux-user: Fix getdents emulation for 64 bit guest on 32 bit host 2018-04-30 09:47:46 +02:00
target_flat.h linux-user/FLAT: allow targets to override FLAT processing 2011-02-09 10:33:54 +02:00
trace-events trace-events: fix code style: print 0x before hex numbers 2017-08-01 12:13:07 +01:00
uaccess.c util: move declarations out of qemu-common.h 2016-03-22 22:20:17 +01:00
uname.c linux-user: Clean up includes 2016-01-29 15:07:22 +00:00
uname.h Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00
vm86.c linux-user: Clean up includes 2016-01-29 15:07:22 +00:00