Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp1114067ybc; Tue, 19 Nov 2019 14:52:48 -0800 (PST) X-Google-Smtp-Source: APXvYqzhV41+4pH1PkuwpSQlD8y4QEcmjAxD2nJDGGUEZgEIlPtYg2AtLXi/N5pQUwIU9QNH0c3+ X-Received: by 2002:a17:906:351b:: with SMTP id r27mr268643eja.120.1574203968186; Tue, 19 Nov 2019 14:52:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574203968; cv=none; d=google.com; s=arc-20160816; b=x2UvaXmkPGBdNeae6Zme65+W0int8UrpR5qWIFW+6aohKNcCYCJ3W+dpTjQxiCZydk 3O5RVrHDWlHZpi51StgG8nCFOg6yCAnPxzoRqhBl/699u2wGgO0dAzttDr3gxY3xSNXL Yxav9y22gu9Ngsijh5IFmcAPvDMAwEArHIb/Ls4UyeSPgFXTavsTWdTuHy+2V0/NFG46 p/B7/EpLx/skux17bG8Cy8313AOpMYsUBo5l30wlFowRaK4uZBgnD4bfAdNh8xPKuyeB sr7L03NsjMaO1OMQzezPH02DiMaciU//ajwdM8lj18PwMH1pKm/TyVG/Daqt/q2VNXjS ITIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:from:subject:cc:to:message-id:date; bh=Ih6sMEZ+DprDRhH40vPhEmML25ALNC1AghxZaLwGZmQ=; b=mNBsqQFz67IPfjBFqG8L8HOaG7Kyfd6AGD8pV1psA0m8StiZVyeBo3oGy0Eo7eYZu6 U/aJk23ELlweZdlZCsKW81UqC8EKnGYNfJRiAmY1Ds3U2KYXwDYP0jTMJ09GYy+UW4K+ VFPZgMo2egGjZeYN6Cj3e2dZrrW7NPhtK4+R0YLA37fL24xpatDU9eMgO2P+CH/sujie +98izlH9qHAQDf8hljxm9Z0MB1QsWnOpIznoJgoBx/4NFeYJyDGmvBQzQRETw0McUgKm gnhrp6wS89za8grM9WSL1sQuTjfRXinT6el1NQEqfygV7Ow2zLRF6eT8cYyVOJUl9xMP MSag== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o12si15748587edv.43.2019.11.19.14.52.23; Tue, 19 Nov 2019 14:52:48 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727405AbfKSWux (ORCPT + 99 others); Tue, 19 Nov 2019 17:50:53 -0500 Received: from shards.monkeyblade.net ([23.128.96.9]:46166 "EHLO shards.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726290AbfKSWuw (ORCPT ); Tue, 19 Nov 2019 17:50:52 -0500 Received: from localhost (unknown [IPv6:2601:601:9f00:1e2::3d5]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) (Authenticated sender: davem-davemloft) by shards.monkeyblade.net (Postfix) with ESMTPSA id EC2671423DA68; Tue, 19 Nov 2019 14:50:51 -0800 (PST) Date: Tue, 19 Nov 2019 14:50:48 -0800 (PST) Message-Id: <20191119.145048.487849503145486152.davem@davemloft.net> To: anders.roxell@linaro.org Cc: kuznet@ms2.inr.ac.ru, yoshfuji@linux-ipv6.org, paulmck@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] net: ipmr: fix suspicious RCU warning From: David Miller In-Reply-To: <20191118090925.2474-1-anders.roxell@linaro.org> References: <20191118090925.2474-1-anders.roxell@linaro.org> X-Mailer: Mew version 6.8 on Emacs 26.1 Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.5.12 (shards.monkeyblade.net [149.20.54.216]); Tue, 19 Nov 2019 14:50:52 -0800 (PST) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Anders Roxell Date: Mon, 18 Nov 2019 10:09:25 +0100 > @@ -108,9 +108,18 @@ static void igmpmsg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt); > static void mroute_clean_tables(struct mr_table *mrt, int flags); > static void ipmr_expire_process(struct timer_list *t); > > +#ifdef CONFIG_PROVE_LOCKING > +int ip_mr_initialized; > +void ip_mr_now_initialized(void) { ip_mr_initialized = 1; } > +#else > +const int ip_mr_initialized = 1; > +void ip_mr_now_initialized(void) { } > +#endif This seems excessive and a bit not so pretty. > + > #ifdef CONFIG_IP_MROUTE_MULTIPLE_TABLES > #define ipmr_for_each_table(mrt, net) \ > - list_for_each_entry_rcu(mrt, &net->ipv4.mr_tables, list) > + list_for_each_entry_rcu(mrt, &net->ipv4.mr_tables, list, \ > + (lockdep_rtnl_is_held() || !ip_mr_initialized)) > > static struct mr_table *ipmr_mr_table_iter(struct net *net, > struct mr_table *mrt) The problematic code path is ipmr_rules_init() done during ipmr_net_init(). You can just wrap this call around RCU locking or take the RTNL mutex. That way you don't need to rediculous ip_mr_initialized knob which frankly doesn't even seem accurate to me. It's a centralized global variable which is holding state about multiple network namespace objects which makes absolutely no sense at all, it's wrong.