Skip to content

Commit 3107d4d

Browse files
edumazetgregkh
authored andcommitted
tcp/dccp: fix lockdep splat in inet_csk_route_req()
[ Upstream commit a6ca7ab ] 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: c92e8c0 ("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 ec5caf5 commit 3107d4d

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
@@ -410,7 +410,8 @@ struct dst_entry *inet_csk_route_req(const struct sock *sk,
410410
struct ip_options_rcu *opt;
411411
struct rtable *rt;
412412

413-
opt = rcu_dereference(ireq->ireq_opt);
413+
opt = rcu_dereference_protected(ireq->ireq_opt,
414+
atomic_read(&req->rsk_refcnt) > 0);
414415
flowi4_init_output(fl4, ireq->ir_iif, ireq->ir_mark,
415416
RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE,
416417
sk->sk_protocol, inet_sk_flowi_flags(sk),

0 commit comments

Comments
 (0)