|
@@ -788,10 +788,16 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
|
|
|
struct in6_addr prefix;
|
|
|
struct rt6_info *rt;
|
|
|
struct net *net = dev_net(ifp->idev->dev);
|
|
|
+ struct flowi6 fl6 = {};
|
|
|
+
|
|
|
ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len);
|
|
|
- rt = rt6_lookup(net, &prefix, NULL, ifp->idev->dev->ifindex, 1);
|
|
|
+ fl6.flowi6_oif = ifp->idev->dev->ifindex;
|
|
|
+ fl6.daddr = prefix;
|
|
|
+ rt = (struct rt6_info *)ip6_route_lookup(net, &fl6,
|
|
|
+ RT6_LOOKUP_F_IFACE);
|
|
|
|
|
|
- if (rt && addrconf_is_prefix_route(rt)) {
|
|
|
+ if (rt != net->ipv6.ip6_null_entry &&
|
|
|
+ addrconf_is_prefix_route(rt)) {
|
|
|
if (onlink == 0) {
|
|
|
ip6_del_rt(rt);
|
|
|
rt = NULL;
|