aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2021-04-28 15:45:36 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2021-04-30 14:43:45 +0000
commit2082565798041ceb9fb77137f00ea6b0ff50fe5e (patch)
tree1cc2d44fe6f00abe528083101df1ed88b1b6605e
parent72a42ec63b4a98f812f5f6164415eeb9a55e1933 (diff)
downloadsrc-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.c5
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);