The problem is that an mmap is failing with ENOMEM. I tracked this
down to the do_munmap call from do_mmap failing because the address
was not page-aligned. It wasn't page-aligned because
get_unmapped_area was returning an non-page-aligned address, because
there was a vma with a non-page-aligned end value. This in turn was
because earlier on, during an execve syscall, load_elf_interp had
called do_brk with a len parameter which wasn't a multiple of the page
size.
I am about to try this patch, which makes do_brk page-align its len
parameter:
--- mm/mmap.c~ Thu Jun 10 09:49:31 1999
+++ mm/mmap.c Tue Jun 11 21:48:50 2019
@@ -728,6 +728,9 @@
struct vm_area_struct * vma;
unsigned long flags, retval;
+ if ((len = PAGE_ALIGN(len)) == 0)
+ return addr;
+
/*
* mlock MCL_FUTURE?
*/
If instead all callers of do_brk should ensure that len is a multiple
of the page-size, I'm sure someone will post a better patch. :-)
Paul.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/