summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Popov <ixaphire@qrator.net>2014-06-06 02:34:37 +0200
committerDavid S. Miller <davem@davemloft.net>2014-06-06 03:44:44 +0200
commit586d5fc867be8f03c049b4b89fd29d0b8b02cab5 (patch)
tree8ca1d723c8c4b442f23b19dd6f189e61f445c40a
parentnet: filter: fix SKF_AD_PKTTYPE extension on big-endian (diff)
downloadlinux-586d5fc867be8f03c049b4b89fd29d0b8b02cab5.tar.xz
linux-586d5fc867be8f03c049b4b89fd29d0b8b02cab5.zip
ip_tunnel: fix possible rtable leak
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>
-rw-r--r--net/ipv4/ip_tunnel.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index 2acc2337d38b..3f6135bc54ef 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -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;