aboutsummaryrefslogtreecommitdiff
path: root/linux-user/s390x
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2018-04-19 13:57:40 +0100
committerLaurent Vivier <laurent@vivier.eu>2018-04-30 09:47:46 +0200
commit2b3f64cbf3e00f5042d120b4c23ed66078431f8c (patch)
tree01f38276652ececd2bf13313deadf673f46a8f29 /linux-user/s390x
parentb02ebad1dc3132672a2a1ade2997c78441947e77 (diff)
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>
Diffstat (limited to 'linux-user/s390x')
0 files changed, 0 insertions, 0 deletions