diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2012-03-07 08:45:43 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-03-08 00:13:42 +0400 |
commit | b4fb05ea402cb6930b40d3152d8acabc391b23e2 (patch) | |
tree | 6d8e347a2a10fe9a260c322409e793796ba5ce57 /net/ipv4/tcp_ipv4.c | |
parent | ae5d33723e325392c48bc0ff481d9ec8d646a0ed (diff) | |
download | linux-b4fb05ea402cb6930b40d3152d8acabc391b23e2.tar.xz |
tcp: md5: correct a RCU lockdep splat
commit a8afca0329 (tcp: md5: protects md5sig_info with RCU) added a
lockdep splat in tcp_md5_do_lookup() in case a timer fires a tcp
retransmit.
At this point, socket lock is owned by the sofirq handler, not the user,
so we should adjust a bit the lockdep condition, as we dont hold
rcu_read_lock().
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Reported-by: Valdis Kletnieks <valdis.kletnieks@vt.edu>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 94abee8cf563..507924b640ef 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -927,7 +927,8 @@ struct tcp_md5sig_key *tcp_md5_do_lookup(struct sock *sk, /* caller either holds rcu_read_lock() or socket lock */ md5sig = rcu_dereference_check(tp->md5sig_info, - sock_owned_by_user(sk)); + sock_owned_by_user(sk) || + lockdep_is_held(&sk->sk_lock.slock)); if (!md5sig) return NULL; #if IS_ENABLED(CONFIG_IPV6) |