The write socket should be passed to the write filter otherwise checks are performed against the wrong socket.
ok? Index: miscfs/fifofs/fifo_vnops.c =================================================================== RCS file: /cvs/src/sys/miscfs/fifofs/fifo_vnops.c,v retrieving revision 1.73 diff -u -p -r1.73 fifo_vnops.c --- miscfs/fifofs/fifo_vnops.c 20 Feb 2020 16:56:52 -0000 1.73 +++ miscfs/fifofs/fifo_vnops.c 7 Apr 2020 10:06:13 -0000 @@ -507,16 +507,19 @@ int fifo_kqfilter(void *v) { struct vop_kqfilter_args *ap = v; - struct socket *so = (struct socket *)ap->a_vp->v_fifoinfo->fi_readsock; + struct socket *so; + struct fifoinfo *fip = ap->a_vp->v_fifoinfo; struct sockbuf *sb; switch (ap->a_kn->kn_filter) { case EVFILT_READ: ap->a_kn->kn_fop = &fiforead_filtops; + so = fip->fi_readsock; sb = &so->so_rcv; break; case EVFILT_WRITE: ap->a_kn->kn_fop = &fifowrite_filtops; + so = fip->fi_writesock; sb = &so->so_snd; break; default: