Skip to content

Commit 6f8048c

Browse files
edumazetgregkh
authored andcommitted
tcp/dccp: fix lockdep splat in inet_csk_route_req()
[ Upstream commit a6ca7abe53633d08eea1c6756cb49c9b2d4c90bf ] This patch fixes the following lockdep splat in inet_csk_route_req() lockdep_rcu_suspicious inet_csk_route_req tcp_v4_send_synack tcp_rtx_synack inet_rtx_syn_ack tcp_fastopen_synack_time tcp_retransmit_timer tcp_write_timer_handler tcp_write_timer call_timer_fn Thread running inet_csk_route_req() owns a reference on the request socket, so we have the guarantee ireq->ireq_opt wont be changed or freed. lockdep can enforce this invariant for us. Fixes: c92e8c02fe66 ("tcp/dccp: fix ireq->opt races") Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 13eddc6 commit 6f8048c

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

net/ipv4/inet_connection_sock.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,8 @@ struct dst_entry *inet_csk_route_req(const struct sock *sk,
415415
struct ip_options_rcu *opt;
416416
struct rtable *rt;
417417

418-
opt = rcu_dereference(ireq->ireq_opt);
418+
opt = rcu_dereference_protected(ireq->ireq_opt,
419+
atomic_read(&req->rsk_refcnt) > 0);
419420
flowi4_init_output(fl4, ireq->ir_iif, ireq->ir_mark,
420421
RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE,
421422
sk->sk_protocol, inet_sk_flowi_flags(sk),

0 commit comments

Comments
 (0)