• Eric Dumazet's avatar
    inet: fix race in reqsk_queue_unlink() · 2306c704
    Eric Dumazet authored
    reqsk_timer_handler() tests if icsk_accept_queue.listen_opt
    is NULL at its beginning.
    
    By the time it calls inet_csk_reqsk_queue_drop() and
    reqsk_queue_unlink(), listener might have been closed and
    inet_csk_listen_stop() had called reqsk_queue_yank_acceptq()
    which sets icsk_accept_queue.listen_opt to NULL
    
    We therefore need to correctly check listen_opt being NULL
    after holding syn_wait_lock for proper synchronization.
    
    Fixes: fa76ce73 ("inet: get rid of central tcp/dccp listener timer")
    Fixes: b357a364 ("inet: fix possible panic in reqsk_queue_unlink()")
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2306c704
inet_connection_sock.c 27.3 KB