Author: jhb
Date: Tue Nov  4 22:31:04 2008
New Revision: 184661
URL: http://svn.freebsd.org/changeset/base/184661

Log:
  Use shared vnode locks for auditing vnode arguments as auditing only
  does a VOP_GETATTR() which does not require an exclusive lock.
  
  Reviewed by:  csjp, rwatson

Modified:
  head/sys/kern/vfs_syscalls.c
  head/sys/security/audit/audit_arg.c

Modified: head/sys/kern/vfs_syscalls.c
==============================================================================
--- head/sys/kern/vfs_syscalls.c        Tue Nov  4 22:30:24 2008        
(r184660)
+++ head/sys/kern/vfs_syscalls.c        Tue Nov  4 22:31:04 2008        
(r184661)
@@ -2734,7 +2734,7 @@ fchflags(td, uap)
                return (error);
        vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
 #ifdef AUDIT
-       vn_lock(fp->f_vnode, LK_EXCLUSIVE | LK_RETRY);
+       vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY);
        AUDIT_ARG(vnode, fp->f_vnode, ARG_VNODE1);
        VOP_UNLOCK(fp->f_vnode, 0);
 #endif
@@ -2896,7 +2896,7 @@ fchmod(td, uap)
                return (error);
        vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
 #ifdef AUDIT
-       vn_lock(fp->f_vnode, LK_EXCLUSIVE | LK_RETRY);
+       vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY);
        AUDIT_ARG(vnode, fp->f_vnode, ARG_VNODE1);
        VOP_UNLOCK(fp->f_vnode, 0);
 #endif
@@ -3074,7 +3074,7 @@ fchown(td, uap)
                return (error);
        vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
 #ifdef AUDIT
-       vn_lock(fp->f_vnode, LK_EXCLUSIVE | LK_RETRY);
+       vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY);
        AUDIT_ARG(vnode, fp->f_vnode, ARG_VNODE1);
        VOP_UNLOCK(fp->f_vnode, 0);
 #endif
@@ -3311,7 +3311,7 @@ kern_futimes(struct thread *td, int fd, 
                return (error);
        vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
 #ifdef AUDIT
-       vn_lock(fp->f_vnode, LK_EXCLUSIVE | LK_RETRY);
+       vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY);
        AUDIT_ARG(vnode, fp->f_vnode, ARG_VNODE1);
        VOP_UNLOCK(fp->f_vnode, 0);
 #endif

Modified: head/sys/security/audit/audit_arg.c
==============================================================================
--- head/sys/security/audit/audit_arg.c Tue Nov  4 22:30:24 2008        
(r184660)
+++ head/sys/security/audit/audit_arg.c Tue Nov  4 22:31:04 2008        
(r184661)
@@ -631,7 +631,7 @@ audit_arg_file(struct proc *p, struct fi
                 */
                vp = fp->f_vnode;
                vfslocked = VFS_LOCK_GIANT(vp->v_mount);
-               vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+               vn_lock(vp, LK_SHARED | LK_RETRY);
                audit_arg_vnode(vp, ARG_VNODE1);
                VOP_UNLOCK(vp, 0);
                VFS_UNLOCK_GIANT(vfslocked);
@@ -849,7 +849,7 @@ audit_sysclose(struct thread *td, int fd
 
        vp = fp->f_vnode;
        vfslocked = VFS_LOCK_GIANT(vp->v_mount);
-       vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+       vn_lock(vp, LK_SHARED | LK_RETRY);
        audit_arg_vnode(vp, ARG_VNODE1);
        VOP_UNLOCK(vp, 0);
        VFS_UNLOCK_GIANT(vfslocked);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to