Fix deadlock in __hpf()
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 23 Aug 2017 21:48:29 +0000 (17:48 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 23 Aug 2017 21:48:29 +0000 (17:48 -0400)
commit82a6c5af0db02529f1fa89159a0654d9da763bd7
tree58842e008096a503b522fc2290bd38144192a917
parent92fe9a3689de705d539bd08e50a3dce81fcc4e33
Fix deadlock in __hpf()

When erroring out, we were not unlocking first.

As a side note, if you give the kernel a virtual address and tell it to use
it for an operation (e.g. read(fd, VIRT_ADDR, amt), that memory should be
anonymous memory.  At the very least, it must be soft-faultable (i.e.  not
a file that isn't in the page cache).  Considering there's limited control
over that, I currently don't allow that either.  So something like this
will fail:

va = mmap(..., fd, 0)
read(another_fd, va, amt);

This restriction is stricter than Linux, and is because of userspace's role
in managing its own memory - it's up to the user to know what is or isn't
resident.

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