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:

Reply via email to