On Thu, 26 Nov 2015 18:32:31 +0100
Michael Holzheu <holz...@linux.vnet.ibm.com> wrote:

> Hi Simon again,
> 
> After a bit more thinking: In theory mmap() could also return NULL.
> Therefore the following fix is probably the better one ...

No, if you let the kernel choose the address (i.e. call mmap with NULL
addr), it will return at least PAGE_SIZE (and a higher limit is usually
enforced by sys.vm.mmap_min_addr sysctl). Admittedly the limit is set
in arch-specific code, so theoretically there can be an architecture
which sets the limit to 0, but I doubt it, because it would break too
many assumptions in user space (for example gcc assumes that
dereferencing a NULL pointer terminates a process).

In short, this other fix is just as good as the previous one.

Regards,
Petr Tesarik

> ---
> Subject: [PATCH] kexec: fix mmap return code handling
> 
> When mmap fails, MAP_FAILED (that is, (void *) -1) is returned. Currently
> we assume that NULL is returned. Fix this and add the MAP_FAILED check.
> 
> Fixes: 95741713e790 ("kexec/s390x: use mmap instead of read for slurp_file")
> Signed-off-by: Michael Holzheu <holz...@linux.vnet.ibm.com>
> 
> diff --git a/kexec/kexec.c b/kexec/kexec.c
> index cf6e03d..f0bd527 100644
> --- a/kexec/kexec.c
> +++ b/kexec/kexec.c
> @@ -573,7 +573,7 @@ static char *slurp_file_generic(const char *filename, 
> off_t *r_size,
>                       buf = slurp_fd(fd, filename, size, &nread);
>               }
>       }
> -     if (!buf)
> +     if ((use_mmap && (buf == MAP_FAILED)) || (!use_mmap && (buf == NULL)))
>               die("Cannot read %s", filename);
>  
>       if (nread != size)


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to