On Thu, 26 Nov 2015 18:32:31 +0100 Michael Holzheu <holzheu at 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 <holzheu at 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)