diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2021-04-28 15:45:36 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2021-04-30 14:43:45 +0000 |
commit | 2082565798041ceb9fb77137f00ea6b0ff50fe5e (patch) | |
tree | 1cc2d44fe6f00abe528083101df1ed88b1b6605e | |
parent | 72a42ec63b4a98f812f5f6164415eeb9a55e1933 (diff) | |
download | src-2082565798041ceb9fb77137f00ea6b0ff50fe5e.tar.gz src-2082565798041ceb9fb77137f00ea6b0ff50fe5e.zip |
O_PATH: disable kqfilter for fifos
Filter on fifos is real filter for the object, and not a filesystem
events filter like EVFILT_VNODE.
Reported by: markj using syzkaller
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 3 days
-rw-r--r-- | sys/kern/vfs_vnops.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index f715c9828d04..832c717a33b7 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -427,7 +427,10 @@ vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred, return (error); } if ((fmode & O_PATH) != 0) { - error = VOP_ACCESS(vp, VREAD, cred, td); + if (vp->v_type == VFIFO) + error = EPIPE; + else + error = VOP_ACCESS(vp, VREAD, cred, td); if (error == 0) fp->f_flag |= FKQALLOWED; return (0); |