[PATCH v2 1/8] linux-user: test, don't assert addr != test in pgb_reserved_va

Alex Bennée posted 8 patches 5 years, 4 months ago
[PATCH v2 1/8] linux-user: test, don't assert addr != test in pgb_reserved_va
Posted by Alex Bennée 5 years, 4 months ago
On older kernels which don't implement MAP_FIXED_NOREPLACE the kernel
may still fail to give us the address we asked for despite having
already probed the map for a valid hole. Asserting isn't particularly
useful to the user so let us move the check up and expand the
error_report a little to give them a fighting chance of working around
the problem.

Ameliorates: ee94743034
Cc: Bug 1895080 <1895080@bugs.launchpad.net>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 linux-user/elfload.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 4961e6119e24..f6022fd70493 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -2331,14 +2331,13 @@ static void pgb_reserved_va(const char *image_name, abi_ulong guest_loaddr,
     assert(guest_base != 0);
     test = g2h(0);
     addr = mmap(test, reserved_va, PROT_NONE, flags, -1, 0);
-    if (addr == MAP_FAILED) {
+    if (addr == MAP_FAILED || addr != test) {
         error_report("Unable to reserve 0x%lx bytes of virtual address "
-                     "space (%s) for use as guest address space (check your "
-                     "virtual memory ulimit setting or reserve less "
-                     "using -R option)", reserved_va, strerror(errno));
+                     "space at %p (%s) for use as guest address space (check your"
+                     "virtual memory ulimit setting, min_mmap_addr or reserve less "
+                     "using -R option)", reserved_va, test, strerror(errno));
         exit(EXIT_FAILURE);
     }
-    assert(addr == test);
 }
 
 void probe_guest_base(const char *image_name, abi_ulong guest_loaddr,
-- 
2.20.1


Re: [PATCH v2 1/8] linux-user: test, don't assert addr != test in pgb_reserved_va
Posted by Laurent Vivier 5 years, 4 months ago
Le 15/09/2020 à 15:43, Alex Bennée a écrit :
> On older kernels which don't implement MAP_FIXED_NOREPLACE the kernel
> may still fail to give us the address we asked for despite having
> already probed the map for a valid hole. Asserting isn't particularly
> useful to the user so let us move the check up and expand the
> error_report a little to give them a fighting chance of working around
> the problem.
> 
> Ameliorates: ee94743034
> Cc: Bug 1895080 <1895080@bugs.launchpad.net>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  linux-user/elfload.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index 4961e6119e24..f6022fd70493 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -2331,14 +2331,13 @@ static void pgb_reserved_va(const char *image_name, abi_ulong guest_loaddr,
>      assert(guest_base != 0);
>      test = g2h(0);
>      addr = mmap(test, reserved_va, PROT_NONE, flags, -1, 0);
> -    if (addr == MAP_FAILED) {
> +    if (addr == MAP_FAILED || addr != test) {
>          error_report("Unable to reserve 0x%lx bytes of virtual address "
> -                     "space (%s) for use as guest address space (check your "
> -                     "virtual memory ulimit setting or reserve less "
> -                     "using -R option)", reserved_va, strerror(errno));
> +                     "space at %p (%s) for use as guest address space (check your"
> +                     "virtual memory ulimit setting, min_mmap_addr or reserve less "
> +                     "using -R option)", reserved_va, test, strerror(errno));
>          exit(EXIT_FAILURE);
>      }
> -    assert(addr == test);
>  }
>  
>  void probe_guest_base(const char *image_name, abi_ulong guest_loaddr,
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>

Re: [PATCH v2 1/8] linux-user: test, don't assert addr != test in pgb_reserved_va
Posted by Richard Henderson 5 years, 4 months ago
On 9/15/20 6:43 AM, Alex Bennée wrote:
> On older kernels which don't implement MAP_FIXED_NOREPLACE the kernel
> may still fail to give us the address we asked for despite having
> already probed the map for a valid hole. Asserting isn't particularly
> useful to the user so let us move the check up and expand the
> error_report a little to give them a fighting chance of working around
> the problem.
> 
> Ameliorates: ee94743034
> Cc: Bug 1895080 <1895080@bugs.launchpad.net>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  linux-user/elfload.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~