aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2012-03-06 23:45:43 -0500
committerDavid S. Miller <davem@davemloft.net>2012-03-07 15:13:42 -0500
commitb4fb05ea402cb6930b40d3152d8acabc391b23e2 (patch)
tree6d8e347a2a10fe9a260c322409e793796ba5ce57 /net/ipv4
parentae5d33723e325392c48bc0ff481d9ec8d646a0ed (diff)
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')
-rw-r--r--net/ipv4/tcp_ipv4.c3
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,
927 927
928 /* caller either holds rcu_read_lock() or socket lock */ 928 /* caller either holds rcu_read_lock() or socket lock */
929 md5sig = rcu_dereference_check(tp->md5sig_info, 929 md5sig = rcu_dereference_check(tp->md5sig_info,
930 sock_owned_by_user(sk)); 930 sock_owned_by_user(sk) ||
931 lockdep_is_held(&sk->sk_lock.slock));
931 if (!md5sig) 932 if (!md5sig)
932 return NULL; 933 return NULL;
933#if IS_ENABLED(CONFIG_IPV6) 934#if IS_ENABLED(CONFIG_IPV6)