From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BDDA4125A5 for ; Tue, 25 Jul 2023 08:06:15 +0000 (UTC) Received: from wout1-smtp.messagingengine.com (wout1-smtp.messagingengine.com [64.147.123.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE331E5 for ; Tue, 25 Jul 2023 01:06:10 -0700 (PDT) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 42CAB3200910; Tue, 25 Jul 2023 04:06:07 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Tue, 25 Jul 2023 04:06:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:sender:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; t=1690272366; x=1690358766; bh=d8UgxDMApZMQg ejxMufhY4/d4FqjWsPgqnNtYvmfTOU=; b=0b+XFz1Tu3SA+XHcphH4PvVAYe1HT Ty327CRSuOSMKT1xsHiLKf1Ktlm5BrUKEHwhqrsukQfuzR5z60l9HYlLlVc1ctbT VKvhxIgoHXsgfBDkwz+wZoy3IiJ7kyI00S2G/ChqXATmcPfbA8b2kwbunhQ645wL y3KbPbfrxbEX284jCFXd+7ucqAwe8SLqi242sZVq8RjapJ7eVbOpzcgFn2UZlCvi rq1NNZA+QosdsiZA4bIeWKCv/LRayeGk7LjXWhcHHt7YG4LHC/2h22F5XONGMwTN 2fSCE4wQoJ1XkhSd3GOadKi7RQB5ul1P1ygOzvhZwoB+k5xDZadvra78Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedviedrheelgdduvdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesthdtredttddtvdenucfhrhhomhepkfguohcu ufgthhhimhhmvghluceoihguohhstghhsehiughoshgthhdrohhrgheqnecuggftrfgrth htvghrnhepvddufeevkeehueegfedtvdevfefgudeifeduieefgfelkeehgeelgeejjeeg gefhnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepih guohhstghhsehiughoshgthhdrohhrgh X-ME-Proxy: Feedback-ID: i494840e7:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 25 Jul 2023 04:06:05 -0400 (EDT) Date: Tue, 25 Jul 2023 11:06:02 +0300 From: Ido Schimmel To: Hangbin Liu Cc: netdev@vger.kernel.org, "David S . Miller" , David Ahern , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Thomas Haller Subject: Re: [PATCHv3 net] ipv6: do not match device when remove source route Message-ID: References: <20230720065941.3294051-1-liuhangbin@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net On Mon, Jul 24, 2023 at 05:42:34PM +0800, Hangbin Liu wrote: > On Sun, Jul 23, 2023 at 11:13:36AM +0300, Ido Schimmel wrote: > > > BTW, to fix it, how about check if the IPv6 addr still exist. e.g. > > > > > > --- a/net/ipv6/route.c > > > +++ b/net/ipv6/route.c > > > @@ -4590,10 +4590,11 @@ static int fib6_remove_prefsrc(struct fib6_info *rt, void *arg) > > > struct net_device *dev = ((struct arg_dev_net_ip *)arg)->dev; > > > struct net *net = ((struct arg_dev_net_ip *)arg)->net; > > > struct in6_addr *addr = ((struct arg_dev_net_ip *)arg)->addr; > > > + u32 tb6_id = l3mdev_fib_table(dev) ? : RT_TABLE_MAIN; > > > > > > - if (!rt->nh && > > > - ((void *)rt->fib6_nh->fib_nh_dev == dev || !dev) && > > > - rt != net->ipv6.fib6_null_entry && > > > + if (rt != net->ipv6.fib6_null_entry && > > > + rt->fib6_table->tb6_id == tb6_id && > > > + !ipv6_chk_addr_and_flags(net, addr, NULL, true, 0, IFA_F_TENTATIVE) && > > > ipv6_addr_equal(addr, &rt->fib6_prefsrc.addr)) { > > > > ipv6_chk_addr_and_flags() is more expensive than ipv6_addr_equal() so > > better to first check that route indeed uses the address as the > > preferred source address and only then check if it exists. > > OK. > > > > Maybe you can even do it in rt6_remove_prefsrc(). That would be similar > > to what IPv4 is doing. > > Do you mean call ipv6_chk_addr_and_flags() in rt6_remove_prefsrc()? Yes.