Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp2743416ybh; Mon, 9 Mar 2020 12:05:46 -0700 (PDT) X-Google-Smtp-Source: ADFU+vs3x8DUcYi1hQbEMl/CPiId2kJ99gzpDXBl8GccNvk9+imU2jH1pB/lncRFS+ucVku624KW X-Received: by 2002:aca:ad8f:: with SMTP id w137mr5705oie.104.1583780746760; Mon, 09 Mar 2020 12:05:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583780746; cv=none; d=google.com; s=arc-20160816; b=09WYxDq6TfShVzQBjvDWVFkTM4XbgdPeH3PCQkeJk8wo2motck4BTafcGHdAwndV3E yarOMXS4gkt7l17EhYGaZ9i7FDjY5pbNx3N151Ra9vjUOVEI5Vg5OtPgoNluTRPRTt2p WKirzF6Bbug8/LlDTNNi0uMrZgITI6xiShzsn3+Uy2UJoqC9pGmUFpf1NQOQ04W3QLoG guBSSBF5KrGViXvVZ6QGFHNNuYc8xSqwu6bxBGTkZ2gCb4F0eE3k+W4pVnzAiSdJhQcx 7OZh+i9jKDt6INSUUQrnSc6gqe3iGYDZcc7A4cAtBdWYvrKFwjuz9+Yz37jUgNfOlOOB PsdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=9lhj7nT7XzJ+Tj7SxsRHezvOwRlQAKZy4KBye0MrdLM=; b=rCCFbl6ROQV3G22cw9QaeRWW2wNpooIzsQHuW82rM49amLSN0vFsp0Qd65KQcTv++5 bF5VGlpArmMzhrQKZEoiFEyuaW2bARZpytl6ZL2tnmpAoQ0XQjN2T91LPGBEteIHLVUA U+7t43T99sgGOu5YH4svmIPmmc9eaHFevmKqZRqMvoisCmWhOVFtd42skDKV0dyuuMYu SpeSSrUgdalgAM7jLTfeJSnFbqL3lvH5t+KOaY4f2BTOiYLmntqm4a6MBvzuBQVo9Q06 yijz7L/78L+jlNycCKVKdWefTvCcCnht7LD6O4UwOVCabHnJuTC2Y1m+au8q4qhlIHRF RXHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=pDsVVlZ+; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m7si4548810oie.138.2020.03.09.12.05.34; Mon, 09 Mar 2020 12:05:46 -0700 (PDT) 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=pDsVVlZ+; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727669AbgCITEa (ORCPT + 99 others); Mon, 9 Mar 2020 15:04:30 -0400 Received: from mail.kernel.org ([198.145.29.99]:47812 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727579AbgCITE3 (ORCPT ); Mon, 9 Mar 2020 15:04:29 -0400 Received: from paulmck-ThinkPad-P72.home (50-39-105-78.bvtn.or.frontiernet.net [50.39.105.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9A1CA22525; Mon, 9 Mar 2020 19:04:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583780668; bh=grI5p9vqb5D3cnYkJYXdP3wmrE6TVPB+3aROxnS7IqY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pDsVVlZ+BzS2agPgXttEJ4oLGVIks8Tl5rUFigSP4Iz5dzZQvsrKihbzetSBrx+rI pr2v9LCZ+WDhx7RaIcUXFaUPpfuoer4JDNj1xZ6Z+F/KaWAS23eSG78QwpZuowS/DD zrUNWRc+pJbdV0ulSuF+GvY3+Ab7GbCLJcUa0ClE= From: paulmck@kernel.org To: linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, kernel-team@fb.com, mingo@kernel.org Cc: elver@google.com, andreyknvl@google.com, glider@google.com, dvyukov@google.com, cai@lca.pw, boqun.feng@gmail.com, "Paul E . McKenney" , Steven Rostedt Subject: [PATCH kcsan 26/32] kcsan, trace: Make KCSAN compatible with tracing Date: Mon, 9 Mar 2020 12:04:14 -0700 Message-Id: <20200309190420.6100-26-paulmck@kernel.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200309190359.GA5822@paulmck-ThinkPad-P72> References: <20200309190359.GA5822@paulmck-ThinkPad-P72> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Marco Elver Previously the system would lock up if ftrace was enabled together with KCSAN. This is due to recursion on reporting if the tracer code is instrumented with KCSAN. To avoid this for all types of tracing, disable KCSAN instrumentation for all of kernel/trace. Furthermore, since KCSAN relies on udelay() to introduce delay, we have to disable ftrace for udelay() (currently done for x86) in case KCSAN is used together with lockdep and ftrace. The reason is that it may corrupt lockdep IRQ flags tracing state due to a peculiar case of recursion (details in Makefile comment). Signed-off-by: Marco Elver Reported-by: Qian Cai Cc: Paul E. McKenney Cc: Steven Rostedt Signed-off-by: Paul E. McKenney Tested-by: Qian Cai --- arch/x86/lib/Makefile | 5 +++++ kernel/kcsan/Makefile | 2 ++ kernel/trace/Makefile | 3 +++ 3 files changed, 10 insertions(+) diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile index 432a077..6110bce7 100644 --- a/arch/x86/lib/Makefile +++ b/arch/x86/lib/Makefile @@ -8,6 +8,11 @@ KCOV_INSTRUMENT_delay.o := n # KCSAN uses udelay for introducing watchpoint delay; avoid recursion. KCSAN_SANITIZE_delay.o := n +ifdef CONFIG_KCSAN +# In case KCSAN+lockdep+ftrace are enabled, disable ftrace for delay.o to avoid +# lockdep -> [other libs] -> KCSAN -> udelay -> ftrace -> lockdep recursion. +CFLAGS_REMOVE_delay.o = $(CC_FLAGS_FTRACE) +endif # Early boot use of cmdline; don't instrument it ifdef CONFIG_AMD_MEM_ENCRYPT diff --git a/kernel/kcsan/Makefile b/kernel/kcsan/Makefile index df6b779..d4999b3 100644 --- a/kernel/kcsan/Makefile +++ b/kernel/kcsan/Makefile @@ -4,6 +4,8 @@ KCOV_INSTRUMENT := n UBSAN_SANITIZE := n CFLAGS_REMOVE_core.o = $(CC_FLAGS_FTRACE) +CFLAGS_REMOVE_debugfs.o = $(CC_FLAGS_FTRACE) +CFLAGS_REMOVE_report.o = $(CC_FLAGS_FTRACE) CFLAGS_core.o := $(call cc-option,-fno-conserve-stack,) \ $(call cc-option,-fno-stack-protector,) diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile index 0e63db6..9072486 100644 --- a/kernel/trace/Makefile +++ b/kernel/trace/Makefile @@ -6,6 +6,9 @@ ifdef CONFIG_FUNCTION_TRACER ORIG_CFLAGS := $(KBUILD_CFLAGS) KBUILD_CFLAGS = $(subst $(CC_FLAGS_FTRACE),,$(ORIG_CFLAGS)) +# Avoid recursion due to instrumentation. +KCSAN_SANITIZE := n + ifdef CONFIG_FTRACE_SELFTEST # selftest needs instrumentation CFLAGS_trace_selftest_dynamic.o = $(CC_FLAGS_FTRACE) -- 2.9.5