summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Dichtel <nicolas.dichtel@6wind.com>2014-09-03 23:59:21 +0200
committerDavid S. Miller <davem@davemloft.net>2014-09-06 02:13:24 +0200
commitf24062b07dda89b0e24fa48e7bc3865a725f5ee6 (patch)
tree99d8da425d3074968570d56cd4931910df876f21
parentnet-timestamp: only report sw timestamp if reporting bit is set (diff)
downloadlinux-f24062b07dda89b0e24fa48e7bc3865a725f5ee6.tar.xz
linux-f24062b07dda89b0e24fa48e7bc3865a725f5ee6.zip
ipv6: fix a refcnt leak with peer addr
There is no reason to take a refcnt before deleting the peer address route. It's done some lines below for the local prefix route because inet6_ifa_finish_destroy() will release it at the end. For the peer address route, we want to free it right now. This bug has been introduced by commit caeaba79009c ("ipv6: add support of peer address"). Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv6/addrconf.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index aa0e135b808c..ce761c7e6675 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -4772,11 +4772,8 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
rt = rt6_lookup(dev_net(dev), &ifp->peer_addr, NULL,
dev->ifindex, 1);
- if (rt) {
- dst_hold(&rt->dst);
- if (ip6_del_rt(rt))
- dst_free(&rt->dst);
- }
+ if (rt && ip6_del_rt(rt))
+ dst_free(&rt->dst);
}
dst_hold(&ifp->rt->dst);