Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp6538718ybx; Mon, 11 Nov 2019 10:36:12 -0800 (PST) X-Google-Smtp-Source: APXvYqwtvlH4jjOkElRGOIZZvHAtKGOEyxHDxjcelIyqiFUWKArpkn1j7oKVLRvfKA7/PiCgftty X-Received: by 2002:a05:6402:78b:: with SMTP id d11mr27683686edy.92.1573497372579; Mon, 11 Nov 2019 10:36:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573497372; cv=none; d=google.com; s=arc-20160816; b=cVvSOxHRoOcbs1UxKHoiNGvH6exDdb6N1TnoM8ZAOkWWTYnnTmUaUGEn1KZacGsZq/ Qg5+WgPFRIudycmDiTEHdmOPXD2LpfNgiGhxHj7FBQEwxyHeynFvkx+9SV5Uz1/DTfqy ypO6nSoBpq2BUha+lgp9UGDk+Swem8YVCPoSjW1DjZKK/gyQhOxoxIdTPW9+sgzbiLnu mw4Ya9aeF9SPTT3wctezZB040WR1WNtn7KvXFZiOmYT5aUIrhMDXoyTrliwzltEn3ZBq clb1ajlrBRkdMDvQrYPHG/2x+SA5ymhroG7b6pPbM4teS6Ks5bpA5K8jNjAJJkEG9DuI zkTQ== 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=pQWo6llct/T4jTWSH5jw0zPUNFLpCrqgoqsdxHWXWNg=; b=IzT0NxTeYIU5E5myweWQZHRpWJaVk7FMMp5LMebK1DelQXk2uC0IExXawxNop4X8us CMSuFXI/DraHDzlFEW3bFGQ5aGNHNZSC9NgFJwqA5JdPHuEz1Uu1S4Ebtt/i8BEudfzu BIdD7QHSlP2L94sbw7iaNAEYltPaxifqwFnMb85R3zx3u1UuOA1M/B5TjqRda4W+GsQv VhaTVELFlSyBjAHXMcQFlDGjojwSM9ePB/yjAzmcoiY2zjsqUP+0QETVqh3w3yDNOJSj ksSES1j5DgFPIG3rrDcdH3iMYOVGBhsOtnd2g2vSi4uMe046/IncvUeKECyvTVogKEE0 FPxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dpUsczyA; 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 b2si9879152eja.89.2019.11.11.10.35.48; Mon, 11 Nov 2019 10:36:12 -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=dpUsczyA; 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 S1728205AbfKKSdp (ORCPT + 99 others); Mon, 11 Nov 2019 13:33:45 -0500 Received: from mail.kernel.org ([198.145.29.99]:51072 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728177AbfKKSdl (ORCPT ); Mon, 11 Nov 2019 13:33:41 -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 445EF20656; Mon, 11 Nov 2019 18:33:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573497219; bh=jFKRDozkNnN17b4uRxPS4zmxpYQ3OKZr9Ar/cQVZc80=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dpUsczyA3nZb8ahRfp/Y2Jdc6Zy0P/hc6yCTq4mbGdaRY3FPjNdNDT9bzgXHU88eT Pz0827JOXbBWEmyBQR0la6/jc55qcRNaLEBqQO9mcyaYeNO3Ng/hXEN6SMhB5j1xp6 9Div99mVp80aO/lZFe5cGpldc39H2W/UIevnQY00= 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.9 42/65] ipvs: move old_secure_tcp into struct netns_ipvs Date: Mon, 11 Nov 2019 19:28:42 +0100 Message-Id: <20191111181348.344555759@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111181331.917659011@linuxfoundation.org> References: <20191111181331.917659011@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 cd6018a9ee246..a26165744d980 100644 --- a/include/net/ip_vs.h +++ b/include/net/ip_vs.h @@ -887,6 +887,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 8037b25ddb76a..33125fc009cfd 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c @@ -97,7 +97,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; @@ -178,35 +177,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