Author: markj
Date: Tue Mar  5 19:39:13 2019
New Revision: 344820
URL: https://svnweb.freebsd.org/changeset/base/344820

Log:
  MFC r344278:
  Move a racy assertion in filt_pipewrite().
  
  PR:   235640

Modified:
  stable/11/sys/kern/sys_pipe.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/kern/sys_pipe.c
==============================================================================
--- stable/11/sys/kern/sys_pipe.c       Tue Mar  5 19:37:06 2019        
(r344819)
+++ stable/11/sys/kern/sys_pipe.c       Tue Mar  5 19:39:13 2019        
(r344820)
@@ -1809,15 +1809,19 @@ static int
 filt_pipewrite(struct knote *kn, long hint)
 {
        struct pipe *wpipe;
-   
+
+       /*
+        * If this end of the pipe is closed, the knote was removed from the
+        * knlist and the list lock (i.e., the pipe lock) is therefore not held.
+        */
        wpipe = kn->kn_hook;
-       PIPE_LOCK_ASSERT(wpipe, MA_OWNED);
        if (wpipe->pipe_present != PIPE_ACTIVE ||
            (wpipe->pipe_state & PIPE_EOF)) {
                kn->kn_data = 0;
                kn->kn_flags |= EV_EOF;
                return (1);
        }
+       PIPE_LOCK_ASSERT(wpipe, MA_OWNED);
        kn->kn_data = (wpipe->pipe_buffer.size > 0) ?
            (wpipe->pipe_buffer.size - wpipe->pipe_buffer.cnt) : PIPE_BUF;
        if (wpipe->pipe_state & PIPE_DIRECTW)
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to