PERFORCE change 94125 for review

John Baldwin jhb at FreeBSD.org
Mon Mar 27 19:55:49 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=94125

Change 94125 by jhb at jhb_slimer on 2006/03/27 19:55:01

	Conditionalize Giant around vn_open.

Affected files ...

.. //depot/projects/smpng/sys/security/audit/audit_syscalls.c#3 edit

Differences ...

==== //depot/projects/smpng/sys/security/audit/audit_syscalls.c#3 (text) ====

@@ -520,7 +520,7 @@
 	struct ucred *cred;
 	struct vnode *vp;
 	int error = 0;
-	int flags;
+	int flags, vfslocked;
 
 	error = suser(td);
 	if (error)
@@ -539,25 +539,21 @@
 	if (uap->path == NULL)
 		return (EINVAL);
 
-	/*
-	 * XXXAUDIT: Giant may no longer be required here.
-	 */
-	mtx_lock(&Giant);
-	NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_USERSPACE, uap->path, td);
+	NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE, UIO_USERSPACE,
+	    uap->path, td);
 	flags = AUDIT_OPEN_FLAGS;
 	error = vn_open(&nd, &flags, 0, -1);
-	if (error) {
-		mtx_unlock(&Giant);
-		goto err_out;
-	}
+	if (error)
+		return (error);
+	vfslocked = NDHASGIANT(&nd);
 	VOP_UNLOCK(nd.ni_vp, 0, td);
 	vp = nd.ni_vp;
 	if (vp->v_type != VREG) {
 		vn_close(vp, AUDIT_CLOSE_FLAGS, td->td_ucred, td);
-		mtx_unlock(&Giant);
-		error = EINVAL;
-		goto err_out;
+		VFS_UNLOCK_GIANT(vfslocked);
+		return (EINVAL);
 	}
+	VFS_UNLOCK_GIANT(vfslocked);
 	cred = td->td_ucred;
 	crhold(cred);
 
@@ -567,10 +563,8 @@
 	 */
 	audit_suspended = 0;
 
-	mtx_unlock(&Giant);
 	audit_rotate_vnode(cred, vp);
 
-err_out:
 	return (error);
 }
 


More information about the p4-projects mailing list