[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 15/15] linux-user: Fix calculation of auxv length
From: |
riku . voipio |
Subject: |
[Qemu-devel] [PULL 15/15] linux-user: Fix calculation of auxv length |
Date: |
Mon, 20 Nov 2017 23:21:43 +0200 |
From: Peter Maydell <address@hidden>
In commit 7c4ee5bcc82e643 we changed the order in which we construct
the AUXV, but forgot to adjust the calculation of the length. The
result is that we set info->auxv_len to a bogus and negative value,
and then later on the code in open_self_auxv() gets confused and
ends up presenting the guest with an empty file.
Since we now have to calculate the auxv length up-front as part
of figuring out how much we're going to put on the stack, set
info->auxv_len then; this allows us to assert that we put the
same number of entries into auxv as we pre-calculated, rather
than merely having a comment saying we need to do that.
Fixes: https://bugs.launchpad.net/qemu/+bug/1728116
Reviewed-by: Richard Henderson <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
Signed-off-by: Riku Voipio <address@hidden>
---
linux-user/elfload.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 3b857fbc9c..20f3d8c2c3 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -1732,6 +1732,8 @@ static abi_ulong create_elf_tables(abi_ulong p, int argc,
int envc,
#ifdef ELF_HWCAP2
size += 2;
#endif
+ info->auxv_len = size * n;
+
size += envc + argc + 2;
size += 1; /* argc itself */
size *= n;
@@ -1760,7 +1762,6 @@ static abi_ulong create_elf_tables(abi_ulong p, int argc,
int envc,
put_user_ual(val, u_auxv); u_auxv += n; \
} while(0)
- /* There must be exactly DLINFO_ITEMS entries here. */
#ifdef ARCH_DLINFO
/*
* ARCH_DLINFO must come first so platform specific code can enforce
@@ -1768,6 +1769,9 @@ static abi_ulong create_elf_tables(abi_ulong p, int argc,
int envc,
*/
ARCH_DLINFO;
#endif
+ /* There must be exactly DLINFO_ITEMS entries here, or the assert
+ * on info->auxv_len will trigger.
+ */
NEW_AUX_ENT(AT_PHDR, (abi_ulong)(info->load_addr + exec->e_phoff));
NEW_AUX_ENT(AT_PHENT, (abi_ulong)(sizeof (struct elf_phdr)));
NEW_AUX_ENT(AT_PHNUM, (abi_ulong)(exec->e_phnum));
@@ -1793,7 +1797,10 @@ static abi_ulong create_elf_tables(abi_ulong p, int
argc, int envc,
NEW_AUX_ENT (AT_NULL, 0);
#undef NEW_AUX_ENT
- info->auxv_len = u_argv - info->saved_auxv;
+ /* Check that our initial calculation of the auxv length matches how much
+ * we actually put into it.
+ */
+ assert(info->auxv_len == u_auxv - info->saved_auxv);
put_user_ual(argc, u_argc);
--
2.14.2
- [Qemu-devel] [PULL 05/15] linux-user/hppa: Fix TARGET_MAP_TYPE, (continued)
- [Qemu-devel] [PULL 05/15] linux-user/hppa: Fix TARGET_MAP_TYPE, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 06/15] linux-user/hppa: Fix TARGET_F_RDLCK, TARGET_F_WRLCK, TARGET_F_UNLCK, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 08/15] linux-user/syscall.c: Handle SH4's exceptional alignment for p{read, write}64, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 11/15] linux-user/s390x: Mask si_addr for SIGSEGV, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 07/15] linux-user: Handle TARGET_MAP_STACK and TARGET_MAP_HUGETLB, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 09/15] linux-user: fix 'finshed' typo in comment, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 10/15] linux-user: return EINVAL from prctl(PR_*_SECCOMP), riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 12/15] linux-user/ppc: Report correct fault address for data faults, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 13/15] linux-user/sparc: Put address for data faults where linux-user expects it, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 14/15] linux-user: Handle rt_sigaction correctly for SPARC, riku . voipio, 2017/11/20
- [Qemu-devel] [PULL 15/15] linux-user: Fix calculation of auxv length,
riku . voipio <=
- Re: [Qemu-devel] [PULL 00/15] late linux-user fixes for 2.11, no-reply, 2017/11/20
- Re: [Qemu-devel] [PULL 00/15] late linux-user fixes for 2.11, Peter Maydell, 2017/11/21
- Re: [Qemu-devel] [PULL 00/15] late linux-user fixes for 2.11, no-reply, 2017/11/21