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 450D3C021AA for ; Wed, 19 Feb 2025 23:31:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF6C044018B; Wed, 19 Feb 2025 18:31:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id CA5AA280276; Wed, 19 Feb 2025 18:31:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AA99A44018B; Wed, 19 Feb 2025 18:31:26 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 52A8C280276 for ; Wed, 19 Feb 2025 18:31:26 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 46E2FA0E6D for ; Wed, 19 Feb 2025 23:31:25 +0000 (UTC) X-FDA: 83138292930.07.8C98B55 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by imf06.hostedemail.com (Postfix) with ESMTP id B4933180007 for ; Wed, 19 Feb 2025 23:31:20 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=jDVKrBfi; spf=pass (imf06.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.128.51 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740007880; 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=vTgTbeY1aqQKxUER4SE5xysBw6pVVMa23Uc6KxK62yU=; b=AWQuYVZd2thftHl3Q/f+jCHHUItlBEKFA7IqCAqvpEuGNKtK0+obvAggLBg/k5CY0w0woJ kSfUyLGGolmTcCLHJ0vtkzuGr+bMSkqhmKaI3ep3I87xSbD4rPSnx3xfvu3Jhy9nwcf/yJ 4gLOmQPuySQVCZ50g7MVjnhpofEaFpA= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=jDVKrBfi; spf=pass (imf06.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.128.51 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740007880; a=rsa-sha256; cv=none; b=Tp9q0Rwlro/FpQ9OP2XWOJ1ibWqOmhx2z0QKd5fvfRqVhWLVlzPhJ4ifP95GID2VSBu2GE c5pCysL2HiLUW/sE3qC2MNQAUDZf3/vYyP0IpDVnNQ3UOYzuUvB7sOugkh4/pPd1DlJQoM la2y1BEFxq0Fay6edqCd09U2+IPO7YQ= Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4397e5d5d99so1795705e9.1 for ; Wed, 19 Feb 2025 15:31:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740007879; x=1740612679; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=vTgTbeY1aqQKxUER4SE5xysBw6pVVMa23Uc6KxK62yU=; b=jDVKrBfigZIBnKBBJGIvAms5EVQxxT382RCcNE7PsJmIbyL9TuH8ds3iHrpEqtOk8X brdxl6f52nmF7NEUJurlHHc6I9ylANMaphRSZkkYE9gpk+wS9+o64YVQMrAOrw4wxGHT LpNEP68gzYe4laLhW0RBkPRxKWZ9Pr4UsMsazGNsrUYr9Nnyq0WNaUzb2YdktYvVQWLf WxuUi7ECVrMKcQuo9Q19ZBdyVQEpxY02nPRlPGbKiht0ANJJRSMU7R4bXJJz28wQXHv3 0r2zOz3IX5ZSUC5VGL6cC8SOOV3wiKVo75x4T64CkLyRt4rB1b4gaORDo9IDHCxxsCQT /Mfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740007879; x=1740612679; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vTgTbeY1aqQKxUER4SE5xysBw6pVVMa23Uc6KxK62yU=; b=C00OY9pQTG4EsVm/T0pX1Z6cIFGgR8IXir3Dg3M8qPRUqBO0dlo2qgQk6CyXIcYWX2 dpWwnLbknED6Jy3qOGleoXP8OvS4JXmoaum1zAoXt5QTs41vAvAxqHP3LlgzG6JvEvFA rHzfdI3f5Q+bR/inMwMWb+KXp+ITekUbT0CjxikB1qLwflvNjVxbsb2jZ+GNKXizzw0f CCvTg7XEXvQ33dOXxgzyHzjnAHH/Ag5KIII/INZ+Puftg8yvSoJC56ItYZKUbY7mvA4D TMZoh/ZFSo0IbkQY4SP9gcy82pCEzIRbpKp/OTw+a7rUx5ReokUtx3Qe1vvLq98/i5FI BOFQ== X-Forwarded-Encrypted: i=1; AJvYcCXgRmfHVPvgaUuS6ijilESqAy0pQLoeayIpGAWivvk32S+5hE3qElYWwlGb5KCXDmkE4pLgRU1CDg==@kvack.org X-Gm-Message-State: AOJu0YwVOP1BMmnMSc/2GQgxCPTQWYfwcAUfE3pjEt57BmU13bhyW7TR 3zAuWXvjwXO/G7haQp+aNOVrvt5FXwYzH1BZjDuNqniw8T32mIxpNdtuGufnH3eETTA5yYkDNo5 kZ5dSTUIp9FNwXoZevNOBdoMv8X8= X-Gm-Gg: ASbGncumgOC0e0o/lUh+g0msqfOfqPmLi5WYM3VEVp0n5fOcDbb1JxSpXoOHqEqyCRR 8v17uys/S+1Q7Wk2qki/T66PFiZ2cZjSve4apShxEadMazIHooEnILkAHKWgE9glV4cb3geILo1 4= X-Google-Smtp-Source: AGHT+IEl3UvjpiwtEnmlDQTet+PBKHLtJ16WAlVVzlEf6w0KVNsCxCG+Ab88rtPhr5IPReIvRJDIdU/sadxjpPRNqdc= X-Received: by 2002:a05:6000:1844:b0:38f:4d40:358 with SMTP id ffacd0b85a97d-38f4d400751mr11293670f8f.9.1740007878898; Wed, 19 Feb 2025 15:31:18 -0800 (PST) MIME-Version: 1.0 References: <2a2f08bc8118b369610d34e4d190a879d44f76b8.1739866028.git.maciej.wieczor-retman@intel.com> In-Reply-To: <2a2f08bc8118b369610d34e4d190a879d44f76b8.1739866028.git.maciej.wieczor-retman@intel.com> From: Andrey Konovalov Date: Thu, 20 Feb 2025 00:31:08 +0100 X-Gm-Features: AWEUYZkbmdm-WfLa0PA56ZfKvrD8Lj6e3So80KOsOkQ_JlKSdX3epi4Hoik-GnA Message-ID: Subject: Re: [PATCH v2 13/14] x86: runtime_const used for KASAN_SHADOW_END To: Maciej Wieczor-Retman Cc: kees@kernel.org, julian.stecklina@cyberus-technology.de, kevinloughlin@google.com, peterz@infradead.org, tglx@linutronix.de, justinstitt@google.com, catalin.marinas@arm.com, wangkefeng.wang@huawei.com, bhe@redhat.com, ryabinin.a.a@gmail.com, kirill.shutemov@linux.intel.com, will@kernel.org, ardb@kernel.org, jason.andryuk@amd.com, dave.hansen@linux.intel.com, pasha.tatashin@soleen.com, ndesaulniers@google.com, guoweikang.kernel@gmail.com, dwmw@amazon.co.uk, mark.rutland@arm.com, broonie@kernel.org, apopple@nvidia.com, bp@alien8.de, rppt@kernel.org, kaleshsingh@google.com, richard.weiyang@gmail.com, luto@kernel.org, glider@google.com, pankaj.gupta@amd.com, pawan.kumar.gupta@linux.intel.com, kuan-ying.lee@canonical.com, tony.luck@intel.com, tj@kernel.org, jgross@suse.com, dvyukov@google.com, baohua@kernel.org, samuel.holland@sifive.com, dennis@kernel.org, akpm@linux-foundation.org, thomas.weissschuh@linutronix.de, surenb@google.com, kbingham@kernel.org, ankita@nvidia.com, nathan@kernel.org, ziy@nvidia.com, xin@zytor.com, rafael.j.wysocki@intel.com, andriy.shevchenko@linux.intel.com, cl@linux.com, jhubbard@nvidia.com, hpa@zytor.com, scott@os.amperecomputing.com, david@redhat.com, jan.kiszka@siemens.com, vincenzo.frascino@arm.com, corbet@lwn.net, maz@kernel.org, mingo@redhat.com, arnd@arndb.de, ytcoode@gmail.com, xur@google.com, morbo@google.com, thiago.bauermann@linaro.org, linux-doc@vger.kernel.org, kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, llvm@lists.linux.dev, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, x86@kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: B4933180007 X-Stat-Signature: tk7q7i7br4fxi34prupn3qqrwi9gx8pi X-HE-Tag: 1740007880-624957 X-HE-Meta: U2FsdGVkX1+MzVZjakq+jkgfEQbZZrhO6xdWJTh3nhmGEpxkSelsEuWGivloownRiVfSh00tNbZJPSK7oQ2/B6I5EYXPEN/kyZ5HaSiO3zHtrzlR8Dc1k0y85dnkcQhzwP82X5Ybv0jc2CXaEqeJ+Z8owHgV92HaB4bxTP0DxyIJ517ODWhrc+Ca6rpR6nhJmg+JMb4WQs2RGW/+KIxEovHW8/3s/qDdbTIHA4642U3Qm85mJX0oOiC05f7MWtfaklXkZUr4qxnWTg/fKb75BQV9X/m2HupHz8uVqN9Ve53eeCzlRIvyK7xhNudMNQbdOC1VmEHDGWaiMgQPvDZDFI1/24A1aVM8EQ/EAg1SiL83nm8RrTgwKXStuAn5jzeZ/GhaZv/35gBrQC8AkV1QoPta3CTwQGAzVM9hdnR9gvWq3s13NWMWPSB7UARlPdIVyTNjakA6joAM10fepNFYEmUQMA80dLGxyHBDvdskB3vIjjcEms/D1y98jju/OuPvk9TP7aDqQMlTDoGy/V8dVErF8ed09IBU8Eo2/lX0CZXtyxT8NmLeBcGmoEUbGvAOTcDatzch9IV0gatGS5vbDOzOLd2YXkxO5M6RR8V6zBMSCQkmFJy+ERBMY0lc+SmgZ3PHNtmHt+zATuA2Z94GvwFRt7B/V/2AvytZsGhtpnj84T/3bsizm/PUVhNWEvUbBkurLSV8Q2V1Cwsh6Al0VvinjTJhUmv6hERFaBM2s49Q4wdiLhIysmKu6tmsFRXTW0JtA36/5e3EoK/GnLRZv4D7MJuEWw9iXBiwAtBuzC1i/GsoP5hm9ZEtNJwrtpt6wN5wVKqT2y0eXpMf4ibn9+d5ACH7pR/CLCxZJaMSeVw3vByYrrSdm9fRjOovOz5sXnkHJQXvog4AKbbzE4O3sE1x3plDmkS/E7odyUx8P+QsFMc5fqhU/kl256xp8e/rvL+883dtQL6IuqaGxdu NDbC3j+R PrQCkh6fS51FApzWDzXBEasZb0VPn+zetEI7pcYlhEC/08KyomemzOoQM5Ei5UBuSls8UglxbxLUZ+gnCV3UrLmFBrcB/FppmisWj7NUULihzGTKCIKjwZkfELkRwaDRWa+3sRDtvuL/J77lKQAzBW7QAldOpCZfgLsufSPYWBq9KBhr/yLUtXx2cuGH3O3+e8Xviu5vyyG8dwQiO5UFCUJDTk91kR5JS9dj0+uLwIVQ1cIV2a49X+J6CxwghmYgqy759xzHXAr82uvf7cyuCZEGyQwzNV0pcMQKayx4Tp94kZJMgdrhwXmu/anXeyYaDyCb28RImjX6cRSXQIufeLfBNM0klPZ0NyWOn6i3+JPrNHTF+zdwdONDvJ0waJ4nC8e7uKhTuoWdG8aikEHVvkNkcSn1loDKLTHYyUQcOy24viIfu/y0IYNg5EaH+nBLSToFO5Kur8LE0BsQ= 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: On Tue, Feb 18, 2025 at 9:20=E2=80=AFAM Maciej Wieczor-Retman wrote: > > On x86, generic KASAN is setup in a way that needs a single > KASAN_SHADOW_OFFSET value for both 4 and 5 level paging. It's required > to facilitate boot time switching and it's a compiler ABI so it can't be > changed during runtime. > > Software tag-based mode doesn't tie shadow start and end to any linear > addresses as part of the compiler ABI so it can be changed during > runtime. KASAN_SHADOW_OFFSET is passed to the compiler via hwasan-mapping-offset, see scripts/Makefile.kasan (for the INLINE mode). So while we can change its value, it has to be known at compile time. So I don't think using a runtime constant would work. Which means that KASAN_SHADOW_OFFSET has to have such a value that works for both 4 and 5 level page tables. This possibly means we might need something different than the first patch in this series. But in case I'm wrong, I left comments for the current code below. > This notion, for KASAN purposes, allows to optimize out macros > such us pgtable_l5_enabled() which would otherwise be used in every > single KASAN related function. > > Use runtime_const infrastructure with pgtable_l5_enabled() to initialize > the end address of KASAN's shadow address space. It's a good choice > since in software tag based mode KASAN_SHADOW_OFFSET and > KASAN_SHADOW_END refer to the same value and the offset in > kasan_mem_to_shadow() is a signed negative value. > > Setup KASAN_SHADOW_END values so that they're aligned to 4TB in 4-level > paging mode and to 2PB in 5-level paging mode. Also update x86 memory > map documentation. > > Signed-off-by: Maciej Wieczor-Retman > --- > Changelog v2: > - Change documentation kasan start address to non-dense values. > > Documentation/arch/x86/x86_64/mm.rst | 6 ++++-- > arch/x86/Kconfig | 3 +-- > arch/x86/include/asm/kasan.h | 14 +++++++++++++- > arch/x86/kernel/vmlinux.lds.S | 1 + > arch/x86/mm/kasan_init_64.c | 5 ++++- > 5 files changed, 23 insertions(+), 6 deletions(-) > > diff --git a/Documentation/arch/x86/x86_64/mm.rst b/Documentation/arch/x8= 6/x86_64/mm.rst > index f2db178b353f..5014ec322e19 100644 > --- a/Documentation/arch/x86/x86_64/mm.rst > +++ b/Documentation/arch/x86/x86_64/mm.rst > @@ -60,7 +60,8 @@ Complete virtual memory map with 4-level page tables > ffffe90000000000 | -23 TB | ffffe9ffffffffff | 1 TB | ... unus= ed hole > ffffea0000000000 | -22 TB | ffffeaffffffffff | 1 TB | virtual = memory map (vmemmap_base) > ffffeb0000000000 | -21 TB | ffffebffffffffff | 1 TB | ... unus= ed hole > - ffffec0000000000 | -20 TB | fffffbffffffffff | 16 TB | KASAN sh= adow memory > + ffffec0000000000 | -20 TB | fffffbffffffffff | 16 TB | KASAN sh= adow memory (generic mode) > + fffff40000000000 | -8 TB | fffffc0000000000 | 8 TB | KASAN sh= adow memory (software tag-based mode) > __________________|____________|__________________|_________|_________= ___________________________________________________ > | > | Identica= l layout to the 56-bit one from here on: > @@ -130,7 +131,8 @@ Complete virtual memory map with 5-level page tables > ffd2000000000000 | -11.5 PB | ffd3ffffffffffff | 0.5 PB | ... unus= ed hole > ffd4000000000000 | -11 PB | ffd5ffffffffffff | 0.5 PB | virtual = memory map (vmemmap_base) > ffd6000000000000 | -10.5 PB | ffdeffffffffffff | 2.25 PB | ... unus= ed hole > - ffdf000000000000 | -8.25 PB | fffffbffffffffff | ~8 PB | KASAN sh= adow memory > + ffdf000000000000 | -8.25 PB | fffffbffffffffff | ~8 PB | KASAN sh= adow memory (generic mode) > + ffe0000000000000 | -6 PB | fff0000000000000 | 4 PB | KASAN sh= adow memory (software tag-based mode) > __________________|____________|__________________|_________|_________= ___________________________________________________ > | > | Identica= l layout to the 47-bit one from here on: > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index 6df7779ed6da..f4ef64bf824a 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -400,8 +400,7 @@ config AUDIT_ARCH > > config KASAN_SHADOW_OFFSET > hex > - depends on KASAN > - default 0xdffffc0000000000 > + default 0xdffffc0000000000 if KASAN_GENERIC Let's put a comment here explaining what happens if !KASAN_GENERIC. Also, as I mentioned in the first patch, we need to figure out what to do with scripts/gdb/linux/kasan.py. > > config HAVE_INTEL_TXT > def_bool y > diff --git a/arch/x86/include/asm/kasan.h b/arch/x86/include/asm/kasan.h > index a75f0748a4b6..4bfd3641af84 100644 > --- a/arch/x86/include/asm/kasan.h > +++ b/arch/x86/include/asm/kasan.h > @@ -5,7 +5,7 @@ > #include > #include > #include > -#define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) > + > #define KASAN_SHADOW_SCALE_SHIFT 3 > > /* > @@ -14,6 +14,8 @@ > * for kernel really starts from compiler's shadow offset + > * 'kernel address space start' >> KASAN_SHADOW_SCALE_SHIFT > */ > +#ifdef CONFIG_KASAN_GENERIC > +#define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) > #define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \ > ((-1UL << __VIRTUAL_MASK_SHIFT) >= > \ > KASAN_SHADOW_SCALE_SHIFT)= ) > @@ -24,12 +26,22 @@ > #define KASAN_SHADOW_END (KASAN_SHADOW_START + \ > (1ULL << (__VIRTUAL_MASK_SHIFT - = \ > KASAN_SHADOW_SCALE_SHIF= T))) > +#endif > + > > #ifndef __ASSEMBLY__ > +#include > #include > #include > #include > > +#ifdef CONFIG_KASAN_SW_TAGS > +extern unsigned long KASAN_SHADOW_END_RC; > +#define KASAN_SHADOW_END runtime_const_ptr(KASAN_SHADOW_END_RC) > +#define KASAN_SHADOW_OFFSET KASAN_SHADOW_END > +#define KASAN_SHADOW_START (KASAN_SHADOW_END - ((UL(1)) << (__VIRTUA= L_MASK_SHIFT - KASAN_SHADOW_SCALE_SHIFT))) Any reason these are under __ASSEMBLY__? They seem to belong better together with the CONFIG_KASAN_GENERIC definitions above. > +#endif > + > #define arch_kasan_set_tag(addr, tag) __tag_set(addr, tag) > #define arch_kasan_reset_tag(addr) __tag_reset(addr) > #define arch_kasan_get_tag(addr) __tag_get(addr) > diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.= S > index 0deb4887d6e9..df6c85f8f48f 100644 > --- a/arch/x86/kernel/vmlinux.lds.S > +++ b/arch/x86/kernel/vmlinux.lds.S > @@ -353,6 +353,7 @@ SECTIONS > > RUNTIME_CONST_VARIABLES > RUNTIME_CONST(ptr, USER_PTR_MAX) > + RUNTIME_CONST(ptr, KASAN_SHADOW_END_RC) > > . =3D ALIGN(PAGE_SIZE); > > diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c > index 299a2144dac4..5ca5862a5cd6 100644 > --- a/arch/x86/mm/kasan_init_64.c > +++ b/arch/x86/mm/kasan_init_64.c > @@ -358,6 +358,9 @@ void __init kasan_init(void) > int i; > > memcpy(early_top_pgt, init_top_pgt, sizeof(early_top_pgt)); > + unsigned long KASAN_SHADOW_END_RC =3D pgtable_l5_enabled() ? 0xff= f0000000000000 : 0xfffffc0000000000; I think defining these constants in arch/x86/include/asm/kasan.h is cleaner than hardcoding them here. > + > + runtime_const_init(ptr, KASAN_SHADOW_END_RC); > > /* > * We use the same shadow offset for 4- and 5-level paging to > @@ -372,7 +375,7 @@ void __init kasan_init(void) > * bunch of things like kernel code, modules, EFI mapping, etc. > * We need to take extra steps to not overwrite them. > */ > - if (pgtable_l5_enabled()) { > + if (pgtable_l5_enabled() && !IS_ENABLED(CONFIG_KASAN_SW_TAGS)) { > void *ptr; > > ptr =3D (void *)pgd_page_vaddr(*pgd_offset_k(KASAN_SHADOW= _END)); > -- > 2.47.1 >