|
|
@@ -758,9 +758,11 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t,
|
|
|
ldev = dev_get_by_index_rcu(net, p->link);
|
|
|
|
|
|
if ((ipv6_addr_is_multicast(laddr) ||
|
|
|
- likely(ipv6_chk_addr(net, laddr, ldev, 0))) &&
|
|
|
+ likely(ipv6_chk_addr_and_flags(net, laddr, ldev, false,
|
|
|
+ 0, IFA_F_TENTATIVE))) &&
|
|
|
((p->flags & IP6_TNL_F_ALLOW_LOCAL_REMOTE) ||
|
|
|
- likely(!ipv6_chk_addr(net, raddr, NULL, 0))))
|
|
|
+ likely(!ipv6_chk_addr_and_flags(net, raddr, ldev, true,
|
|
|
+ 0, IFA_F_TENTATIVE))))
|
|
|
ret = 1;
|
|
|
}
|
|
|
return ret;
|
|
|
@@ -990,12 +992,14 @@ int ip6_tnl_xmit_ctl(struct ip6_tnl *t,
|
|
|
if (p->link)
|
|
|
ldev = dev_get_by_index_rcu(net, p->link);
|
|
|
|
|
|
- if (unlikely(!ipv6_chk_addr(net, laddr, ldev, 0)))
|
|
|
+ if (unlikely(!ipv6_chk_addr_and_flags(net, laddr, ldev, false,
|
|
|
+ 0, IFA_F_TENTATIVE)))
|
|
|
pr_warn("%s xmit: Local address not yet configured!\n",
|
|
|
p->name);
|
|
|
else if (!(p->flags & IP6_TNL_F_ALLOW_LOCAL_REMOTE) &&
|
|
|
!ipv6_addr_is_multicast(raddr) &&
|
|
|
- unlikely(ipv6_chk_addr(net, raddr, NULL, 0)))
|
|
|
+ unlikely(ipv6_chk_addr_and_flags(net, raddr, ldev,
|
|
|
+ true, 0, IFA_F_TENTATIVE)))
|
|
|
pr_warn("%s xmit: Routing loop! Remote address found on this node!\n",
|
|
|
p->name);
|
|
|
else
|