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