mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	IPVS netns exit causes crash in conntrack
Quote from Patric Mc Hardy "This looks like nfnetlink.c excited and destroyed the nfnl socket, but ip_vs was still holding a reference to a conntrack. When the conntrack got destroyed it created a ctnetlink event, causing an oops in netlink_has_listeners when trying to use the destroyed nfnetlink socket." If nf_conntrack_netlink is loaded before ip_vs this is not a problem. This patch simply avoids calling ip_vs_conn_drop_conntrack() when netns is dying as suggested by Julian. Signed-off-by: Hans Schillstrom <hans.schillstrom@ericsson.com> Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
		
							parent
							
								
									d232b8dded
								
							
						
					
					
						commit
						8f4e0a1868
					
				| @ -776,8 +776,16 @@ static void ip_vs_conn_expire(unsigned long data) | |||||||
| 		if (cp->control) | 		if (cp->control) | ||||||
| 			ip_vs_control_del(cp); | 			ip_vs_control_del(cp); | ||||||
| 
 | 
 | ||||||
| 		if (cp->flags & IP_VS_CONN_F_NFCT) | 		if (cp->flags & IP_VS_CONN_F_NFCT) { | ||||||
| 			ip_vs_conn_drop_conntrack(cp); | 			ip_vs_conn_drop_conntrack(cp); | ||||||
|  | 			/* Do not access conntracks during subsys cleanup
 | ||||||
|  | 			 * because nf_conntrack_find_get can not be used after | ||||||
|  | 			 * conntrack cleanup for the net. | ||||||
|  | 			 */ | ||||||
|  | 			smp_rmb(); | ||||||
|  | 			if (ipvs->enable) | ||||||
|  | 				ip_vs_conn_drop_conntrack(cp); | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		ip_vs_pe_put(cp->pe); | 		ip_vs_pe_put(cp->pe); | ||||||
| 		kfree(cp->pe_data); | 		kfree(cp->pe_data); | ||||||
|  | |||||||
| @ -1945,6 +1945,7 @@ static void __net_exit __ip_vs_dev_cleanup(struct net *net) | |||||||
| { | { | ||||||
| 	EnterFunction(2); | 	EnterFunction(2); | ||||||
| 	net_ipvs(net)->enable = 0;	/* Disable packet reception */ | 	net_ipvs(net)->enable = 0;	/* Disable packet reception */ | ||||||
|  | 	smp_wmb(); | ||||||
| 	__ip_vs_sync_cleanup(net); | 	__ip_vs_sync_cleanup(net); | ||||||
| 	LeaveFunction(2); | 	LeaveFunction(2); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Hans Schillstrom
						Hans Schillstrom