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>