mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	tcp/dccp: fix lockdep splat in inet_csk_route_req()
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: c92e8c02fe ("tcp/dccp: fix ireq->opt races")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									3a91d29f20
								
							
						
					
					
						commit
						a6ca7abe53
					
				
					 1 changed files with 2 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -543,7 +543,8 @@ struct dst_entry *inet_csk_route_req(const struct sock *sk,
 | 
			
		|||
	struct ip_options_rcu *opt;
 | 
			
		||||
	struct rtable *rt;
 | 
			
		||||
 | 
			
		||||
	opt = rcu_dereference(ireq->ireq_opt);
 | 
			
		||||
	opt = rcu_dereference_protected(ireq->ireq_opt,
 | 
			
		||||
					refcount_read(&req->rsk_refcnt) > 0);
 | 
			
		||||
	flowi4_init_output(fl4, ireq->ir_iif, ireq->ir_mark,
 | 
			
		||||
			   RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE,
 | 
			
		||||
			   sk->sk_protocol, inet_sk_flowi_flags(sk),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue