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
b3080da236
commit
4c87f20f3a
@ -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