On 5/12/17 6:03 PM, Mahesh Bandewar wrote: > From: Mahesh Bandewar <mahe...@google.com> > > Every address gets added with TENTATIVE flag even for the addresses with > IFA_F_NODAD flag and dad-work is scheduled for them. During this DAD process > we realize it's an address with NODAD and complete the process without > sending any probe. However the TENTATIVE flags stays on the > address for sometime enough to cause misinterpretation when we receive a NS. > While processing NS, if the address has TENTATIVE flag, we mark it DADFAILED > and endup with an address that was originally configured as NODAD with > DADFAILED. > > We can't avoid scheduling dad_work for addresses with NODAD but we can > avoid adding TENTATIVE flag to avoid this racy situation. > > Signed-off-by: Mahesh Bandewar <mahe...@google.com> > --- > net/ipv6/addrconf.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c > index b09ac38d8dc4..53f2dc092023 100644 > --- a/net/ipv6/addrconf.c > +++ b/net/ipv6/addrconf.c > @@ -1022,7 +1022,10 @@ ipv6_add_addr(struct inet6_dev *idev, const struct > in6_addr *addr, > INIT_HLIST_NODE(&ifa->addr_lst); > ifa->scope = scope; > ifa->prefix_len = pfxlen; > - ifa->flags = flags | IFA_F_TENTATIVE; > + ifa->flags = flags; > + /* No need to add the TENTATIVE flag for addresses with NODAD */ > + if (!(flags & IFA_F_NODAD)) > + ifa->flags |= IFA_F_TENTATIVE; > ifa->valid_lft = valid_lft; > ifa->prefered_lft = prefered_lft; > ifa->cstamp = ifa->tstamp = jiffies; >
LGTM. Acked-by: David Ahern <dsah...@gmail.com>