Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Mar 2005 17:34:45 -0500
From:      John Baldwin <jhb@FreeBSD.org>
To:        arch@FreeBSD.org
Subject:   Fixing DRM after phk's drive-by axeing
Message-ID:  <200503281734.45926.jhb@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
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@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200503281734.45926.jhb>