Roundup the length on munmap().
authorKevin Klues <klueska@cs.berkeley.edu>
Tue, 1 Apr 2014 23:31:00 +0000 (16:31 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Tue, 1 Apr 2014 23:31:00 +0000 (16:31 -0700)
do_mmap() rounds the length up before mmapping, but we have no way of
notifying the user that this has happened.  When they do an unmap, the
length passed in needs to be rounded again, or bad things will happen.

kern/src/mm.c

index f9f21d8..7207747 100644 (file)
@@ -748,6 +748,8 @@ int munmap(struct proc *p, uintptr_t addr, size_t len)
        printd("munmap(addr %x, len %x)\n", addr, len);
        if (!len)
                return 0;
+       len = ROUNDUP(len, PGSIZE);
+
        if ((addr % PGSIZE) || (addr < MMAP_LOWEST_VA)) {
                set_errno(EINVAL);
                return -1;