PERFORCE change 231416 for review
Robert Watson
rwatson at FreeBSD.org
Wed Jul 24 14:44:29 UTC 2013
http://p4web.freebsd.org/@@231416?ac=10
Change 231416 by rwatson at rwatson_cinnamon on 2013/07/24 14:43:40
Allow FFS read and write VOPs if a previous call to vn_rdwr()
on the same vnode passed the IO_NOMACCHECK flag. Unfortunately
we can't specify the UIO_READ or UIO_WRITE flag arguments as
enum constants aren't yet allowed in TESLA expressions. Using
vn_rdwr() is preferable to white-listing specific code paths,
as the programmer has already let us know that the path is
exmempt from MAC checking, so quite a bit more compact.
Affected files ...
.. //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#16 edit
Differences ...
==== //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#16 (text+ko) ====
@@ -441,10 +441,14 @@
vp = ap->a_vp;
#ifdef MAC
#ifdef TESLA_MAC
- TESLA_SYSCALL(incallstack(ufs_readdir) ||
+ TESLA_SYSCALL(
+ incallstack(ufs_readdir) ||
+ previously(called(vn_rdwr(ANY(int), vp, ANY(ptr), ANY(int),
+ ANY(int), ANY(int), flags(IO_NOMACCHECK), ANY(ptr), ANY(ptr),
+ ANY(ptr), ANY(ptr)))) ||
previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0));
- TESLA_PAGE_FAULT(incallstack(ufs_readdir) ||
- previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0));
+ TESLA_PAGE_FAULT(previously(mac_vnode_check_read(ANY(ptr), ANY(ptr),
+ vp) == 0));
#endif
#endif
@@ -671,8 +675,11 @@
vp = ap->a_vp;
#ifdef MAC
#ifdef TESLA_MAC
- TESLA_SYSCALL(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp)
- == 0));
+ TESLA_SYSCALL(
+ previously(called(vn_rdwr(ANY(int), vp, ANY(ptr), ANY(int),
+ ANY(int), ANY(int), flags(IO_NOMACCHECK), ANY(ptr), ANY(ptr),
+ ANY(ptr), ANY(ptr)))) ||
+ previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0));
TESLA_PAGE_FAULT(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr),
vp) == 0));
#endif
More information about the p4-projects
mailing list