diff options
author | rwatson <rwatson@FreeBSD.org> | 2002-08-19 19:04:53 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2002-08-19 19:04:53 +0000 |
commit | a1cb1e3bedf5e17c3e47858fd715df1bf1e274ae (patch) | |
tree | 77c1982dd4eb706f6b2cec714687d0049945f5b5 /sys/kern/kern_mac.c | |
parent | 32d992cd392a444b63141edb7a5b5d0483eb36f2 (diff) | |
download | FreeBSD-src-a1cb1e3bedf5e17c3e47858fd715df1bf1e274ae.zip FreeBSD-src-a1cb1e3bedf5e17c3e47858fd715df1bf1e274ae.tar.gz |
Pass active_cred and file_cred into the MAC framework explicitly
for mac_check_vnode_{poll,read,stat,write}(). Pass in fp->f_cred
when calling these checks with a struct file available. Otherwise,
pass NOCRED. All currently MAC policies use active_cred, but
could now offer the cached credential semantic used for the base
system security model.
Obtained from: TrustedBSD Project
Sponsored by: DARPA, NAI Labs
Diffstat (limited to 'sys/kern/kern_mac.c')
-rw-r--r-- | sys/kern/kern_mac.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/sys/kern/kern_mac.c b/sys/kern/kern_mac.c index 107b2d2..17dd122 100644 --- a/sys/kern/kern_mac.c +++ b/sys/kern/kern_mac.c @@ -1804,7 +1804,8 @@ mac_check_vnode_open(struct ucred *cred, struct vnode *vp, mode_t acc_mode) } int -mac_check_vnode_poll(struct ucred *cred, struct vnode *vp) +mac_check_vnode_poll(struct ucred *active_cred, struct ucred *file_cred, + struct vnode *vp) { int error; @@ -1813,17 +1814,19 @@ mac_check_vnode_poll(struct ucred *cred, struct vnode *vp) if (!mac_enforce_fs) return (0); - error = vn_refreshlabel(vp, cred); + error = vn_refreshlabel(vp, active_cred); if (error) return (error); - MAC_CHECK(check_vnode_poll, cred, vp, &vp->v_label); + MAC_CHECK(check_vnode_poll, active_cred, file_cred, vp, + &vp->v_label); return (error); } int -mac_check_vnode_read(struct ucred *cred, struct vnode *vp) +mac_check_vnode_read(struct ucred *active_cred, struct ucred *file_cred, + struct vnode *vp) { int error; @@ -1832,11 +1835,12 @@ mac_check_vnode_read(struct ucred *cred, struct vnode *vp) if (!mac_enforce_fs) return (0); - error = vn_refreshlabel(vp, cred); + error = vn_refreshlabel(vp, active_cred); if (error) return (error); - MAC_CHECK(check_vnode_read, cred, vp, &vp->v_label); + MAC_CHECK(check_vnode_read, active_cred, file_cred, vp, + &vp->v_label); return (error); } @@ -2076,7 +2080,8 @@ mac_check_vnode_setutimes(struct ucred *cred, struct vnode *vp, } int -mac_check_vnode_stat(struct ucred *cred, struct vnode *vp) +mac_check_vnode_stat(struct ucred *active_cred, struct ucred *file_cred, + struct vnode *vp) { int error; @@ -2085,16 +2090,18 @@ mac_check_vnode_stat(struct ucred *cred, struct vnode *vp) if (!mac_enforce_fs) return (0); - error = vn_refreshlabel(vp, cred); + error = vn_refreshlabel(vp, active_cred); if (error) return (error); - MAC_CHECK(check_vnode_stat, cred, vp, &vp->v_label); + MAC_CHECK(check_vnode_stat, active_cred, file_cred, vp, + &vp->v_label); return (error); } int -mac_check_vnode_write(struct ucred *cred, struct vnode *vp) +mac_check_vnode_write(struct ucred *active_cred, struct ucred *file_cred, + struct vnode *vp) { int error; @@ -2103,11 +2110,12 @@ mac_check_vnode_write(struct ucred *cred, struct vnode *vp) if (!mac_enforce_fs) return (0); - error = vn_refreshlabel(vp, cred); + error = vn_refreshlabel(vp, active_cred); if (error) return (error); - MAC_CHECK(check_vnode_write, cred, vp, &vp->v_label); + MAC_CHECK(check_vnode_write, active_cred, file_cred, vp, + &vp->v_label); return (error); } |