• Eric Dumazet's avatar
    tcp: md5: fix rcu lockdep splat · 80f03e27
    Eric Dumazet authored
    While timer handler effectively runs a rcu read locked section,
    there is no explicit rcu_read_lock()/rcu_read_unlock() annotations
    and lockdep can be confused here :
    
    net/ipv4/tcp_ipv4.c-906-        /* caller either holds rcu_read_lock() or socket lock */
    net/ipv4/tcp_ipv4.c:907:        md5sig = rcu_dereference_check(tp->md5sig_info,
    net/ipv4/tcp_ipv4.c-908-                                       sock_owned_by_user(sk) ||
    net/ipv4/tcp_ipv4.c-909-                                       lockdep_is_held(&sk->sk_lock.slock));
    
    Let's explicitely acquire rcu_read_lock() in tcp_make_synack()
    
    Before commit fa76ce73 ("inet: get rid of central tcp/dccp listener
    timer"), we were holding listener lock so lockdep was happy.
    
    Fixes: fa76ce73 ("inet: get rid of central tcp/dccp listener timer")
    Signed-off-by: default avatarEric DUmazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    80f03e27
tcp_output.c 99.4 KB