• Linus Torvalds's avatar
    watchqueue: make sure to serialize 'wqueue->defunct' properly · 353f7988
    Linus Torvalds authored
    When the pipe is closed, we mark the associated watchqueue defunct by
    calling watch_queue_clear().  However, while that is protected by the
    watchqueue lock, new watchqueue entries aren't actually added under that
    lock at all: they use the pipe->rd_wait.lock instead, and looking up
    that pipe happens without any locking.
    
    The watchqueue code uses the RCU read-side section to make sure that the
    wqueue entry itself hasn't disappeared, but that does not protect the
    pipe_info in any way.
    
    So make sure to actually hold the wqueue lock when posting watch events,
    properly serializing against the pipe being torn down.
    Reported-by: default avatarNoam Rathaus <noamr@ssd-disclosure.com>
    Cc: Greg KH <gregkh@linuxfoundation.org>
    Cc: David Howells <dhowells@redhat.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    353f7988
watch_queue.c 16.9 KB