From mboxrd@z Thu Jan 1 00:00:00 1970 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 04F62C7115C for ; Wed, 25 Jun 2025 09:52:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0C85C6B00AB; Wed, 25 Jun 2025 05:52:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 071B96B00B4; Wed, 25 Jun 2025 05:52:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D6AE16B00AC; Wed, 25 Jun 2025 05:52:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id BA4B16B00AB for ; Wed, 25 Jun 2025 05:52:55 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 43A1F1238AF for ; Wed, 25 Jun 2025 09:52:55 +0000 (UTC) X-FDA: 83593459110.14.87714ED Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by imf26.hostedemail.com (Postfix) with ESMTP id 41669140006 for ; Wed, 25 Jun 2025 09:52:52 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="Pm/N5IBD"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf26.hostedemail.com: domain of snovitoll@gmail.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=snovitoll@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750845173; a=rsa-sha256; cv=none; b=5KJmhjF1N5fF16AgL76hrlju5H8oCORATh9JZQLt1bx6+eoUh4L5C0wf4kkOZgwiL4EhDK mpMFr4GxDzscKO7j/57aonhhnQ+kY8Oo3h7BHVpv9DUFFiJ+mTpneViFEFayfEJONKoVUs byPAawjXoEqTVbh/o1VvBUVQwED1GUE= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="Pm/N5IBD"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf26.hostedemail.com: domain of snovitoll@gmail.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=snovitoll@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750845173; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=U6SFM5Ezspiku172UK6Utmx+P9PfAPP964pKgViV7lo=; b=8bnxW+WNf+CO4Q8ytzKB/S4JesD+EAFuZDCEMgunGCO/KYm7/8TZNw9XSRz2To1tUnMyyB mFzvgmleGoMp2a/BCcDBhoniDru0HvW0SxPhaoE2Hs1A96IaO/EoSnxHwIooUGZNJedtrk cfgpZgzc0hw5kF+2A22jGywSkL+dxjU= Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-32ca160b4bcso16441881fa.3 for ; Wed, 25 Jun 2025 02:52:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750845171; x=1751449971; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=U6SFM5Ezspiku172UK6Utmx+P9PfAPP964pKgViV7lo=; b=Pm/N5IBDeY6Csn9qA6Fp180Au20H2bxhuc7+IW2ths0s4lVpcCD8lffmsDtf17UDNs k7+SZBQgOwVW2Bbm655WUf8tBchNCB5sQD8C43N1c4oWx23ZAqPaVF9vimr+jO4mtwnu CBpBWq3pFdPaTk2C2x+9zUzA1p0nG8aBvIK/rlwxot55jXz7Il3Ac4Ns3OJiDMBL01HX jU8ftri04IT6A+gs5BJsOwhm4pN2DDGNxMul4zlEIx8fwgECo3HfUqnI/PhrPdMUBkR6 KVE+Zi9U4XrAsmEdhRNYLyAD7uzdAu1O0k5mSguiPjRWoe+fpxgGop9hNz/45vI+3bwY 4/pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750845171; x=1751449971; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U6SFM5Ezspiku172UK6Utmx+P9PfAPP964pKgViV7lo=; b=chqh+nQ4yHinzGLAQs0H8jpvs2W2aFf5J4s+gBlbetZDcxeOErQFBa7Gs14hvRlvNk oJwjjXhZ59o/zbPUjsfBgZ9fnKu1b2maq1+wnte29QXyP2OPtkVaD29dOwzbrCJHhas1 ea+gwFLzg/TH4ieIZyRB/SMiW6tidNdYUzzM0bV3jBS0bn28rfziqB3SznNnHukZ6p+X 1jKnb2Rqu9qkgU1hC3PMlV0wiPPlX3jpe2BsGDV/g1Trt3shmtN2oBgwY90/suF2NkC+ 4vgwshgunlYwyE9pmGupZt2R4JJyl58PUSqVmioG621SvYHHTe1bpNvxFhKzU+K+CO0E 1sHg== X-Forwarded-Encrypted: i=1; AJvYcCUotzBKVsy8DSZTm00RJBh9t7ng8vYxw36qlYIJJPbkOe6oGIeCCIC5lqO0Vx9kVTz0659dqlZmyQ==@kvack.org X-Gm-Message-State: AOJu0YzJ2kZNGus1EKKft+HV8MlER7RWgq2s9uPirHV+YK069BwNy3mR XTUOrJnwXL4glqk3yQ33/uWFXUSeyfVdpjY2nS0jF7J587kcDDrP+1p1 X-Gm-Gg: ASbGncsj9aiwqEsG3gRFMv9W0UOXYfucF54MwzHJGj4zXjgfw5xvit4A+ZaM6qA5j6w 6dAnzSBxa+/6eGMPr6cY3vIQdqQ7qp4GtBfFx4Sxv3DXYo3PCzJfm2p+1QbtR3mxbiVVzPX4SNP nUlMd9F5MochlCRdyFMivjyQ+sQWv0amOpfvex0ueyYvbdqiIzdgEnRZbYq2b1c2ytrqx/tAIRO WZrEKFI04n+lRZJW1a2J+8jtRxyDDUAE7nTXMQrng3jQgBg+WGu5oTjwM1bvdjFPl5Y5ImeOuVw sItoevyZVlyFNRRSu8tLf0/JM3VJ1sr+y8kDRMvH2qCGT6zoe+R6P86SaCNUvwWCTf21Qh64tSY LuZ3AiDF9Mqw0uLteCq8SAeUFDWkTZg== X-Google-Smtp-Source: AGHT+IEfwLa2l5GETasrkBN6s16G3uwHStgfCUXGV9Vb0lViqA4Rs63c7NBMXwsuNAY9/KPq3s8gww== X-Received: by 2002:a05:651c:f03:b0:32b:93fa:2c0b with SMTP id 38308e7fff4ca-32cc64d280emr4286261fa.11.1750845171079; Wed, 25 Jun 2025 02:52:51 -0700 (PDT) Received: from localhost.localdomain (2.135.54.165.dynamic.telecom.kz. [2.135.54.165]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-32b980a36c0sm19311851fa.62.2025.06.25.02.52.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Jun 2025 02:52:50 -0700 (PDT) From: Sabyrzhan Tasbolatov To: ryabinin.a.a@gmail.com, glider@google.com, andreyknvl@gmail.com, dvyukov@google.com, vincenzo.frascino@arm.com, catalin.marinas@arm.com, will@kernel.org, chenhuacai@kernel.org, kernel@xen0n.name, maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, borntraeger@linux.ibm.com, svens@linux.ibm.com, richard@nod.at, anton.ivanov@cambridgegreys.com, johannes@sipsolutions.net, dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com, chris@zankel.net, jcmvbkbc@gmail.com, akpm@linux-foundation.org Cc: guoweikang.kernel@gmail.com, geert@linux-m68k.org, rppt@kernel.org, tiwei.btw@antgroup.com, richard.weiyang@gmail.com, benjamin.berg@intel.com, kevin.brodsky@arm.com, kasan-dev@googlegroups.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-um@lists.infradead.org, linux-mm@kvack.org, snovitoll@gmail.com Subject: [PATCH 1/9] kasan: unify static kasan_flag_enabled across modes Date: Wed, 25 Jun 2025 14:52:16 +0500 Message-Id: <20250625095224.118679-2-snovitoll@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250625095224.118679-1-snovitoll@gmail.com> References: <20250625095224.118679-1-snovitoll@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Stat-Signature: zerco6a7idudj6pwne9egg7ogmag96f7 X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 41669140006 X-HE-Tag: 1750845172-78690 X-HE-Meta: U2FsdGVkX191beKK8VPAKHIGnDW7OOlT0OA48Sca73bt3Op1HTm5ttQ+BHz2r2piHULgKXvybsJ6VUa41yUQV/FNkb3wLwWaoo2etnDZjEt6gtQhGXKPdeGTptduvApPUcF0xkVURMz+PNCj91eD0PxEcq3gBHMikq5xlfy3MAR8jJlwggab9YgArR071GuII+cHAM7f87w6vCE++FFYSocshVYXjlYsstKLeTKPDY/zzctmZNXqUr7gFIu7cB0yTcldj1twniUr1mwEWLNU0qxr46vQbH1KnUNm7MTYgx72DBZP3g4u8sx1oBsXvEzoDSqN7l9qepAWcaB4XcOiio+piKveLAeWCp7QPyTKyAd4Su+P8Pw1Qpubh/1tzGkufH8AC2HU39B7i4gi0FhcZT2NU82dsm81gcOLcn6cbN8Z53l2RTo58DQ3tnAlz4fg2U3F6vTfRDJ1ANOXFGzp1jfZQpAufIYcGO6akWfjsUt6QX5+zj5iuYbOt8HIBxQrbDuiulbHAXUVLBshZ9QXX2PAnP7fUmGgWLcgdL+eW6dsL4yPlHGMCkeuCxBogZh/7M9GLykQnppxaiRPHrR7HW5mX+WkZzBFXAGMcpJKpqIy6eqcnVRN6jfgPF3p2ys1qyoaQCm1tVnS/GHrniLu2DVmigcpxYNjEkUC442ZuKCOY+KpWT/stlyWK2E/4Wa23otkhdX4irI2+ys1myizxUiGlyJ923sgKeOoDhAMPT5iDFl91rLsAuDb4wfOrNH84LWzCCj+C2Ck0PjElfGb1aQkyuXbbdn6g3lRF/y/koxewenpidNnviGHcp6382ucnBm5vHZA1jrEgZWHtwFco5am7irjUqDFJeFc2QwkLXQPhwgcclpxa6E266ljZkIevL7yuLqYTZk0G8x4M3CiFPyScdXs80IQNGmXuZUuopQG7bCyd9p3gHcrIqaxVt2aWw6/DJ6hb1aIi7Mlb1z uDbuHnei srPbQ+h1UX9CMYUeEQBgj5y1+MEOmd/xADkGJJApULiZ6QklEB0JNftPTnnuiccTr3AcsDzluSRvUv2jMLmSuIrMqy0IitXO9WTIhJWl270qFEtQ3HuFHYdX/I5VsCI02aK3eJCpxsW94/m2k0BTlJYQzYwhEnDIf10Vf9R1SkYhs4YPoUYbQS20Dj6nqsOuXQVQQIs02CshLoXD/jWeTQB4X72brFotqYwtjZNGIU2u83mqpGgvANM2yEd3yPlJU/j/FApom1z3vhbg/5Y8AzMh0fGZF7ZCO4ijUUUHOa3roOmKLifJK6QhhmidyLAYclZ6PPZkC4Dn91u5xS3gHVp1NwrnnL9HOZaUtGesPPDJoJYNyoz1kz0tVgMfrTMQDjV5i3jt/e8cfav7wxva+avfjQfe/SwTSSuqhnGRmvhYKSzZKOS/7FaOj5sPaKnpsFmLeBFqr2jrBissN87rYzaHLQW13wl3xVEXyCJsYHWIJ6Mhb+y0kkmL8gVNV1KUBBtK3mo66JM0m5UIwaSRon79bzMJTHuLwF4q1PVObRws9PcbsuwTihgwp+ZrbI7R0aSVERZbN+JPwB4m5BRByeVUzf1g1KPz24bUSGs7uIab7uz7iZBi9US/Aeg== 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: Historically the fast-path static key `kasan_flag_enabled` existed only for `CONFIG_KASAN_HW_TAGS`. Generic and SW_TAGS either relied on `kasan_arch_is_ready()` or evaluated KASAN checks unconditionally. As a result every architecture had to toggle a private flag in its `kasan_init()`. This patch turns the flag into a single global runtime predicate that is built for every `CONFIG_KASAN` mode and adds a helper that flips the key once KASAN is ready. Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218315 Signed-off-by: Sabyrzhan Tasbolatov --- include/linux/kasan-enabled.h | 22 ++++++++++++++++------ include/linux/kasan.h | 6 ++++++ mm/kasan/common.c | 7 +++++++ mm/kasan/generic.c | 11 +++++++++++ mm/kasan/hw_tags.c | 7 ------- mm/kasan/sw_tags.c | 2 ++ 6 files changed, 42 insertions(+), 13 deletions(-) diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h index 6f612d69ea0c..2436eb45cfee 100644 --- a/include/linux/kasan-enabled.h +++ b/include/linux/kasan-enabled.h @@ -4,8 +4,12 @@ #include -#ifdef CONFIG_KASAN_HW_TAGS +#ifdef CONFIG_KASAN +/* + * Global runtime flag. Starts ‘false’; switched to ‘true’ by + * the appropriate kasan_init_*() once KASAN is fully initialized. + */ DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); static __always_inline bool kasan_enabled(void) @@ -13,18 +17,24 @@ static __always_inline bool kasan_enabled(void) return static_branch_likely(&kasan_flag_enabled); } -static inline bool kasan_hw_tags_enabled(void) +#else /* !CONFIG_KASAN */ + +static __always_inline bool kasan_enabled(void) { - return kasan_enabled(); + return false; } -#else /* CONFIG_KASAN_HW_TAGS */ +#endif /* CONFIG_KASAN */ -static inline bool kasan_enabled(void) +#ifdef CONFIG_KASAN_HW_TAGS + +static inline bool kasan_hw_tags_enabled(void) { - return IS_ENABLED(CONFIG_KASAN); + return kasan_enabled(); } +#else /* !CONFIG_KASAN_HW_TAGS */ + static inline bool kasan_hw_tags_enabled(void) { return false; diff --git a/include/linux/kasan.h b/include/linux/kasan.h index 890011071f2b..51a8293d1af6 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h @@ -543,6 +543,12 @@ void kasan_report_async(void); #endif /* CONFIG_KASAN_HW_TAGS */ +#ifdef CONFIG_KASAN_GENERIC +void __init kasan_init_generic(void); +#else +static inline void kasan_init_generic(void) { } +#endif + #ifdef CONFIG_KASAN_SW_TAGS void __init kasan_init_sw_tags(void); #else diff --git a/mm/kasan/common.c b/mm/kasan/common.c index ed4873e18c75..525194da25fa 100644 --- a/mm/kasan/common.c +++ b/mm/kasan/common.c @@ -32,6 +32,13 @@ #include "kasan.h" #include "../slab.h" +/* + * Definition of the unified static key declared in kasan-enabled.h. + * This provides consistent runtime enable/disable across all KASAN modes. + */ +DEFINE_STATIC_KEY_FALSE(kasan_flag_enabled); +EXPORT_SYMBOL(kasan_flag_enabled); + struct slab *kasan_addr_to_slab(const void *addr) { if (virt_addr_valid(addr)) diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c index d54e89f8c3e7..32c432df24aa 100644 --- a/mm/kasan/generic.c +++ b/mm/kasan/generic.c @@ -36,6 +36,17 @@ #include "kasan.h" #include "../slab.h" +/* + * Initialize Generic KASAN and enable runtime checks. + * This should be called from arch kasan_init() once shadow memory is ready. + */ +void __init kasan_init_generic(void) +{ + static_branch_enable(&kasan_flag_enabled); + + pr_info("KernelAddressSanitizer initialized (generic)\n"); +} + /* * All functions below always inlined so compiler could * perform better optimizations in each of __asan_loadX/__assn_storeX diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c index 9a6927394b54..8e819fc4a260 100644 --- a/mm/kasan/hw_tags.c +++ b/mm/kasan/hw_tags.c @@ -45,13 +45,6 @@ static enum kasan_arg kasan_arg __ro_after_init; static enum kasan_arg_mode kasan_arg_mode __ro_after_init; static enum kasan_arg_vmalloc kasan_arg_vmalloc __initdata; -/* - * Whether KASAN is enabled at all. - * The value remains false until KASAN is initialized by kasan_init_hw_tags(). - */ -DEFINE_STATIC_KEY_FALSE(kasan_flag_enabled); -EXPORT_SYMBOL(kasan_flag_enabled); - /* * Whether the selected mode is synchronous, asynchronous, or asymmetric. * Defaults to KASAN_MODE_SYNC. diff --git a/mm/kasan/sw_tags.c b/mm/kasan/sw_tags.c index b9382b5b6a37..525bc91e2fcd 100644 --- a/mm/kasan/sw_tags.c +++ b/mm/kasan/sw_tags.c @@ -45,6 +45,8 @@ void __init kasan_init_sw_tags(void) kasan_init_tags(); + static_branch_enable(&kasan_flag_enabled); + pr_info("KernelAddressSanitizer initialized (sw-tags, stacktrace=%s)\n", str_on_off(kasan_stack_collection_enabled())); } -- 2.34.1