]> git.hungrycats.org Git - linux/commitdiff
ip_tunnel: Do not use stale inner_iph pointer.
authorPravin B Shelar <pshelar@nicira.com>
Wed, 25 Sep 2013 16:57:47 +0000 (09:57 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Oct 2013 01:14:26 +0000 (18:14 -0700)
[ Upstream commit d4a71b155c12d0d429c6b69d94076d6d57e2a7a7 ]

While sending packet skb_cow_head() can change skb header which
invalidates inner_iph pointer to skb header. Following patch
avoid using it. Found by code inspection.

This bug was introduced by commit 0e6fbc5b6c6218 (ip_tunnels: extend
iptunnel_xmit()).

Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/ipv4/ip_tunnel.c

index ca1cb2d5f6e2bcb81eea9d35e3178518492a7a63..bb7cf05645894e4cf04aae868b56c57b4579b189 100644 (file)
@@ -626,6 +626,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
                        tunnel->err_count = 0;
        }
 
+       tos = ip_tunnel_ecn_encap(tos, inner_iph, skb);
        ttl = tnl_params->ttl;
        if (ttl == 0) {
                if (skb->protocol == htons(ETH_P_IP))
@@ -655,7 +656,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
 
        err = iptunnel_xmit(dev_net(dev), rt, skb,
                            fl4.saddr, fl4.daddr, protocol,
-                           ip_tunnel_ecn_encap(tos, inner_iph, skb), ttl, df);
+                           tos, ttl, df);
        iptunnel_xmit_stats(err, &dev->stats, dev->tstats);
 
        return;