forked from mirrors/linux
		
	ipv6: Reinject IPv6 packets if IPsec policy matches after SNAT
If SNAT modifies the source address the resulting packet might match an IPsec policy, reinject the packet if that's the case. The exact same thing is already done for IPv4. Signed-off-by: Tobias Brunner <tobias@strongswan.org> Acked-by: Steffen Klassert <steffen.klassert@secunet.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									18feb87105
								
							
						
					
					
						commit
						09ee9dba96
					
				
					 1 changed files with 8 additions and 0 deletions
				
			
		| 
						 | 
					@ -138,6 +138,14 @@ static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *s
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
 | 
				
			||||||
 | 
						/* Policy lookup after SNAT yielded a new policy */
 | 
				
			||||||
 | 
						if (skb_dst(skb)->xfrm) {
 | 
				
			||||||
 | 
							IPCB(skb)->flags |= IPSKB_REROUTED;
 | 
				
			||||||
 | 
							return dst_output(net, sk, skb);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
 | 
						if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
 | 
				
			||||||
	    dst_allfrag(skb_dst(skb)) ||
 | 
						    dst_allfrag(skb_dst(skb)) ||
 | 
				
			||||||
	    (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
 | 
						    (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue