aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/addrconf.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 31bdedc32bdd..ad235690684c 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -2657,8 +2657,18 @@ static void init_loopback(struct net_device *dev)
2657 if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE)) 2657 if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE))
2658 continue; 2658 continue;
2659 2659
2660 if (sp_ifa->rt) 2660 if (sp_ifa->rt) {
2661 continue; 2661 /* This dst has been added to garbage list when
2662 * lo device down, release this obsolete dst and
2663 * reallocate a new router for ifa.
2664 */
2665 if (sp_ifa->rt->dst.obsolete > 0) {
2666 ip6_rt_put(sp_ifa->rt);
2667 sp_ifa->rt = NULL;
2668 } else {
2669 continue;
2670 }
2671 }
2662 2672
2663 sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, false); 2673 sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, false);
2664 2674