Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Sep 2005 12:31:04 GMT
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 84053 for review
Message-ID:  <200509211231.j8LCV4D8045826@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=84053

Change 84053 by rwatson@rwatson_zoo on 2005/09/21 12:30:38

	Move a number of calls to audit vnode path information to the
	point where VFS locking is in place already.  We need to carefully
	consider whether these changes in placement give the desired
	semantics still, but do offer increased atomicity as they move
	audit data gathering to the same lock instance as the operation
	itself.

Affected files ...

.. //depot/projects/trustedbsd/audit3/sys/kern/vfs_syscalls.c#13 edit

Differences ...

==== //depot/projects/trustedbsd/audit3/sys/kern/vfs_syscalls.c#13 (text+ko) ====

@@ -329,7 +329,11 @@
 		return (error);
 	mtx_lock(&Giant);
 
+#ifdef AUDIT
+	vn_lock(fp->f_vnode, LK_EXCLUSIVE | LK_RETRY, td);
 	AUDIT_ARG(vnpath, fp->f_vnode, ARG_VNODE1);
+	VOP_UNLOCK(fp->f_vnode, 0, td);
+#endif
 
 	mp = fp->f_vnode->v_mount;
 	fdrop(fp, td);
@@ -2351,6 +2355,7 @@
 		return (error);
 	VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE);
 	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+	AUDIT_ARG(vnpath, vp, ARG_VNODE1);
 	VATTR_NULL(&vattr);
 	vattr.va_flags = flags;
 #ifdef MAC
@@ -2452,8 +2457,6 @@
 		return (error);
 	vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
 
-	AUDIT_ARG(vnpath, fp->f_vnode, ARG_VNODE1);
-
 	error = setfflags(td, fp->f_vnode, uap->flags);
 	fdrop(fp, td);
 	VFS_UNLOCK_GIANT(vfslocked);
@@ -2617,6 +2620,7 @@
 		return (error);
 	VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE);
 	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+	AUDIT_ARG(vnpath, vp, ARG_VNODE1);
 	VATTR_NULL(&vattr);
 	vattr.va_uid = uid;
 	vattr.va_gid = gid;
@@ -2747,8 +2751,6 @@
 		return (error);
 	vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
 
-	AUDIT_ARG(vnpath, fp->f_vnode, ARG_VNODE1);
-
 	error = setfown(td, fp->f_vnode, uap->uid, uap->gid);
 	fdrop(fp, td);
 	VFS_UNLOCK_GIANT(vfslocked);
@@ -2806,6 +2808,7 @@
 		return (error);
 	VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE);
 	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+	AUDIT_ARG(vnpath, vp, ARG_VNODE1);
 	setbirthtime = 0;
 	if (numtimes < 3 && VOP_GETATTR(vp, &vattr, td->td_ucred, td) == 0 &&
 	    timespeccmp(&ts[1], &vattr.va_birthtime, < ))
@@ -2952,8 +2955,6 @@
 	if ((error = getvnode(td->td_proc->p_fd, fd, &fp)) != 0)
 		return (error);
 
-	AUDIT_ARG(vnpath, fp->f_vnode, ARG_VNODE1);
-
 	if ((error = getutimes(tptr, tptrseg, ts)) != 0)
 		return (error);
 	vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
@@ -3061,8 +3062,6 @@
 	if ((error = getvnode(td->td_proc->p_fd, uap->fd, &fp)) != 0)
 		return (error);
 
-	AUDIT_ARG(vnpath, fp->f_vnode, ARG_VNODE1);
-
 	if ((fp->f_flag & FWRITE) == 0) {
 		fdrop(fp, td);
 		return (EINVAL);
@@ -3073,6 +3072,7 @@
 		goto drop;
 	VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE);
 	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+	AUDIT_ARG(vnpath, fp->f_vnode, ARG_VNODE1);
 	if (vp->v_type == VDIR)
 		error = EISDIR;
 #ifdef MAC



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