summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2002-10-19 21:25:51 +0000
committerrwatson <rwatson@FreeBSD.org>2002-10-19 21:25:51 +0000
commit615a42874b2003a0b00545878a9e6e24d4a58d72 (patch)
treec926c3101bf4e0c306e0e6c3a05276fb299c005b
parent4c2d375ca4e58254fcc2d5f7c0259d285af557a0 (diff)
downloadFreeBSD-src-615a42874b2003a0b00545878a9e6e24d4a58d72.zip
FreeBSD-src-615a42874b2003a0b00545878a9e6e24d4a58d72.tar.gz
Add a new 'NOMACCHECK' flag to namei() NDINIT flags, which permits the
caller to indicate that MAC checks are not required for the lookup. Similar to IO_NOMACCHECK for vn_rdwr(), this indicates that the caller has already performed all required protections and that this is an internally generated operation. This will be used by the NFS server code, as we don't currently enforce MAC protections against requests delivered via NFS. While here, add NOCROSSMOUNT to PARAMASK; apparently this was used at one point for name lookup flag checking, but isn't any longer or it would have triggered from the NFS server code passing it to indicate that mountpoints shouldn't be crossed in lookups. Approved by: re Obtained from: TrustedBSD Project Sponsored by: DARPA, Network Associates Laboratories
-rw-r--r--sys/kern/vfs_lookup.c17
-rw-r--r--sys/sys/namei.h3
2 files changed, 13 insertions, 7 deletions
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index db1b342..f064b64 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -216,9 +216,12 @@ namei(ndp)
break;
}
#ifdef MAC
- error = mac_check_vnode_readlink(td->td_ucred, ndp->ni_vp);
- if (error)
- break;
+ if ((cnp->cn_flags & NOMACCHECK) == 0) {
+ error = mac_check_vnode_readlink(td->td_ucred,
+ ndp->ni_vp);
+ if (error)
+ break;
+ }
#endif
if (ndp->ni_pathlen > 1)
cp = uma_zalloc(namei_zone, M_WAITOK);
@@ -471,9 +474,11 @@ dirloop:
*/
unionlookup:
#ifdef MAC
- error = mac_check_vnode_lookup(td->td_ucred, dp, cnp);
- if (error)
- goto bad;
+ if ((cnp->cn_flags & NOMACCHECK) == 0) {
+ error = mac_check_vnode_lookup(td->td_ucred, dp, cnp);
+ if (error)
+ goto bad;
+ }
#endif
ndp->ni_dvp = dp;
ndp->ni_vp = NULL;
diff --git a/sys/sys/namei.h b/sys/sys/namei.h
index a06a045..00e7643 100644
--- a/sys/sys/namei.h
+++ b/sys/sys/namei.h
@@ -144,7 +144,8 @@ struct nameidata {
#define ISUNICODE 0x100000 /* current component name is unicode*/
#define PDIRUNLOCK 0x200000 /* filesystem lookup() unlocked parent dir */
#define NOCROSSMOUNT 0x400000 /* do not cross mount points */
-#define PARAMASK 0x3ffe00 /* mask of parameter descriptors */
+#define NOMACCHECK 0x800000 /* do not perform MAC checks */
+#define PARAMASK 0xfffe00 /* mask of parameter descriptors */
/*
* Initialization of an nameidata structure.
OpenPOWER on IntegriCloud