From patchwork Wed Aug 14 16:10:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: andrey.konovalov@linux.dev X-Patchwork-Id: 13763678 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2D00DC3DA4A for ; Wed, 14 Aug 2024 16:11:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B8C566B0082; Wed, 14 Aug 2024 12:11:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B15B66B0085; Wed, 14 Aug 2024 12:11:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9B7276B0092; Wed, 14 Aug 2024 12:11:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 7A35F6B0082 for ; Wed, 14 Aug 2024 12:11:03 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9A1B341043 for ; Wed, 14 Aug 2024 16:11:02 +0000 (UTC) X-FDA: 82451339964.28.F4947AC Received: from out-176.mta0.migadu.com (out-176.mta0.migadu.com [91.218.175.176]) by imf15.hostedemail.com (Postfix) with ESMTP id 7EF0DA0038 for ; Wed, 14 Aug 2024 16:10:59 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=vLOP3kXA; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf15.hostedemail.com: domain of andrey.konovalov@linux.dev designates 91.218.175.176 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1723651802; a=rsa-sha256; cv=none; b=0bfPx5NojyHogul5tAO8YtLU/h5QStUcJHfpqYVPWCIUHM0w9OWnmJgHD5aQZimyz+qYZo 7BGZgqfmAu1fSorfAxZCrYRhvWSzhC0hzMIK1Y88GGSZTnd7Gf97E8ltUBMFp5idBHbnm6 a879kCKua/GT0b9Mg7TH4u084I+ej0A= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=vLOP3kXA; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf15.hostedemail.com: domain of andrey.konovalov@linux.dev designates 91.218.175.176 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1723651802; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=CK1cjU9tK76LBIellpq38/TTF/N+OU0syvysYZxFmi4=; b=x78fGaymXyVDv8d3kpSc4csm7AnGiVwjlphz+t04F0+T0ddxFV38biZ9FO5QAGpyu4Swj3 f+IFw3YysZOb4vmAmNTtuQf4uGonIuPDRdYmtSaPvTJCrDYSKwExkMeBoM6h+Q1D/RUuw7 7RJokkp0oDtP5IHX20SSeSOatKbIYIU= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1723651857; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=CK1cjU9tK76LBIellpq38/TTF/N+OU0syvysYZxFmi4=; b=vLOP3kXA/H1lb3ouW5Pxg+CoriFgubH+OK2L73y/uGDRjDduz8x4p+sJuLuvI8wXMlAo7j n1KIyXyD65A0EqUILQcMlfu+VvpiFjzUmF7dmhu6qQvh7NYjltFjxEJWegB8SRmXhUaXwl umVpD7cqjyDCscKhSbKNKVz9Kc5lvmc= From: andrey.konovalov@linux.dev To: Marco Elver , Matthew Maurer , Miguel Ojeda Cc: Andrey Konovalov , Alexander Potapenko , Dmitry Vyukov , Andrey Ryabinin , kasan-dev@googlegroups.com, Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] kasan: simplify and clarify Makefile Date: Wed, 14 Aug 2024 18:10:52 +0200 Message-Id: <20240814161052.10374-1-andrey.konovalov@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 7EF0DA0038 X-Stat-Signature: cnd6tgz5e7nccapk3wrdrcapjdg4i4ha X-Rspam-User: X-HE-Tag: 1723651859-638588 X-HE-Meta: U2FsdGVkX1+MKAJvo201DHvxQ61lUBMFYFcF+YZtDPMvwTaBjNPGTz5mQTQdF+laPjEnvvm3riBOFcnkBgJaK9r3NH8upFMBOM+ziLOc1dQYhTtRr8ZMc83wsSvaRezlIK6Yl/A1VsBmZWnNOlw1EWAfojBJBrqwPCuyiTvrnNbHlhJQvVawyU6lAhdQOSEeFYHVU9z1h5TWo6yw1KrAeGYegzAtx4k0CbHrnNo3fvnRe/kid9nluMCG68ALJijognSwmY+sI6EhSzRTgA0shqPdp7htmY0z4eIEVqST0TPvjVpFLGCXLMndtkhlMPR2X1RN/Y2Rw/2OJHbY5JFSy9wuRJGSN5NOV9g75i32HNgWNq6NuDpAyUHo0z29QoBVbM7k6NZbKGJGMmfFh/yb4KUO1ZKXaP6T3zdUhuUPood1KzftdfL1HNUodwOKLG0L2UU1FwU95/3i15YYZeEiPOb1YVfk1VpOLDv/XOGBZc5WcmqFnk04ze56iOgZhshfW5J3934WZn57Rad5iHg8NGEEV/X/NPaWyipWD1y7/b3dpXG3M4SQx+qufOf0YG6QvicoQUKzcGT0LgSotTPjw3eXsnLtbAmUaYguZV3UeZx6dt2xNeewq9ArNiQzKzCQVt9AH0Zdy2atiZ1UTJUUJQQoDT+NE+5MN3nSfBBWr6+KbvpwedNZrrRhYMHZFsw4R8bQxtgrMRnwtoGAXI27WinoVQ6jDh/P+mNwPBM0xt9F2uI1SRb2EvF9AjKckFpPKGbcyvCdVCeFhnCNjaI4Lvr9ByKqF6+8saTRycKJrQB9RTxZdtTnD/49iLWINCHgj02Q36kPqJFKaaFsAzgaviN9Zy5oIGfgJ8HZlG8ghA5LtlZrqcRPlUNnWYF61YDmKYxbtbjFbVoWhNQyJbUJJoRHkq1NozwayCTlmzzC+5RjUHXANhDFs/HH9afIVMyhrt3YWnqr8+t8j9Dk4aR JIx8w4Zw 7a+ktCQT7jdG5MPgqVyoYMvX7YKlYMCqed5fkWVOt3wTUHzTCm/nYCREw21lkFi4oxMpVl0Pwj7aFy1rc8VbxRgrV1yjAc/KNsa66Tyt8CCOOod/QXHhv15Vxp1P9aRcGKQG0ZiGR1OZ3lCtssqCyJaqIN41XcSO6W+dibfSdB03pI4VAahbeYSARI0ZUmN2BaLU8MjS48UqHcAo= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Andrey Konovalov When KASAN support was being added to the Linux kernel, GCC did not yet support all of the KASAN-related compiler options. Thus, the KASAN Makefile had to probe the compiler for supported options. Nowadays, the Linux kernel GCC version requirement is 5.1+, and thus we don't need the probing of the -fasan-shadow-offset parameter: it exists in all 5.1+ GCCs. Simplify the KASAN Makefile to drop CFLAGS_KASAN_MINIMAL. Also add a few more comments and unify the indentation. Signed-off-by: Andrey Konovalov Reviewed-by: Miguel Ojeda Acked-by: Marco Elver --- Changes v1->v2: - Comments fixes based on Miguel Ojeda's feedback. --- scripts/Makefile.kasan | 45 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan index 390658a2d5b74..aab4154af00a7 100644 --- a/scripts/Makefile.kasan +++ b/scripts/Makefile.kasan @@ -22,30 +22,31 @@ endif ifdef CONFIG_KASAN_GENERIC ifdef CONFIG_KASAN_INLINE + # When the number of memory accesses in a function is less than this + # call threshold number, the compiler will use inline instrumentation. + # 10000 is chosen offhand as a sufficiently large number to make all + # kernel functions to be instrumented inline. call_threshold := 10000 else call_threshold := 0 endif -CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address - -# -fasan-shadow-offset fails without -fsanitize -CFLAGS_KASAN_SHADOW := $(call cc-option, -fsanitize=kernel-address \ - -fasan-shadow-offset=$(KASAN_SHADOW_OFFSET), \ - $(call cc-option, -fsanitize=kernel-address \ - -mllvm -asan-mapping-offset=$(KASAN_SHADOW_OFFSET))) - -ifeq ($(strip $(CFLAGS_KASAN_SHADOW)),) - CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL) -else - # Now add all the compiler specific options that are valid standalone - CFLAGS_KASAN := $(CFLAGS_KASAN_SHADOW) \ - $(call cc-param,asan-globals=1) \ - $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \ - $(call cc-param,asan-instrument-allocas=1) -endif - -CFLAGS_KASAN += $(call cc-param,asan-stack=$(stack_enable)) +# First, enable -fsanitize=kernel-address together with providing the shadow +# mapping offset, as for GCC, -fasan-shadow-offset fails without -fsanitize +# (GCC accepts the shadow mapping offset via -fasan-shadow-offset instead of +# a --param like the other KASAN parameters). +# Instead of ifdef-checking the compiler, rely on cc-option. +CFLAGS_KASAN := $(call cc-option, -fsanitize=kernel-address \ + -fasan-shadow-offset=$(KASAN_SHADOW_OFFSET), \ + $(call cc-option, -fsanitize=kernel-address \ + -mllvm -asan-mapping-offset=$(KASAN_SHADOW_OFFSET))) + +# Now, add other parameters enabled similarly in both GCC and Clang. +# As some of them are not supported by older compilers, use cc-param. +CFLAGS_KASAN += $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \ + $(call cc-param,asan-stack=$(stack_enable)) \ + $(call cc-param,asan-instrument-allocas=1) \ + $(call cc-param,asan-globals=1) # Instrument memcpy/memset/memmove calls by using instrumented __asan_mem*() # instead. With compilers that don't support this option, compiler-inserted @@ -57,9 +58,9 @@ endif # CONFIG_KASAN_GENERIC ifdef CONFIG_KASAN_SW_TAGS ifdef CONFIG_KASAN_INLINE - instrumentation_flags := $(call cc-param,hwasan-mapping-offset=$(KASAN_SHADOW_OFFSET)) + instrumentation_flags := $(call cc-param,hwasan-mapping-offset=$(KASAN_SHADOW_OFFSET)) else - instrumentation_flags := $(call cc-param,hwasan-instrument-with-calls=1) + instrumentation_flags := $(call cc-param,hwasan-instrument-with-calls=1) endif CFLAGS_KASAN := -fsanitize=kernel-hwaddress \ @@ -70,7 +71,7 @@ CFLAGS_KASAN := -fsanitize=kernel-hwaddress \ # Instrument memcpy/memset/memmove calls by using instrumented __hwasan_mem*(). ifeq ($(call clang-min-version, 150000)$(call gcc-min-version, 130000),y) -CFLAGS_KASAN += $(call cc-param,hwasan-kernel-mem-intrinsic-prefix=1) + CFLAGS_KASAN += $(call cc-param,hwasan-kernel-mem-intrinsic-prefix=1) endif endif # CONFIG_KASAN_SW_TAGS