diff options
Diffstat (limited to 'net/ipv6/ip6_output.c')
-rw-r--r-- | net/ipv6/ip6_output.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index ece2781a31b2..bcdb615aed6e 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -138,6 +138,14 @@ static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *s | |||
138 | return ret; | 138 | return ret; |
139 | } | 139 | } |
140 | 140 | ||
141 | #if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM) | ||
142 | /* Policy lookup after SNAT yielded a new policy */ | ||
143 | if (skb_dst(skb)->xfrm) { | ||
144 | IPCB(skb)->flags |= IPSKB_REROUTED; | ||
145 | return dst_output(net, sk, skb); | ||
146 | } | ||
147 | #endif | ||
148 | |||
141 | if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) || | 149 | if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) || |
142 | dst_allfrag(skb_dst(skb)) || | 150 | dst_allfrag(skb_dst(skb)) || |
143 | (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size)) | 151 | (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size)) |