diff options
Diffstat (limited to 'net/ipv6/ip6mr.c')
-rw-r--r-- | net/ipv6/ip6mr.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index 82a809901f8..def0538e241 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c | |||
@@ -696,8 +696,10 @@ static netdev_tx_t reg_vif_xmit(struct sk_buff *skb, | |||
696 | int err; | 696 | int err; |
697 | 697 | ||
698 | err = ip6mr_fib_lookup(net, &fl6, &mrt); | 698 | err = ip6mr_fib_lookup(net, &fl6, &mrt); |
699 | if (err < 0) | 699 | if (err < 0) { |
700 | kfree_skb(skb); | ||
700 | return err; | 701 | return err; |
702 | } | ||
701 | 703 | ||
702 | read_lock(&mrt_lock); | 704 | read_lock(&mrt_lock); |
703 | dev->stats.tx_bytes += skb->len; | 705 | dev->stats.tx_bytes += skb->len; |
@@ -1354,7 +1356,8 @@ int __init ip6_mr_init(void) | |||
1354 | goto add_proto_fail; | 1356 | goto add_proto_fail; |
1355 | } | 1357 | } |
1356 | #endif | 1358 | #endif |
1357 | rtnl_register(RTNL_FAMILY_IP6MR, RTM_GETROUTE, NULL, ip6mr_rtm_dumproute); | 1359 | rtnl_register(RTNL_FAMILY_IP6MR, RTM_GETROUTE, NULL, |
1360 | ip6mr_rtm_dumproute, NULL); | ||
1358 | return 0; | 1361 | return 0; |
1359 | #ifdef CONFIG_IPV6_PIMSM_V2 | 1362 | #ifdef CONFIG_IPV6_PIMSM_V2 |
1360 | add_proto_fail: | 1363 | add_proto_fail: |
@@ -2051,8 +2054,10 @@ int ip6_mr_input(struct sk_buff *skb) | |||
2051 | int err; | 2054 | int err; |
2052 | 2055 | ||
2053 | err = ip6mr_fib_lookup(net, &fl6, &mrt); | 2056 | err = ip6mr_fib_lookup(net, &fl6, &mrt); |
2054 | if (err < 0) | 2057 | if (err < 0) { |
2058 | kfree_skb(skb); | ||
2055 | return err; | 2059 | return err; |
2060 | } | ||
2056 | 2061 | ||
2057 | read_lock(&mrt_lock); | 2062 | read_lock(&mrt_lock); |
2058 | cache = ip6mr_cache_find(mrt, | 2063 | cache = ip6mr_cache_find(mrt, |