Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp6553140ybx; Mon, 11 Nov 2019 10:50:49 -0800 (PST) X-Google-Smtp-Source: APXvYqzpeSZpAqf2v+K3pN36JiMdo9r0wwv24fcbdsU160X6wkXWPhNJ9FL7C4RKG3bff5o7x4Uj X-Received: by 2002:a17:906:1c07:: with SMTP id k7mr10829601ejg.229.1573498249711; Mon, 11 Nov 2019 10:50:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573498249; cv=none; d=google.com; s=arc-20160816; b=c/2sTgdQPzuRP6v+XatKVad5DsuTESD9ieE02k0OuEdue5Adgk97nuks/GByMv/uwq VUvJygBQwZWJ+DxtoXSk1xAzz+/ignalL1a7nvgS0A43JIdMC+hCBhPdU0wwWWEkUNqy tDj0p9O7SwpnRB23cbtzhAUxauW+KjhfCIYPKstdh8S7nl6Q0n8PLdfB1ryFNVnaf7mw N49YvsxKDWtq3NpsDW+aQBIRNgkQLzgNGq6+v6GzxO6PmgkxssSS90VJJ5g5U/PSnRt+ DNaD175erAH9qtLAHXEci6DsjR5w5vyv4euPen+D2d2fZZWn5AntT3rG+Gqj6/+Y66L+ hCTw== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=jI+Zkz3XUzAZ5xk2GZokmwaKbVNtclkr85TF2OGT6xk=; b=vVpEW3QHZxw20WV1IIHqBnd9Wxkg71KzxMFv5twWG0beyIs/+LynmzIATDZVzJBHkN SP2kPwxxqAM0TYrINZN1pMzlEttr77ujY3LtnzRRnWJInDxIgSZHkIcId+Tygv5XO7Wk M6KT/KogzTf580a7EUg3X8tGnMaUyu+PIlyUMktM7n+pNGLK/tv8FoGBfNKs8q6UCFPh 6IDeP1C54b5cHeQZ7BUneFF9h0ProJt9kEhmxYuYSvHjpog7Evu9++6gYT4oJkdua2I7 Z8KpD4KbwvySfbFKGegYlWfDT10B2TjipYtOr80stOhJgyF/BqpnKUwj7Hh+FolcG32u D9Lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=jDtFf0nU; 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 a23si9957165ejj.373.2019.11.11.10.50.25; Mon, 11 Nov 2019 10:50:49 -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; dkim=pass header.i=@kernel.org header.s=default header.b=jDtFf0nU; 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 S1730070AbfKKSrJ (ORCPT + 99 others); Mon, 11 Nov 2019 13:47:09 -0500 Received: from mail.kernel.org ([198.145.29.99]:39772 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730026AbfKKSrF (ORCPT ); Mon, 11 Nov 2019 13:47:05 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0737121655; Mon, 11 Nov 2019 18:47:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573498024; bh=tMSlTZeITOMBO+19vFLa2Z7xTvijr+tIOOrFZPPkRV4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jDtFf0nUrGL1C45gS5KSlQAsBA5kVwaTKckue9eB41kmmgI5LDvjzsYusIsn2W7Wm BcoVE/eTyKB8CjPGizjezl3fgnvQnsuZBCj5SdYDXpvi1XhvPhWX1dpv16H4CfF9B1 0GsazpciujaEdhDaFGkV5/EsaJ2MKgobgTpdXZno= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Eric Dumazet , syzbot , Simon Horman , Sasha Levin Subject: [PATCH 4.19 086/125] ipvs: move old_secure_tcp into struct netns_ipvs Date: Mon, 11 Nov 2019 19:28:45 +0100 Message-Id: <20191111181451.622366905@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111181438.945353076@linuxfoundation.org> References: <20191111181438.945353076@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Eric Dumazet [ Upstream commit c24b75e0f9239e78105f81c5f03a751641eb07ef ] syzbot reported the following issue : BUG: KCSAN: data-race in update_defense_level / update_defense_level read to 0xffffffff861a6260 of 4 bytes by task 3006 on cpu 1: update_defense_level+0x621/0xb30 net/netfilter/ipvs/ip_vs_ctl.c:177 defense_work_handler+0x3d/0xd0 net/netfilter/ipvs/ip_vs_ctl.c:225 process_one_work+0x3d4/0x890 kernel/workqueue.c:2269 worker_thread+0xa0/0x800 kernel/workqueue.c:2415 kthread+0x1d4/0x200 drivers/block/aoe/aoecmd.c:1253 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:352 write to 0xffffffff861a6260 of 4 bytes by task 7333 on cpu 0: update_defense_level+0xa62/0xb30 net/netfilter/ipvs/ip_vs_ctl.c:205 defense_work_handler+0x3d/0xd0 net/netfilter/ipvs/ip_vs_ctl.c:225 process_one_work+0x3d4/0x890 kernel/workqueue.c:2269 worker_thread+0xa0/0x800 kernel/workqueue.c:2415 kthread+0x1d4/0x200 drivers/block/aoe/aoecmd.c:1253 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:352 Reported by Kernel Concurrency Sanitizer on: CPU: 0 PID: 7333 Comm: kworker/0:5 Not tainted 5.4.0-rc3+ #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Workqueue: events defense_work_handler Indeed, old_secure_tcp is currently a static variable, while it needs to be a per netns variable. Fixes: a0840e2e165a ("IPVS: netns, ip_vs_ctl local vars moved to ipvs struct.") Signed-off-by: Eric Dumazet Reported-by: syzbot Signed-off-by: Simon Horman Signed-off-by: Sasha Levin --- include/net/ip_vs.h | 1 + net/netfilter/ipvs/ip_vs_ctl.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h index 0e3c0d83bd991..af0ede9ad4d0b 100644 --- a/include/net/ip_vs.h +++ b/include/net/ip_vs.h @@ -885,6 +885,7 @@ struct netns_ipvs { struct delayed_work defense_work; /* Work handler */ int drop_rate; int drop_counter; + int old_secure_tcp; atomic_t dropentry; /* locks in ctl.c */ spinlock_t dropentry_lock; /* drop entry handling */ diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c index b2134c3894289..c339b5e386b78 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c @@ -98,7 +98,6 @@ static bool __ip_vs_addr_is_local_v6(struct net *net, static void update_defense_level(struct netns_ipvs *ipvs) { struct sysinfo i; - static int old_secure_tcp = 0; int availmem; int nomem; int to_change = -1; @@ -179,35 +178,35 @@ static void update_defense_level(struct netns_ipvs *ipvs) spin_lock(&ipvs->securetcp_lock); switch (ipvs->sysctl_secure_tcp) { case 0: - if (old_secure_tcp >= 2) + if (ipvs->old_secure_tcp >= 2) to_change = 0; break; case 1: if (nomem) { - if (old_secure_tcp < 2) + if (ipvs->old_secure_tcp < 2) to_change = 1; ipvs->sysctl_secure_tcp = 2; } else { - if (old_secure_tcp >= 2) + if (ipvs->old_secure_tcp >= 2) to_change = 0; } break; case 2: if (nomem) { - if (old_secure_tcp < 2) + if (ipvs->old_secure_tcp < 2) to_change = 1; } else { - if (old_secure_tcp >= 2) + if (ipvs->old_secure_tcp >= 2) to_change = 0; ipvs->sysctl_secure_tcp = 1; } break; case 3: - if (old_secure_tcp < 2) + if (ipvs->old_secure_tcp < 2) to_change = 1; break; } - old_secure_tcp = ipvs->sysctl_secure_tcp; + ipvs->old_secure_tcp = ipvs->sysctl_secure_tcp; if (to_change >= 0) ip_vs_protocol_timeout_change(ipvs, ipvs->sysctl_secure_tcp > 1); -- 2.20.1