PERFORCE change 97068 for review
Robert Watson
rwatson at FreeBSD.org
Sat May 13 04:34:26 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=97068
Change 97068 by rwatson at rwatson_fledge on 2006/05/13 04:27:53
Remove use of Giant around vn_open() in audit code.
Submitted by: jhb
Affected files ...
.. //depot/projects/trustedbsd/audit3/sys/security/audit/audit_syscalls.c#14 edit
Differences ...
==== //depot/projects/trustedbsd/audit3/sys/security/audit/audit_syscalls.c#14 (text+ko) ====
@@ -525,7 +525,7 @@
struct ucred *cred;
struct vnode *vp;
int error = 0;
- int flags;
+ int flags, vfslocked;
error = suser(td);
if (error)
@@ -544,25 +544,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);
@@ -572,10 +568,8 @@
*/
audit_suspended = 0;
- mtx_unlock(&Giant);
audit_rotate_vnode(cred, vp);
-err_out:
return (error);
}
More information about the trustedbsd-cvs
mailing list