From patchwork Sat Apr 22 16:33:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Ahern X-Patchwork-Id: 753785 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 3w9J7z3Vrbz9s7d for ; Sun, 23 Apr 2017 02:33:35 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cumulusnetworks.com header.i=@cumulusnetworks.com header.b="OCMTAxO5"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1425707AbdDVQd2 (ORCPT ); Sat, 22 Apr 2017 12:33:28 -0400 Received: from mail-it0-f49.google.com ([209.85.214.49]:36448 "EHLO mail-it0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1425606AbdDVQd0 (ORCPT ); Sat, 22 Apr 2017 12:33:26 -0400 Received: by mail-it0-f49.google.com with SMTP id g66so17339756ite.1 for ; Sat, 22 Apr 2017 09:33:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cumulusnetworks.com; s=google; h=from:to:cc:subject:date:message-id; bh=foF0ErORw0Aoa1GfvRKfm5my53Q7Jy/eaYIr/m1QGQc=; b=OCMTAxO5fePhY9iWj1tFCNLEP0dGDt4Fd7nsLdVNsqNqHLF9KG2Da+oGY4wwU77f4i Jx0wOA9c8G70KiX8r9GAYb1huoh/toQ6v303JnagQ1mVpSaY6aLdOBDlOMjJecfR+OHC DVaFOnHNKCFS89R9z8Nao6Hsq1O6KSWaiMiN8= 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=foF0ErORw0Aoa1GfvRKfm5my53Q7Jy/eaYIr/m1QGQc=; b=FS3toDga2wn8jpBBBun/de+l3GkhvA+0RNT/rLHDHcgvR/+/5qL4RkPd+6moaKkfrh fogUytnYhi9QkUJ8+yI9YhRXVre0ZSIquKs36x/GhHgQNImh2STVO5H2/0sIis3XdRC7 ViaR3d+NXcPGdwMs9/jyI7/hEMLW70pBBBNxARgMMb0zJwekhy4lLwjb6H/lTl5Y4Wxm RpxvTgFYdGJHprdbaCJ2liOJ/K5sZq0beA/qPNxpIoYj2M/OpKVuybCupviZQ2anyHan 68B1LhroK9OQIgswfewP94lyd2d3gPg8LC/R/knQuS9GoXEvLPtRpe5JhkyDZqV3VNM8 HqLg== X-Gm-Message-State: AN3rC/63A+2oOPU2a3vKFuB+afvTJCFippZ7D9UvspY19KrncqmzLcZ4 i4yM/eoMRZF8ux4f X-Received: by 10.99.212.69 with SMTP id i5mr17006912pgj.36.1492878805014; Sat, 22 Apr 2017 09:33:25 -0700 (PDT) Received: from kenny.it.cumulusnetworks.com. ([216.129.126.126]) by smtp.googlemail.com with ESMTPSA id c90sm22292702pfk.96.2017.04.22.09.33.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 22 Apr 2017 09:33:24 -0700 (PDT) From: David Ahern To: netdev@vger.kernel.org Cc: subashab@codeaurora.org, David Ahern Subject: [PATCH net-next] net: add rcu locking when changing early demux Date: Sat, 22 Apr 2017 09:33:16 -0700 Message-Id: <1492878796-31328-1-git-send-email-dsa@cumulusnetworks.com> X-Mailer: git-send-email 2.1.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org systemd-sysctl is triggering a suspicious RCU usage message when net.ipv4.tcp_early_demux or net.ipv4.udp_early_demux is changed via a sysctl config file: [ 33.896184] =============================== [ 33.899558] [ ERR: suspicious RCU usage. ] [ 33.900624] 4.11.0-rc7+ #104 Not tainted [ 33.901698] ------------------------------- [ 33.903059] /home/dsa/kernel-2.git/net/ipv4/sysctl_net_ipv4.c:305 suspicious rcu_dereference_check() usage! [ 33.905724] other info that might help us debug this: [ 33.907656] rcu_scheduler_active = 2, debug_locks = 0 [ 33.909288] 1 lock held by systemd-sysctl/143: [ 33.910373] #0: (sb_writers#5){.+.+.+}, at: [] file_start_write+0x45/0x48 [ 33.912407] stack backtrace: [ 33.914018] CPU: 0 PID: 143 Comm: systemd-sysctl Not tainted 4.11.0-rc7+ #104 [ 33.915631] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.7.5-20140531_083030-gandalf 04/01/2014 [ 33.917870] Call Trace: [ 33.918431] dump_stack+0x81/0xb6 [ 33.919241] lockdep_rcu_suspicious+0x10f/0x118 [ 33.920263] proc_configure_early_demux+0x65/0x10a [ 33.921391] proc_udp_early_demux+0x3a/0x41 add rcu locking to proc_configure_early_demux. Fixes: dddb64bcb3461 ("net: Add sysctl to toggle early demux for tcp and udp") Signed-off-by: David Ahern --- net/ipv4/sysctl_net_ipv4.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 6fb25693c00b..ddac9e64b702 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -302,6 +302,8 @@ static void proc_configure_early_demux(int enabled, int protocol) struct inet6_protocol *ip6prot; #endif + rcu_read_lock(); + ipprot = rcu_dereference(inet_protos[protocol]); if (ipprot) ipprot->early_demux = enabled ? ipprot->early_demux_handler : @@ -313,6 +315,7 @@ static void proc_configure_early_demux(int enabled, int protocol) ip6prot->early_demux = enabled ? ip6prot->early_demux_handler : NULL; #endif + rcu_read_unlock(); } static int proc_tcp_early_demux(struct ctl_table *table, int write,