Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Sep 2013 06:52:23 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r255510 - head/sys/kern
Message-ID:  <201309130652.r8D6qNpC062851@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309130652.r8D6qNpC062851>