forked from mirrors/linux
		
	udp: check udp sock encap_type in __udp_lib_err
There is a chance that __udp4/6_lib_lookup() returns a udp encap sock in __udp_lib_err(), like the udp encap listening sock may use the same port as remote encap port, in which case it should go to __udp4/6_lib_err_encap() for more validation before processing the icmp packet. This patch is to check encap_type in __udp_lib_err() for the further validation for a encap sock. Signed-off-by: Xin Long <lucien.xin@gmail.com> Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
		
							parent
							
								
									1fb7419198
								
							
						
					
					
						commit
						d26796ae58
					
				
					 2 changed files with 2 additions and 2 deletions
				
			
		|  | @ -702,7 +702,7 @@ int __udp4_lib_err(struct sk_buff *skb, u32 info, struct udp_table *udptable) | |||
| 	sk = __udp4_lib_lookup(net, iph->daddr, uh->dest, | ||||
| 			       iph->saddr, uh->source, skb->dev->ifindex, | ||||
| 			       inet_sdif(skb), udptable, NULL); | ||||
| 	if (!sk) { | ||||
| 	if (!sk || udp_sk(sk)->encap_type) { | ||||
| 		/* No socket for error: try tunnels before discarding */ | ||||
| 		sk = ERR_PTR(-ENOENT); | ||||
| 		if (static_branch_unlikely(&udp_encap_needed_key)) { | ||||
|  |  | |||
|  | @ -560,7 +560,7 @@ int __udp6_lib_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
| 
 | ||||
| 	sk = __udp6_lib_lookup(net, daddr, uh->dest, saddr, uh->source, | ||||
| 			       inet6_iif(skb), inet6_sdif(skb), udptable, NULL); | ||||
| 	if (!sk) { | ||||
| 	if (!sk || udp_sk(sk)->encap_type) { | ||||
| 		/* No socket for error: try tunnels before discarding */ | ||||
| 		sk = ERR_PTR(-ENOENT); | ||||
| 		if (static_branch_unlikely(&udpv6_encap_needed_key)) { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Xin Long
						Xin Long