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 93CF3C8302F for ; Tue, 1 Jul 2025 10:16:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3297C6B009B; Tue, 1 Jul 2025 06:16:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2B3276B009C; Tue, 1 Jul 2025 06:16:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 17B906B00A8; Tue, 1 Jul 2025 06:16:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id F3F626B009B for ; Tue, 1 Jul 2025 06:16:33 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id BF8A558CEA for ; Tue, 1 Jul 2025 10:16:33 +0000 (UTC) X-FDA: 83615291466.21.1E4E7F4 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by imf15.hostedemail.com (Postfix) with ESMTP id 3B78CA0005 for ; Tue, 1 Jul 2025 10:16:31 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=PjDoYwjt; spf=pass (imf15.hostedemail.com: domain of hca@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=hca@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751364991; 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=bI5gCubobaT76ILZ7nxLCeAprDNwZM108vGmis92vfw=; b=s9ENZ54q6QwNz7ndxVcsvnfoGC0+bN1LkEc691Q8IWU3nCTB3k48gnIzkGZudVGVJzkHrf pUF1AzO6F3BqdVEunKQQJYV/FfZ/TZpz7K/hJCdVxtkHwXDIEpFsl7MafIvH3OANUe9yEr qfMilosjjIsTFmxenaJm85g/5pco65c= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=PjDoYwjt; spf=pass (imf15.hostedemail.com: domain of hca@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=hca@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751364991; a=rsa-sha256; cv=none; b=NbUZoCQgtr5upV3jePpqpCM390BdPFA2Zm3zsB3c+62IS8Dg5k++E70TgRU0T2OgLYT5+5 8eo1rrC1OTOCVNHEMCUNdGm2VoT99gaRmwUcYHSloyE/oOEh2lUdZC7AA+XOCNXy3Q8Uw8 nZABKWzc8u5IjFLj42OoRPi2dk/rM04= Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5616feQ9015295; Tue, 1 Jul 2025 10:15:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=bI5gCu bobaT76ILZ7nxLCeAprDNwZM108vGmis92vfw=; b=PjDoYwjtYkSnDRugC3E/Hv o51v3h2eqLbh9PbKCz24WznV4ZvLaYp6Jd8agA71iKB5BcxaWfNXDxx/GBRMKaW3 3zwQRfDGD1wbtMpiFA30+yJ0p2Dz70v8RKSPdvUI6qypZ6CrGufrf+7IIFEUHjpn VmkbQl7a8Y3LA2aHvCqH/jproxX7Zk8z+3ExVJMJr0374lAG/InCZaGor60RhO/n pZkHKDq5PA9Rrp9xR6ocRlUp4mDAsxk77EVa6HUg/PlWw41EfjilnF4bkr92n46Q F8/88KcMiADFeGk8H7HpkIgzcddU+eeOqjJiJQCQdUedp0LGnNlGkuTdVNCZIoJA == Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 47j830pmab-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 01 Jul 2025 10:15:48 +0000 (GMT) Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 561A93Md010712; Tue, 1 Jul 2025 10:15:47 GMT Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 47j830pma6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 01 Jul 2025 10:15:47 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 56173CoY032320; Tue, 1 Jul 2025 10:15:45 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 47ju40j8xb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 01 Jul 2025 10:15:45 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 561AFfZk21365030 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 1 Jul 2025 10:15:41 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4405320040; Tue, 1 Jul 2025 10:15:41 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 32B5D20075; Tue, 1 Jul 2025 10:15:39 +0000 (GMT) Received: from osiris (unknown [9.111.81.242]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTPS; Tue, 1 Jul 2025 10:15:39 +0000 (GMT) Date: Tue, 1 Jul 2025 12:15:37 +0200 From: Heiko Carstens To: Andrey Konovalov Cc: Sabyrzhan Tasbolatov , ryabinin.a.a@gmail.com, glider@google.com, dvyukov@google.com, vincenzo.frascino@arm.com, linux@armlinux.org.uk, 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, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, 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, nathan@kernel.org, nick.desaulniers+lkml@gmail.com, morbo@google.com, justinstitt@google.com, arnd@arndb.de, rppt@kernel.org, geert@linux-m68k.org, mcgrof@kernel.org, guoweikang.kernel@gmail.com, tiwei.btw@antgroup.com, kevin.brodsky@arm.com, benjamin.berg@intel.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-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-um@lists.infradead.org, linux-mm@kvack.org, llvm@lists.linux.dev Subject: Re: [PATCH v2 00/11] kasan: unify kasan_arch_is_ready with kasan_enabled Message-ID: <20250701101537.10162Aa0-hca@linux.ibm.com> References: <20250626153147.145312-1-snovitoll@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: qu16htFmviN0JHs_Lk2UXggpRHKamSL3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzAxMDA1OCBTYWx0ZWRfX1+8afvt373Lc kWdnunbPz6C9f/GOHjl4ZrQKHABgOATpMhlNHzlwXmovxD7qpB0NHRzjO1rBP3TCrzWp9aDgeMZ BRGyDtucaQptfKRiB1Ir1UEiA/DnvvId+/noIpRKGxbqodALAZAM/OouyWSCdZn9Br55SUFY1mF /QElD3fMWDED/2Up/bE3bdkQFp0y4l0tbOgz/r1X+BYJtzifCAp1d8Rjiv1rqAaxBvj1uWPWfAv gRsEeOrKai0th89ONMoXzLZtwQ+ZFabmyQx6rICdTSFHm+Cjr3wa4WzluId4DM526gzf4NqEHxp T9u38OW/UmDyf8gxdR/KVtrZKshh0EQP4/y/BFKLU+IB3+JEAkKDZdFyiBgBhMsxkkHSKm2H012 aLNkwLyaNoCYreQzuUSpD2tKUqxrMT5HjvgLBKo4Yoqu8W0zpbow/WbwFXvshhrHRfN8RYzo X-Authority-Analysis: v=2.4 cv=MOlgmNZl c=1 sm=1 tr=0 ts=6863b554 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=IkcTkHD0fZMA:10 a=Wb1JkmetP80A:10 a=jBQngTtrd59FM_Ge02gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: HLwv3VLvA_zkneOazGXOaA6Q1nuISU0B X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-01_02,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 mlxscore=0 adultscore=0 suspectscore=0 bulkscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 mlxlogscore=906 spamscore=0 malwarescore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507010058 X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 3B78CA0005 X-Stat-Signature: za1eidzkn9yx5q66krgthjhb5yceczdn X-Rspam-User: X-HE-Tag: 1751364991-847199 X-HE-Meta: U2FsdGVkX18Vp3ccVJpL/2Rq1e4MPtz+pxoZaDvC+NlLA1L+EqCgIcT4ikQcl0vYn8GOVhUfVE1izInsIB59/c269QX8E4s5ksD+7sJwWXM9nMxqB51WulRe9rEtP+nXcHVXBJuA40e/CZIhQ9Kgk3lNcn0N/PJLIM1LJqJAjrnbwAAAw3yxjMIeLzRAwXxy1UI99ay9szYnUXVKRX5j/k88QyW5tMrsOAz3vZhbk9EDMAgfIEYkFRe0GssUbOqsIJMzs5uAkA6cASJoKS8otA2G6PVUjfB+/96zIuvo7aHfFn2M62NajJL0jkJZfHIbaxEVMvzgBbIwuVPP4IF2Ho4QrRlLRJbKdZIUkzAYxgkDybEtHQkxiDdN6p3Jeznm7jJDOLILqXKgemvRL+bIBDWavRU4hzPVrXSeIsWKHp4OblPPHQymIYkyiCMeW4bjzPzrCFEz2IhxeM0U1NY05v2hft+L9dO+bXeJemIHFV5KP7KmOpx44URgDf+NwF2uD3JeKzwSkauXWIBVhK+rSPOFKVDvJvbbZVofHb5x4lnC8/DGOc7I14u/6Wbc56zBeHtnN8obB78yH8p5R2pR1yVT3f88UFqVBJRTE1CJifJ+VqQBKxtGCYfwZ9nd3A5zetiaPkeN+3mBzKGBeUVoOH19qetAhEDmdzg8FLS6RpHv76jAgHhfffW2TYnd4D9KkeCS8j2veDy8EUJGaNav22R1h/AWsb6v3RidOCYQdtkzB86tK30p3nSicDa0+uv1Br96cRt8KGR7Q/SJHlG7C2NOdVzQUXZStQ/BOs+aWnVgh2AdVfrC5PzlicaxhQqCg9BznQEGdr/qXAmtkx5RlSqybUQzcIw+5AajLiHjDeHvH8yFQljuqFWw+aGZ8n7ELSNK3P/9WQ6WfkzASSn25LWScLLj8Gkg8yAE32g77oHJ46xWDRav9dveDL21ml/4+gfjhjRWxr8GPLdS11X AwK4Zg8u Rv90UVNZGoJr/PGltxwl3Bg8E2IePM7ipv0+Jx0M8RrOOn8zXWZkbmk1Xbo1CXM87H4JkQ9sqVBb//ShY863KQo8HzvGA8CYzN4e2xTSPuIpRrAmjeVzoIPtDkfzFJ3dYpWlnVpfV2qVJrvcA8p8MtnD+xBG2AzQTy5m+sv8yaj970J2pzgg1c3Fkx98/Zqd40wXRbE5KfD31uaTU3MHN98LlwqSFX1GbXgrfC0qNfN8tJSiYoUdCEsjJlsqVxmZHqdtqjGBOwnp0eboEHzg/t5vSaRYgWmjs0uX1vM/uESOwbJrmSUvihZs+RWGgDh1d3BOb8Bt0LsaxWyZyO/EKoE9/B5OnlDp85TqgzYd/WGQTen12knwbOuQhdGAZF+oU0bEWRC7/6yEwg9RFNDw6A7jFUA== 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: > > > Another thing that needs careful consideration is whether it's > > > possible to combine kasan_arch_is_ready() and kasan_enabled() into the > > > same check logically at all. There's one issue mentioned in [1]: > > > > Hello, > > I've removed kasan_arch_is_ready() at all in this series: > > [PATCH v2 11/11] kasan: replace kasan_arch_is_ready with kasan_enabled > > > > Is it not what's expected by unification? > > I guess the issue description diverged a bit from what needs to be > done, sorry about that. > > The core 2 things I wanted to address with the unification are: > > 1. Avoid spraying kasan_arch_is_ready() throughout the KASAN > implementation and move these checks into include/linux/kasan.h (and > add __wrappers when required). > > 2. Avoid architectures redefining the same kasan_enabled global > variable/static key. > > Initially, I thought that s/kasan_arch_is_ready/kasan_enabled + simply > moving the calls into affected include/linux/kasan.h functions would > be enough. But then, based on [1], turns out it's not that simple. > > So now, I think we likely still need two separate checks/flags: > kasan_enabled() that controls whether KASAN is enabled at all and > kasan_arch_is_ready() that gets turned on by kasan_init() when shadow > is initialized (should we rename it to kasan_shadow_initialized()?). > But then we can still move kasan_arch_is_ready() into > include/linux/kasan.h and use the proper combination of checks for > each affected function before calling __wrappers. And we can still > remove the duplicated flags/keys code from the arch code. FWIW, as Alexander Gordeev already mentioned: this series breaks s390, since the static_branch_enable() call in kasan_init_generic() is now called way too early, and it isn't necessary at all. Which, as far as I understand, may be the case for other architectures as well. s390 sets up the required KASAN mappings in the decompressor and can start with KASAN enabled nearly from the beginning. So something like below on top of this series would address that. Given that this series is about to be reworked this is just for illustration :) diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 0c16dc443e2f..c2f51ac39a91 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -172,6 +172,7 @@ config S390 select HAVE_ARCH_JUMP_LABEL select HAVE_ARCH_JUMP_LABEL_RELATIVE select HAVE_ARCH_KASAN + select HAVE_ARCH_KASAN_EARLY select HAVE_ARCH_KASAN_VMALLOC select HAVE_ARCH_KCSAN select HAVE_ARCH_KMSAN diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h index 2436eb45cfee..049270a2269f 100644 --- a/include/linux/kasan-enabled.h +++ b/include/linux/kasan-enabled.h @@ -10,7 +10,11 @@ * Global runtime flag. Starts ‘false’; switched to ‘true’ by * the appropriate kasan_init_*() once KASAN is fully initialized. */ +#ifdef CONFIG_HAVE_ARCH_KASAN_EARLY +DECLARE_STATIC_KEY_TRUE(kasan_flag_enabled); +#else DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); +#endif static __always_inline bool kasan_enabled(void) { diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan index f82889a830fa..1407374e83b9 100644 --- a/lib/Kconfig.kasan +++ b/lib/Kconfig.kasan @@ -4,6 +4,13 @@ config HAVE_ARCH_KASAN bool +config HAVE_ARCH_KASAN_EARLY + bool + help + Architectures should select this if KASAN mappings are setup in + the decompressor and when the kernel can run very early with + KASAN enabled. + config HAVE_ARCH_KASAN_SW_TAGS bool diff --git a/mm/kasan/common.c b/mm/kasan/common.c index 0f3648335a6b..2aae0ce659b4 100644 --- a/mm/kasan/common.c +++ b/mm/kasan/common.c @@ -36,7 +36,11 @@ * Definition of the unified static key declared in kasan-enabled.h. * This provides consistent runtime enable/disable across all KASAN modes. */ +#ifdef CONFIG_HAVE_ARCH_KASAN_EARLY +DEFINE_STATIC_KEY_TRUE(kasan_flag_enabled); +#else DEFINE_STATIC_KEY_FALSE(kasan_flag_enabled); +#endif EXPORT_SYMBOL(kasan_flag_enabled); struct slab *kasan_addr_to_slab(const void *addr) diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c index a3b112868be7..455376d5f1c3 100644 --- a/mm/kasan/generic.c +++ b/mm/kasan/generic.c @@ -42,7 +42,8 @@ */ void __init kasan_init_generic(void) { - static_branch_enable(&kasan_flag_enabled); + if (!IS_ENABLED(CONFIG_HAVE_ARCH_KASAN_EARLY)) + static_branch_enable(&kasan_flag_enabled); pr_info("KernelAddressSanitizer initialized (generic)\n"); }