aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ip6mr.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/ip6mr.c')
-rw-r--r--net/ipv6/ip6mr.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
index 705c82886281..449a9185b8f2 100644
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
@@ -51,6 +51,7 @@
51#include <linux/pim.h> 51#include <linux/pim.h>
52#include <net/addrconf.h> 52#include <net/addrconf.h>
53#include <linux/netfilter_ipv6.h> 53#include <linux/netfilter_ipv6.h>
54#include <linux/export.h>
54#include <net/ip6_checksum.h> 55#include <net/ip6_checksum.h>
55 56
56struct mr6_table { 57struct mr6_table {
@@ -696,8 +697,10 @@ static netdev_tx_t reg_vif_xmit(struct sk_buff *skb,
696 int err; 697 int err;
697 698
698 err = ip6mr_fib_lookup(net, &fl6, &mrt); 699 err = ip6mr_fib_lookup(net, &fl6, &mrt);
699 if (err < 0) 700 if (err < 0) {
701 kfree_skb(skb);
700 return err; 702 return err;
703 }
701 704
702 read_lock(&mrt_lock); 705 read_lock(&mrt_lock);
703 dev->stats.tx_bytes += skb->len; 706 dev->stats.tx_bytes += skb->len;
@@ -2052,8 +2055,10 @@ int ip6_mr_input(struct sk_buff *skb)
2052 int err; 2055 int err;
2053 2056
2054 err = ip6mr_fib_lookup(net, &fl6, &mrt); 2057 err = ip6mr_fib_lookup(net, &fl6, &mrt);
2055 if (err < 0) 2058 if (err < 0) {
2059 kfree_skb(skb);
2056 return err; 2060 return err;
2061 }
2057 2062
2058 read_lock(&mrt_lock); 2063 read_lock(&mrt_lock);
2059 cache = ip6mr_cache_find(mrt, 2064 cache = ip6mr_cache_find(mrt,