forked from mirrors/linux
		
	net: add missing bh_unlock_sock() calls
Simon Kirby reported lockdep warnings and following messages : [104661.897577] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000101, exited with 00000102? [104661.923653] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000101, exited with 00000102? Problem comes from commit0e734419(ipv4: Use inet_csk_route_child_sock() in DCCP and TCP.) If inet_csk_route_child_sock() returns NULL, we should release socket lock before freeing it. Another lock imbalance exists if __inet_inherit_port() returns an error since commit093d282321( tproxy: fix hash locking issue when using port redirection in __inet_inherit_port()) a backport is also needed for >= 2.6.37 kernels. Reported-by: Simon Kirby <sim@hostway.ca> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Tested-by: Eric Dumazet <eric.dumazet@gmail.com> CC: Balazs Scheidler <bazsi@balabit.hu> CC: KOVACS Krisztian <hidden@balabit.hu> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Simon Kirby <sim@hostway.ca> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									e2e210c023
								
							
						
					
					
						commit
						918eb39962
					
				
					 2 changed files with 2 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -433,6 +433,7 @@ struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb,
 | 
			
		|||
	NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
 | 
			
		||||
	return NULL;
 | 
			
		||||
put_and_exit:
 | 
			
		||||
	bh_unlock_sock(newsk);
 | 
			
		||||
	sock_put(newsk);
 | 
			
		||||
	goto exit;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1510,6 +1510,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
 | 
			
		|||
	NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
 | 
			
		||||
	return NULL;
 | 
			
		||||
put_and_exit:
 | 
			
		||||
	bh_unlock_sock(newsk);
 | 
			
		||||
	sock_put(newsk);
 | 
			
		||||
	goto exit;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue