Fix bounds checks and misc errors in mm.c
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 16 Aug 2016 20:23:41 +0000 (16:23 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
commitb77822c4858d2577062eb1359a459811d36a5aa6
tree9d7170893b677afdef7ba419902991f776326a22
parentffb38f4b254b9ebb728fd0a13cecae58fdb7e9e8
Fix bounds checks and misc errors in mm.c

Some of the UMAPTOP checks could be overflowed.  There are probably more
throughout the kernel (though not for UMAPTOP).  Using the umem helper
simplifies the logic a bit.

For those curious, mprotect()s ENOMEM errno is what the man page says to
do, even though the others do EINVAL.

The printk change for create_vmr's failure is in the hopes of catching a
bug.  I occasionally see this:

cs has not created #srv/cs yet, spinning until it does....

kernel warning at kern/src/mm.c:103, from core 0: Not making a VMR,
        wanted 0x0000400000000000, + 0x00003b5100001000 = 0x00007b5100001000

[kernel] do_mmap() aborted for 0x0000400000000000 + 4096!

The do_mmap()'s printk would have truncated the top part of len (0x3b51),
if it was passed.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/mm.c