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)
This commit is contained in:
parent
8740a7112e
commit
9bec6325ad
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=255510
@ -267,6 +267,8 @@ vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred,
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user