svn commit: r255510 - head/sys/kern

Konstantin Belousov kib at FreeBSD.org
Fri Sep 13 06:52:24 UTC 2013


Author: kib
Date: Fri Sep 13 06:52:23 2013
New Revision: 255510
URL: http://svnweb.freebsd.org/changeset/base/255510

Log:
  When opening or closing fifo, ensure that the vnode is locked
  exclusively.  Filesystems are assumed to disable shared locking for
  the fifo vnode locks, but some do not.
  
  Reported and tested by:	olgeni
  Discussed with:	avg
  Sponsored by:   The FreeBSD Foundation
  MFC after:	1 week
  Approved by:	re (glebius)

Modified:
  head/sys/kern/vfs_vnops.c

Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c	Fri Sep 13 06:39:10 2013	(r255509)
+++ head/sys/kern/vfs_vnops.c	Fri Sep 13 06:52:23 2013	(r255510)
@@ -267,6 +267,8 @@ vn_open_vnode(struct vnode *vp, int fmod
 				return (error);
 		}
 	}
+	if (vp->v_type == VFIFO && VOP_ISLOCKED(vp) != LK_EXCLUSIVE)
+		vn_lock(vp, LK_UPGRADE | LK_RETRY);
 	if ((error = VOP_OPEN(vp, fmode, cred, td, fp)) != 0)
 		return (error);
 
@@ -358,7 +360,7 @@ vn_close(vp, flags, file_cred, td)
 	struct mount *mp;
 	int error, lock_flags;
 
-	if (!(flags & FWRITE) && vp->v_mount != NULL &&
+	if (vp->v_type != VFIFO && !(flags & FWRITE) && vp->v_mount != NULL &&
 	    vp->v_mount->mnt_kern_flag & MNTK_EXTENDED_SHARED)
 		lock_flags = LK_SHARED;
 	else


More information about the svn-src-head mailing list