Source: @pullmoll
Upstream: no
Reason: errno=EFAULT when the address passed to mremap(2) is not valid

See Rich Felker's comment at https://www.openwall.com/lists/musl/2017/06/21/2 for
why we need to return errno as described in man mremap(2) from qemu-user-static.
Also speed up the loop when checking for increasing the mappings size to go
in steps of TARGET_PAGE_SIZE and OR-in a check for the very last byte of the range.

--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -692,7 +692,7 @@
     if (!guest_range_valid(old_addr, old_size) ||
         ((flags & MREMAP_FIXED) &&
          !guest_range_valid(new_addr, new_size))) {
-        errno = ENOMEM;
+        errno = EFAULT;
         return -1;
     }
 
@@ -728,9 +728,10 @@
             abi_ulong addr;
             for (addr = old_addr + old_size;
                  addr < old_addr + new_size;
-                 addr++) {
+                 addr += TARGET_PAGE_SIZE) {
                 prot |= page_get_flags(addr);
             }
+            prot |= page_get_flags(old_addr + new_size - 1);
         }
         if (prot == 0) {
             host_addr = mremap(g2h(old_addr), old_size, new_size, flags);
@@ -738,7 +739,7 @@
                 mmap_reserve(old_addr + old_size, new_size - old_size);
             }
         } else {
-            errno = ENOMEM;
+            errno = EFAULT;
             host_addr = MAP_FAILED;
         }
         /* Check if address fits target address space */
