12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- From 375cae3dd6151ef33cae8f243f6a2c2da6c0c356 Mon Sep 17 00:00:00 2001
- From: Richard Purdie <richard.purdie@linuxfoundation.org>
- Date: Fri, 8 Jan 2021 17:27:06 +0000
- Subject: [PATCH 06/12] qemu: Add some user space mmap tweaks to address musl
- 32 bit
- When using qemu-i386 to build qemux86 webkitgtk on musl, it sits in an
- infinite loop of mremap calls of ever decreasing/increasing addresses.
- I suspect something in the musl memory allocation code loops indefinitely
- if it only sees ENOMEM and only exits when it hits EFAULT.
- According to the docs, trying to mremap outside the address space
- can/should return EFAULT and changing this allows the build to succeed.
- A better return value for the other cases of invalid addresses is EINVAL
- rather than ENOMEM so adjust the other part of the test to this.
- Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2021-01/msg01355.html]
- Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org
- ---
- linux-user/mmap.c | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
- diff --git a/linux-user/mmap.c b/linux-user/mmap.c
- index c125031b9..e651834a5 100644
- --- a/linux-user/mmap.c
- +++ b/linux-user/mmap.c
- @@ -749,12 +749,16 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size,
- int prot;
- void *host_addr;
-
- - if (!guest_range_valid_untagged(old_addr, old_size) ||
- - ((flags & MREMAP_FIXED) &&
- + if (!guest_range_valid_untagged(old_addr, old_size)) {
- + errno = EFAULT;
- + return -1;
- + }
- +
- + if (((flags & MREMAP_FIXED) &&
- !guest_range_valid_untagged(new_addr, new_size)) ||
- ((flags & MREMAP_MAYMOVE) == 0 &&
- !guest_range_valid_untagged(old_addr, new_size))) {
- - errno = ENOMEM;
- + errno = EINVAL;
- return -1;
- }
-
- --
- 2.30.2
|