Merge remote-tracking branch 'lsk/v3.10/topic/aosp' into linux-linaro-lsk-android
[firefly-linux-kernel-4.4.55.git] / net / ipv6 / addrconf.c
index 08b13803d617d0e241f0395a58e6e16fa7c79cec..05e05968c5dd1c566e6139098dcb98fe8a2c2dfd 100644 (file)
@@ -1534,7 +1534,9 @@ int ipv6_chk_addr(struct net *net, const struct in6_addr *addr,
                if (!net_eq(dev_net(ifp->idev->dev), net))
                        continue;
                if (ipv6_addr_equal(&ifp->addr, addr) &&
-                   !(ifp->flags&IFA_F_TENTATIVE) &&
+                   (!(ifp->flags&IFA_F_TENTATIVE) ||
+                    (ipv6_use_optimistic_addr(ifp->idev) &&
+                     ifp->flags&IFA_F_OPTIMISTIC)) &&
                    (dev == NULL || ifp->idev->dev == dev ||
                     !(ifp->scope&(IFA_LINK|IFA_HOST) || strict))) {
                        rcu_read_unlock_bh();