Le 16/02/2021 à 20:01, Richard Purdie a écrit : > 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 other > errors such as EFAULT or EINVAL. > > 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. > > Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org > > Index: qemu-5.2.0/linux-user/mmap.c > =================================================================== > --- qemu-5.2.0.orig/linux-user/mmap.c > +++ qemu-5.2.0/linux-user/mmap.c > @@ -722,12 +722,14 @@ abi_long target_mremap(abi_ulong old_add > int prot; > void *host_addr; > > - if (!guest_range_valid(old_addr, old_size) || > - ((flags & MREMAP_FIXED) && > - !guest_range_valid(new_addr, new_size)) || > - ((flags & MREMAP_MAYMOVE) == 0 && > - !guest_range_valid(old_addr, new_size))) { > - errno = ENOMEM; > + if (!guest_range_valid(old_addr, old_size)) { > + errno = EFAULT; > + return -1; > + } > + > + if (((flags & MREMAP_FIXED) && !guest_range_valid(new_addr, new_size)) || > + ((flags & MREMAP_MAYMOVE) == 0 && !guest_range_valid(old_addr, > new_size))) { > + errno = EINVAL; > return -1; > } > > >
Reviewed-by: Laurent Vivier <laur...@vivier.eu>