From patchwork Sat May 13 00:03:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mahesh Bandewar X-Patchwork-Id: 761899 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wPnBD3wsmz9s7y for ; Sat, 13 May 2017 10:03:48 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bandewar-net.20150623.gappssmtp.com header.i=@bandewar-net.20150623.gappssmtp.com header.b="kGud6egw"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757606AbdEMADp (ORCPT ); Fri, 12 May 2017 20:03:45 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:33961 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757496AbdEMADo (ORCPT ); Fri, 12 May 2017 20:03:44 -0400 Received: by mail-pf0-f193.google.com with SMTP id w69so8557834pfk.1 for ; Fri, 12 May 2017 17:03:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bandewar-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=TXfHZalITHV42WdMf/o3ElfF/0x0YZxKj5EzXOONsQ8=; b=kGud6egwZDmNd5Sx2OHtzD351116exPU95ixPgGQbLx/R7ajaEFoDvz0lZIWFWzW+J PI3t2tcha3wA9hh6FmJ0Z9rkse3iaw6J1ZnOMTDydBesocbloSWm6t+uFL+ChBza/W30 RawyMqzjvowb/NGf1qCsjhpQsiiEvZiAXPUyBf5MZ97mPz+s1mMzS+TqgKxylv+S8oIr cxShInkL0v8BrQKk7TCBBZPYszznHIluXQAACVlBBY7VBccjTXBu1+pwFhOzLULmWwi4 ohoBz1GI/xbARg9br7uE1urvC2I6JtspkWHCSzYLgsNDO1qhhahBGYJmXZsWHodsQseA Mp7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=TXfHZalITHV42WdMf/o3ElfF/0x0YZxKj5EzXOONsQ8=; b=GIMyfz4ouec1IGoBpV1IEzX1F/NTGCP/XxAjfKTC7sK/cTTchIIy8h5aIjAPs9netk x1fa1JHbC9Iyj+b04+BNDmtgUnLi/L8injKDjr8uHGYen6BGDepc+/AXlU7a554+CRDM 3aVxytiiHCgSRZevjsK40HBWzMzVrP8naHxhWys1D94cqrqV5SWUMPCupFdDRpWu6E4O ejL/xMJ3pdMUXbupCfvL3HOf/5wyeP4oCOP939IC22DA7c3k3nuIXxGE5iZpV72NKZRh OlIRuWTGgDc63PoaBbu1BmdB3KpzP2IkB6wEa81p0lVCfvi/umdd+J2ERoS4DUfSFKoB jpDw== X-Gm-Message-State: AODbwcCZoHnkkmzNw7frswtJmQVQLMrr3ezF8l+8/GTfQFEIilr1SBVF x7EdZ20zSwLksQ== X-Received: by 10.98.57.212 with SMTP id u81mr7292903pfj.9.1494633824070; Fri, 12 May 2017 17:03:44 -0700 (PDT) Received: from localhost ([2620:15c:2cb:201:d48d:9696:289:de18]) by smtp.gmail.com with ESMTPSA id b90sm7652066pfj.19.2017.05.12.17.03.43 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 12 May 2017 17:03:43 -0700 (PDT) From: Mahesh Bandewar To: Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , Patrick McHardy , netdev , David Miller Cc: Eric Dumazet , Mahesh Bandewar , Mahesh Bandewar Subject: [PATCH net] ipv6: avoid dad-failures for addresses with NODAD Date: Fri, 12 May 2017 17:03:39 -0700 Message-Id: <20170513000339.15843-1-mahesh@bandewar.net> X-Mailer: git-send-email 2.13.0.rc2.291.g57267f2277-goog Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Mahesh Bandewar 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 Acked-by: David Ahern --- 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;