Fixing DRM after phk's drive-by axeing
John Baldwin
jhb at FreeBSD.org
Mon Mar 28 14:35:06 PST 2005
I have a commit-ready version of the vm_mmap() changes I made to get drm to
work happily with the newer, cleaner cdev stuff that phk has been working on.
Basically, I've changed vm_mmap() so that it can accept either a vnode or a
cdev as its handle argument rather than just vnodes. For the cdev case, it
calls a vm_mmap_cdev() function that is a cut down version of
vm_mmap_vnode(). One thing to note is that this case loses the MAC check for
this type of mmap() (currently only done from DRM) since MAC only checks
mmaps for vnodes. If cdev were to grow a label, then a mmap check for the
cdev could be added I suppose, though the case of a mmap'ing a vnode that
maps to a cdev would have to be adjusted to make that extra call as well.
The first cut at the patch added a new MAP_CDEV flag to vm_mmap() that
specified that the handle argument was a cdev rather than a vnode. However,
this method requires that any kernel code that calls vm_mmap() passing in
flags from userland has to verify that MAP_CDEV isn't passed in from userland
to avoid potential DOSs from random user processes that result in kernel
panics. Thus, I decided to change vm_mmap() to instead take a objtype_t
parameter that specifies what type of object the handle argument is. Thus,
for MAP_ANON, the code passes in OBJT_DEFAULT, for vnodes OBJT_VNODE, and for
cdevs (in drm) OBJT_DEVICE. I've stuck the patch at
http://www.FreeBSD.org/~jhb/patches/mmap_cdev3.patch and am using it locally
to get X working on my laptop. Any objections or bikeshed^Wsuggestions for a
different interface?
--
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the freebsd-arch
mailing list