ip_tunnel: fix possible rtable leak
authorDmitry Popov <ixaphire@qrator.net>
Fri, 6 Jun 2014 00:34:37 +0000 (04:34 +0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 6 Jun 2014 01:44:44 +0000 (18:44 -0700)
ip_rt_put(rt) is always called in "error" branches above, but was missed in
skb_cow_head branch. As rt is not yet bound to skb here we have to release it by
hand.

Signed-off-by: Dmitry Popov <ixaphire@qrator.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ip_tunnel.c

index 2acc2337d38bfe7f35517e13952cfa8a306c24fd..3f6135bc54ef07cc2c71838f619897752d414b75 100644 (file)
@@ -668,6 +668,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
                dev->needed_headroom = max_headroom;
 
        if (skb_cow_head(skb, dev->needed_headroom)) {
+               ip_rt_put(rt);
                dev->stats.tx_dropped++;
                kfree_skb(skb);
                return;