From patchwork Tue Feb 18 08:15:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979236 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 51B9AC021A9 for ; Tue, 18 Feb 2025 08:16:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E14102800EF; Tue, 18 Feb 2025 03:16:32 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D9CE82800EC; Tue, 18 Feb 2025 03:16:32 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BC7F42800EF; Tue, 18 Feb 2025 03:16:32 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 915E92800EC for ; Tue, 18 Feb 2025 03:16:32 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 198781408F0 for ; Tue, 18 Feb 2025 08:16:32 +0000 (UTC) X-FDA: 83132358624.19.B50B0F1 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf29.hostedemail.com (Postfix) with ESMTP id CCDF512000D for ; Tue, 18 Feb 2025 08:16:29 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=UqszCxrr; spf=pass (imf29.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866590; 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:in-reply-to:references:references:dkim-signature; bh=4UWaJK9j0uxOk7/Ht+ykZYDM3eYd2BuweApyK6vGFZk=; b=OPFcwyJYL311oGNzl6e9BNppV+/sH9ASNUu++buhzLxxVI+scTL1ynH/aJ4+o0b7KwZ6SL RobSqDhrsUaC2T/y7eQR86OEd6KWl4NngppU1j0yy0fwMaGPfzuVCtNlGsP9SHJcSgzOLI U3BAMfVAUM0w/MjEvzijzSK4BAeZNk0= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=UqszCxrr; spf=pass (imf29.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866590; a=rsa-sha256; cv=none; b=YlwkNpJiwyz1dneQ3IlzHc3nNDWP9PsEyTJy4uctoXRxnt+ibigdn34w4yvn4GiXhvORXM hom2mBdSlx7cRPCLvWs+W00SKcWkPVuJYW1l77nmsikWFBsUHxdvyRJPPODMs6ifmy3G6w fnrYYSzNXw3v9Cq4wtaKIHjlm2Fh9Ko= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866590; x=1771402590; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3OxPqpbeaMefHvpq3ru3C32MWIIIyuuXR+MITG7IuY8=; b=UqszCxrr4+62RwtdY0g+B6oFHiOufH+1v50ca2/hp6fJcp/XQ4sql9un PjXtfUGvIQeA9kFusNT4HF406SquCIIzKojeWHgWA2j7upbSasSY83UhX ZHhuUV0cmQsLYAumADK5rGbI7d3ilZyPM8QqzKDeXSdJF0UqRrwlrHafQ kqKc4KbnoEcKlFukVaNksL03qu4j45eSISlvc8ttvi0XKDvbAlzIaPy2N y0zG7Og4Vem/TtqojWl/LLYeeeqL0lLC5OopKKQcS0K4CLbqO7DvuHr2O 0pLQ6OKiOnZGbJf+rCNy0k5vo/qctBqPqCrHtMg4GL30umeGx7fysirOP Q==; X-CSE-ConnectionGUID: XNGUxdFlRHu6K6L0Xbg2jQ== X-CSE-MsgGUID: OLvq9RnHRQGPIc2Aw+z8pg== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28149932" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28149932" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:16:28 -0800 X-CSE-ConnectionGUID: QpgCH/c2Sdyz4OBPsrUblg== X-CSE-MsgGUID: UKqCz034Qn2XEphi0iGvRQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247306" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:16:10 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 01/14] kasan: sw_tags: Use arithmetic shift for shadow computation Date: Tue, 18 Feb 2025 09:15:17 +0100 Message-ID: <168f775c4587f3a1338271390204a9fe16b150dd.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: CCDF512000D X-Stat-Signature: m9fij4s8rcrb3yh6naxie8cpn6cmtcza X-HE-Tag: 1739866589-463772 X-HE-Meta: U2FsdGVkX18+RE20VJp8kOkH56qty8awksaWvkK1UZtR77OMRLy/CWI82tamjNRiBKkDriK2KQJ/Tjl1ocgq45By1UWSK6KXbEbvlV0wpSW0ldSQjc6sEG7BKZ4A99jAZKwWDeCuK+sESd1qRmf7WxpplHSf9p1vhD7Fc0b6g+CiXBEAAGxaUvvEBlc1vEvrp+F8Egbfux1WSqv5qNkrbG0AcFrq8fLGPB0p0JotO3WiMyecrWErXqp2XADR7h8W9eNS+do+rttAmFYg+Rik2s04P6evwo4d2PyRefedEkApSnj3DonjvWBxxbDpqWL/39uiUT4xasxUKDxB8dP6CalNWmmh2xFLN4cjrd9Q1NqRXfzlwVw+OQdNhlRyVEDFhtjnfs79kbFFqAO70E4j/CTwbZcui5tAjVq9IUggJ5ZV3I8XBp2OmKoycrpl9tG6RJ1BbX3JjvGUpKkUXj6jQnJMLN+iI1K3rOliAOYs0LZ7YC0ooB/sqaX2C9lcD6UAu3OERqDZSYtkSZSpof4zkpAijM0k8phAVgGvCq5gXmiaW4/EJytrJHrSl6vS1H+HYi56T+1kE2aaUlopZWpSUlSZoQe2BPqU3mdnLlXSaXgasvoYuS1s9XodJCikOWevZDoTAxpmj+9yCrxKz9l/6vy1q4zIeaRVWOYrbmHZFD3Y+0Dzr5/gGCQBv1F7NS/nJLE9dlsywOdcNipW0LhP/SCIXJ9oSrhST1OZt1JYeRSsZ0pG8cFDquSKSosGh90eJObBG+TE0kh4tK4sEnKvp2L1plitpR+McZz/tL8bqjAuH1PdEgZkxME36gz/qPSRagMvYIYrk7sdonNvNqlHFeGVFi7Eia8JcF2BcvG/JMNVM83dAjYNWDNwXQjjBDLefZVS9e8lvWoWBbVxjmCu+F4OunuXGMRd4UscjpKuPRtFdS/XbE7p5alF9VNIQqTlPp+PMpQx6wzErlqBY4t 36dVp2NO b6lHyGxwnTCMuD+OLXBzeyT2pyJdxfnEm6B0ED307pKpHR88hEx49cH3gZs/ZeRHc7BgtarUtEv3omQyhUHgA/y/RzBhefoxA4XVEnaA7ShBA3WoGvTPCEkH8X3VzjWTT0RCWX6p31qMqCr6ferxS7lrZFcE4MBZrrZAMok7ZngLx5E6wTqPYUqjJ2atBBfRzYWWwciTKJTce1+9hErJt9I9+R7A9NQepNqNajcByIW7T4yTMn3U+Qwo94etUwYPuCm60fy7nMnDVMahcJyJbQ+TeYuqNbkHjnoM/w+7rouprUi1Y/0tMTSuNWSjXemprQQWnsB55OJfbErEt/MUfXPQwIawkA9Y819DVptneIN7Ydni9Sros+7DSueFEZwGghZrNU3mTDuYozZ/wUv30EYYAyLLNIb89YM1V 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: Samuel Holland Currently, kasan_mem_to_shadow() uses a logical right shift, which turns canonical kernel addresses into non-canonical addresses by clearing the high KASAN_SHADOW_SCALE_SHIFT bits. The value of KASAN_SHADOW_OFFSET is then chosen so that the addition results in a canonical address for the shadow memory. For KASAN_GENERIC, this shift/add combination is ABI with the compiler, because KASAN_SHADOW_OFFSET is used in compiler-generated inline tag checks[1], which must only attempt to dereference canonical addresses. However, for KASAN_SW_TAGS we have some freedom to change the algorithm without breaking the ABI. Because TBI is enabled for kernel addresses, the top bits of shadow memory addresses computed during tag checks are irrelevant, and so likewise are the top bits of KASAN_SHADOW_OFFSET. This is demonstrated by the fact that LLVM uses a logical right shift in the tag check fast path[2] but a sbfx (signed bitfield extract) instruction in the slow path[3] without causing any issues. Using an arithmetic shift in kasan_mem_to_shadow() provides a number of benefits: 1) The memory layout is easier to understand. KASAN_SHADOW_OFFSET becomes a canonical memory address, and the shifted pointer becomes a negative offset, so KASAN_SHADOW_OFFSET == KASAN_SHADOW_END regardless of the shift amount or the size of the virtual address space. 2) KASAN_SHADOW_OFFSET becomes a simpler constant, requiring only one instruction to load instead of two. Since it must be loaded in each function with a tag check, this decreases kernel text size by 0.5%. 3) This shift and the sign extension from kasan_reset_tag() can be combined into a single sbfx instruction. When this same algorithm change is applied to the compiler, it removes an instruction from each inline tag check, further reducing kernel text size by an additional 4.6%. These benefits extend to other architectures as well. On RISC-V, where the baseline ISA does not shifted addition or have an equivalent to the sbfx instruction, loading KASAN_SHADOW_OFFSET is reduced from 3 to 2 instructions, and kasan_mem_to_shadow(kasan_reset_tag(addr)) similarly combines two consecutive right shifts. Due to signed memory-to-shadow mapping kasan_non_canonical_hook() needs changes - specifically the first part that tries to deduce if a faulty address came from kasan_mem_to_shadow(). Previous value of KASAN_SHADOW_OFFSET prevented any overflows when trying to map the entire linear address space to shadow memory so the check in kasan_non_canonical_hook() could consist of only checking whether the address isn't below KASAN_SHADOW_OFFSET. The signed memory-to-shadow conversion means negative addresses will be mapped below KASAN_SHADOW_OFFSET and positive addresses will map above KASAN_SHADOW_OFFSET. When looking at the mapping of the entire address space there will be an overflow when a big enough positive address will be passed to kasan_mem_to_shadow(). Then the question of finding addresses that couldn't come from kasan_mem_to_shadow() can be reduced to figuring out if the address isn't above the highest overflowed value (most positive address possible) AND below the most negative address possible. Link: https://github.com/llvm/llvm-project/blob/llvmorg-20-init/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp#L1316 [1] Link: https://github.com/llvm/llvm-project/blob/llvmorg-20-init/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp#L895 [2] Link: https://github.com/llvm/llvm-project/blob/llvmorg-20-init/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp#L669 [3] Signed-off-by: Samuel Holland Signed-off-by: Maciej Wieczor-Retman --- Changelog v2: (Maciej) - Correct address range that's checked in kasan_non_canonical_hook(). Adjust the comment inside. - Remove part of comment from arch/arm64/include/asm/memory.h. - Append patch message paragraph about the overflow in kasan_non_canonical_hook(). arch/arm64/Kconfig | 10 +++++----- arch/arm64/include/asm/memory.h | 14 +++++++++++++- arch/arm64/mm/kasan_init.c | 7 +++++-- include/linux/kasan.h | 10 ++++++++-- mm/kasan/report.c | 26 ++++++++++++++++++++++---- scripts/gdb/linux/mm.py | 5 +++-- 6 files changed, 56 insertions(+), 16 deletions(-) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index fcdd0ed3eca8..fe7d79b447c3 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -426,11 +426,11 @@ config KASAN_SHADOW_OFFSET default 0xdffffe0000000000 if ARM64_VA_BITS_42 && !KASAN_SW_TAGS default 0xdfffffc000000000 if ARM64_VA_BITS_39 && !KASAN_SW_TAGS default 0xdffffff800000000 if ARM64_VA_BITS_36 && !KASAN_SW_TAGS - default 0xefff800000000000 if (ARM64_VA_BITS_48 || (ARM64_VA_BITS_52 && !ARM64_16K_PAGES)) && KASAN_SW_TAGS - default 0xefffc00000000000 if (ARM64_VA_BITS_47 || ARM64_VA_BITS_52) && ARM64_16K_PAGES && KASAN_SW_TAGS - default 0xeffffe0000000000 if ARM64_VA_BITS_42 && KASAN_SW_TAGS - default 0xefffffc000000000 if ARM64_VA_BITS_39 && KASAN_SW_TAGS - default 0xeffffff800000000 if ARM64_VA_BITS_36 && KASAN_SW_TAGS + default 0xffff800000000000 if (ARM64_VA_BITS_48 || (ARM64_VA_BITS_52 && !ARM64_16K_PAGES)) && KASAN_SW_TAGS + default 0xffffc00000000000 if (ARM64_VA_BITS_47 || ARM64_VA_BITS_52) && ARM64_16K_PAGES && KASAN_SW_TAGS + default 0xfffffe0000000000 if ARM64_VA_BITS_42 && KASAN_SW_TAGS + default 0xffffffc000000000 if ARM64_VA_BITS_39 && KASAN_SW_TAGS + default 0xfffffff800000000 if ARM64_VA_BITS_36 && KASAN_SW_TAGS default 0xffffffffffffffff config UNWIND_TABLES diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index 717829df294e..e71cdf036287 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -89,7 +89,15 @@ * * KASAN_SHADOW_END is defined first as the shadow address that corresponds to * the upper bound of possible virtual kernel memory addresses UL(1) << 64 - * according to the mapping formula. + * according to the mapping formula. For Generic KASAN, the address in the + * mapping formula is treated as unsigned (part of the compiler's ABI), so the + * end of the shadow memory region is at a large positive offset from + * KASAN_SHADOW_OFFSET. For Software Tag-Based KASAN, the address in the + * formula is treated as signed. Since all kernel addresses are negative, they + * map to shadow memory below KASAN_SHADOW_OFFSET, making KASAN_SHADOW_OFFSET + * itself the end of the shadow memory region. (User pointers are positive and + * would map to shadow memory above KASAN_SHADOW_OFFSET, but shadow memory is + * not allocated for them.) * * KASAN_SHADOW_START is defined second based on KASAN_SHADOW_END. The shadow * memory start must map to the lowest possible kernel virtual memory address @@ -100,7 +108,11 @@ */ #if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS) #define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) +#ifdef CONFIG_KASAN_GENERIC #define KASAN_SHADOW_END ((UL(1) << (64 - KASAN_SHADOW_SCALE_SHIFT)) + KASAN_SHADOW_OFFSET) +#else +#define KASAN_SHADOW_END KASAN_SHADOW_OFFSET +#endif #define _KASAN_SHADOW_START(va) (KASAN_SHADOW_END - (UL(1) << ((va) - KASAN_SHADOW_SCALE_SHIFT))) #define KASAN_SHADOW_START _KASAN_SHADOW_START(vabits_actual) #define PAGE_END KASAN_SHADOW_START diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c index b65a29440a0c..6836e571555c 100644 --- a/arch/arm64/mm/kasan_init.c +++ b/arch/arm64/mm/kasan_init.c @@ -198,8 +198,11 @@ static bool __init root_level_aligned(u64 addr) /* The early shadow maps everything to a single page of zeroes */ asmlinkage void __init kasan_early_init(void) { - BUILD_BUG_ON(KASAN_SHADOW_OFFSET != - KASAN_SHADOW_END - (1UL << (64 - KASAN_SHADOW_SCALE_SHIFT))); + if (IS_ENABLED(CONFIG_KASAN_GENERIC)) + BUILD_BUG_ON(KASAN_SHADOW_OFFSET != + KASAN_SHADOW_END - (1UL << (64 - KASAN_SHADOW_SCALE_SHIFT))); + else + BUILD_BUG_ON(KASAN_SHADOW_OFFSET != KASAN_SHADOW_END); BUILD_BUG_ON(!IS_ALIGNED(_KASAN_SHADOW_START(VA_BITS), SHADOW_ALIGN)); BUILD_BUG_ON(!IS_ALIGNED(_KASAN_SHADOW_START(VA_BITS_MIN), SHADOW_ALIGN)); BUILD_BUG_ON(!IS_ALIGNED(KASAN_SHADOW_END, SHADOW_ALIGN)); diff --git a/include/linux/kasan.h b/include/linux/kasan.h index 890011071f2b..b396feca714f 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h @@ -61,8 +61,14 @@ int kasan_populate_early_shadow(const void *shadow_start, #ifndef kasan_mem_to_shadow static inline void *kasan_mem_to_shadow(const void *addr) { - return (void *)((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT) - + KASAN_SHADOW_OFFSET; + void *scaled; + + if (IS_ENABLED(CONFIG_KASAN_GENERIC)) + scaled = (void *)((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT); + else + scaled = (void *)((long)addr >> KASAN_SHADOW_SCALE_SHIFT); + + return KASAN_SHADOW_OFFSET + scaled; } #endif diff --git a/mm/kasan/report.c b/mm/kasan/report.c index 3fe77a360f1c..5766714872d3 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -645,15 +645,33 @@ void kasan_report_async(void) */ void kasan_non_canonical_hook(unsigned long addr) { + unsigned long max_shadow_size = BIT(BITS_PER_LONG - KASAN_SHADOW_SCALE_SHIFT); unsigned long orig_addr; const char *bug_type; /* - * All addresses that came as a result of the memory-to-shadow mapping - * (even for bogus pointers) must be >= KASAN_SHADOW_OFFSET. + * With the default kasan_mem_to_shadow() algorithm, all addresses + * returned by the memory-to-shadow mapping (even for bogus pointers) + * must be within a certain displacement from KASAN_SHADOW_OFFSET. + * + * For Generic KASAN the displacement is unsigned so the mapping from zero + * to the last kernel address needs checking. + * + * For Software Tag-Based KASAN, the displacement is signed, so + * KASAN_SHADOW_OFFSET is the center of the range. Higher positive + * addresses overflow, so the range that can't be part of + * memory-to-shadow mapping is above the biggest positive address + * mapping and below the lowest possible one. */ - if (addr < KASAN_SHADOW_OFFSET) - return; + if (IS_ENABLED(CONFIG_KASAN_GENERIC)) { + if (addr < KASAN_SHADOW_OFFSET || + addr >= KASAN_SHADOW_OFFSET + max_shadow_size) + return; + } else { + if (addr < KASAN_SHADOW_OFFSET - max_shadow_size / 2 && + addr >= KASAN_SHADOW_OFFSET + max_shadow_size / 2) + return; + } orig_addr = (unsigned long)kasan_shadow_to_mem((void *)addr); diff --git a/scripts/gdb/linux/mm.py b/scripts/gdb/linux/mm.py index 7571aebbe650..2e63f3dedd53 100644 --- a/scripts/gdb/linux/mm.py +++ b/scripts/gdb/linux/mm.py @@ -110,12 +110,13 @@ class aarch64_page_ops(): self.KERNEL_END = gdb.parse_and_eval("_end") if constants.LX_CONFIG_KASAN_GENERIC or constants.LX_CONFIG_KASAN_SW_TAGS: + self.KASAN_SHADOW_OFFSET = constants.LX_CONFIG_KASAN_SHADOW_OFFSET if constants.LX_CONFIG_KASAN_GENERIC: self.KASAN_SHADOW_SCALE_SHIFT = 3 + self.KASAN_SHADOW_END = (1 << (64 - self.KASAN_SHADOW_SCALE_SHIFT)) + self.KASAN_SHADOW_OFFSET else: self.KASAN_SHADOW_SCALE_SHIFT = 4 - self.KASAN_SHADOW_OFFSET = constants.LX_CONFIG_KASAN_SHADOW_OFFSET - self.KASAN_SHADOW_END = (1 << (64 - self.KASAN_SHADOW_SCALE_SHIFT)) + self.KASAN_SHADOW_OFFSET + self.KASAN_SHADOW_END = self.KASAN_SHADOW_OFFSET self.PAGE_END = self.KASAN_SHADOW_END - (1 << (self.vabits_actual - self.KASAN_SHADOW_SCALE_SHIFT)) else: self.PAGE_END = self._PAGE_END(self.VA_BITS_MIN) From patchwork Tue Feb 18 08:15:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979237 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 DC099C02198 for ; Tue, 18 Feb 2025 08:16:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 70E492800F0; Tue, 18 Feb 2025 03:16:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6BFC32800EC; Tue, 18 Feb 2025 03:16:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5385D2800F0; Tue, 18 Feb 2025 03:16:53 -0500 (EST) 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 3670A2800EC for ; Tue, 18 Feb 2025 03:16:53 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id DE3241A0960 for ; Tue, 18 Feb 2025 08:16:52 +0000 (UTC) X-FDA: 83132359464.06.68F2A13 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf11.hostedemail.com (Postfix) with ESMTP id A2CC040018 for ; Tue, 18 Feb 2025 08:16:50 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=mX3WhEy9; spf=pass (imf11.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866610; 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:in-reply-to:references:references:dkim-signature; bh=1TTuXLxMopwWeFVdGnLcIPjRaZ96xctO0Nm3rLViPCA=; b=uBsw2HyX6eP0R8gq7F0pB6RQCJ8f9OVZ+gg6PSCdk9gPWDWMMrB4ketBhcT1bPzmzZ2TSm 6LpPW4PSoAfBexV2RgfXj2fBUPITaAjYpctvpKHKmAXhkZp3XtTArGY3veAAVLZixZPtJt orD8nrwAuIKFzfjsGwcudjMZ3HKQgdA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866610; a=rsa-sha256; cv=none; b=AC+oPhqdeYsqSdz/MlZ7XsoQnEQtn5hzWL4QQ6gj66LIWHA+GCjdKdiJF5vcGgAU947lSl Q7/ctUjXB7VAHB1LKG/ru8QqOlKuRaT9F4+5L8s397o2R6WhKBN0fVy29k3jCGJ3jok4Yb 5WnCWjmO7XBSWcvg5WrZ4ZukGPHi+Bc= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=mX3WhEy9; spf=pass (imf11.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866611; x=1771402611; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=o6OuX/IUpTkc++lHSC1ghvLKQzFvuT/g3IidU8BLRI0=; b=mX3WhEy9QJ0lMuEWrjD71IZaP95Ieo8bLnrqXjYOESa4HCZW9urxeSx/ 7jTyV+PSw6G1VO8um/xWxe48Io1WZwi3TxErU/mrG/fLJjlKFCUUC3XWH 3e5mpkcYbseSAwKgs6VProJjuHWKW7oITNjRctuXpar4+TdECDHAbJknq ag7gaHL9nKqlDh3QGcrLnoqaiKjSAP8JO+zyZ1Qv5IRnDK87Y5gZs24XS zNDtbU8GRHR3C0UWxWXd5aZltClSUw1dA/pY0D0KPh1e6QKQPi6bjfnLO nVDW4+niY62rHwbU4OIgCGRB8LYF1ho10iym9+AgEuQ1G1EAWJqnol/dA w==; X-CSE-ConnectionGUID: eOl4l5mlQumtDu6kbnx4eQ== X-CSE-MsgGUID: fdzHDGcbSIaVvOzYB5Rzdg== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150018" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150018" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:16:49 -0800 X-CSE-ConnectionGUID: M5Fwk1/OT62LIgJLo5m/Ew== X-CSE-MsgGUID: 5TZpocIhS3iT+cIhiLsT0g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247387" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:16:28 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 02/14] kasan: sw_tags: Check kasan_flag_enabled at runtime Date: Tue, 18 Feb 2025 09:15:18 +0100 Message-ID: X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: A2CC040018 X-Rspamd-Server: rspam07 X-Stat-Signature: czygxthyg76uc3dpeoawwtb8ndo3ac4t X-HE-Tag: 1739866610-25746 X-HE-Meta: U2FsdGVkX19pXXxVyBEt/AKIZvR4S0+Yw0DOTfftgRNOY3T6NqcJGlZ54BUkbPwXALfb0PtUWXqVpbK0QoE/q3ZYj8mqd5400+wWDPhiyCpHI+RoddY8MNyZ4thszNcd84Uyk5NrrbOjFt1hp7nWHVchudgEU+WQSvM1xNfTM27t65HFacNfLkHG3692/Zr8oCUfltTeK+Oq/bnkOunoQv+ktblPQE/YHanA3Yv2pQ9g0HJhMvx/kR+rUln3O7yTvm71UbZc2PxX7NivEHQtQ3qT5sV28wnHlnQIWtszGB2AXDUgKGPJDYmvXJeKzZSFSgAj6QA5azVTgJYVQ+/lRe/pyV/085TSlpHWSsWRq6+bPwS49oZVi5Ek3+uJ0EGe1bEwhIwhdrxd3p0msIZpX1I/u7sKOAFvOjSUAsdbaqwzpJZuXgha69BhSHsCCX6dwrulnbD/h2PWXDgU2QbOem34GvFECmCdjek+aFjnN+r/M2gX6aI7Ukq3XJRa4VcY0H+kPNiJQdw+btYxOsZT24QvwZq9xGg47yQhNKU08phQng2hspauqm+KI8erZEed0aNfcK7jon5VYhIK6WnX3gbFmW59wyI/VRBh9R1w/DifaV26LBDDg+5bTOCG2deHJwB3afjwtd0GxXE1ZBEGbysiCb6MKQ3koJ4Hy6TB+HZM86J6G7K1CF42rbCWq1AQ3OYKdrBJD/QINPyhOrGlbPYpxpuUShGGNHRZxpjDX9qD5zjJjayb0jcdTbjHj72B2a58qXYGGw5vY5D8GWdE4fXmdwTVX9pI4gqdr1StwGtF9DCTnToZa9b9NOmBePrHF/XMlk1HOzh8eOpFaNvxzlX7ZbWN/YQ7sSTy1KiMxVtSvZEUQmSFnxVjTAwxaXea7X9sxRsxqd3BFlul5LkrlHamGGoMCyboVqV4C1syn23tB/RljPvZ5SYYwRt1kwLCkGE49W9/HzDdNbeNVS2 UlPAE5Sl mUDpxOpu+TZoGQfZlwdACTlIQZv6fklRtXxA5QcC2fDIqO0voUL17nFA1kHFjSNPXDSleMKjoFf1jGHirjPDB9XJcXa8Q+x7fY/QIwUGV7+rTY34rBGxpe1nMncUYE3oiCn8pF1VTcIv0uRqrImcWsUViqDk8bPLFuRvh8SMb261o7o2Mw2svs7nOASLI03n7AgEtl3xG5XT5CT1RDsroulYHXtmkuZC+8juBKJDV39VfldHHHIS55eAJfi5rxZ4GTHhGDq59QzFXRvuEaaiOzDFzc5O/2MucB6Qnd8olG1jUDVjc+x4GUQyceAroKHHTwriccF9OTWXHjVNLqmSmDxB1YVXEQk1l5NO5kkWz+lGYL7ZSmGadHsC2N0lkzCuFQVQsEW3N+tG5BXQXV/qYxbt1i7Fsoru4f6q/eHeoCbh/GVAxyy5KVTy3C22kdkXnwvae 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: Samuel Holland On RISC-V, the ISA extension required to dereference tagged pointers is optional, and the interface to enable pointer masking requires firmware support. Therefore, we must detect at runtime if sw_tags is usable on a given machine. Reuse the logic from hw_tags to dynamically enable KASAN. This commit makes no functional change to the KASAN_HW_TAGS code path. Reviewed-by: Andrey Konovalov Signed-off-by: Samuel Holland Signed-off-by: Maciej Wieczor-Retman --- include/linux/kasan-enabled.h | 15 +++++---------- mm/kasan/hw_tags.c | 10 ---------- mm/kasan/tags.c | 10 ++++++++++ 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h index 6f612d69ea0c..648bda9495b7 100644 --- a/include/linux/kasan-enabled.h +++ b/include/linux/kasan-enabled.h @@ -4,7 +4,7 @@ #include -#ifdef CONFIG_KASAN_HW_TAGS +#if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS) DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); @@ -13,23 +13,18 @@ static __always_inline bool kasan_enabled(void) return static_branch_likely(&kasan_flag_enabled); } -static inline bool kasan_hw_tags_enabled(void) -{ - return kasan_enabled(); -} - -#else /* CONFIG_KASAN_HW_TAGS */ +#else /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ static inline bool kasan_enabled(void) { return IS_ENABLED(CONFIG_KASAN); } +#endif /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ + static inline bool kasan_hw_tags_enabled(void) { - return false; + return IS_ENABLED(CONFIG_KASAN_HW_TAGS) && kasan_enabled(); } -#endif /* CONFIG_KASAN_HW_TAGS */ - #endif /* LINUX_KASAN_ENABLED_H */ diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c index 9a6927394b54..7f82af13b6a6 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. @@ -259,9 +252,6 @@ void __init kasan_init_hw_tags(void) kasan_init_tags(); - /* KASAN is now initialized, enable it. */ - static_branch_enable(&kasan_flag_enabled); - pr_info("KernelAddressSanitizer initialized (hw-tags, mode=%s, vmalloc=%s, stacktrace=%s)\n", kasan_mode_info(), str_on_off(kasan_vmalloc_enabled()), diff --git a/mm/kasan/tags.c b/mm/kasan/tags.c index d65d48b85f90..c111d98961ed 100644 --- a/mm/kasan/tags.c +++ b/mm/kasan/tags.c @@ -32,6 +32,13 @@ enum kasan_arg_stacktrace { static enum kasan_arg_stacktrace kasan_arg_stacktrace __initdata; +/* + * Whether KASAN is enabled at all. + * The value remains false until KASAN is initialized by kasan_init_tags(). + */ +DEFINE_STATIC_KEY_FALSE(kasan_flag_enabled); +EXPORT_SYMBOL(kasan_flag_enabled); + /* Whether to collect alloc/free stack traces. */ DEFINE_STATIC_KEY_TRUE(kasan_flag_stacktrace); @@ -92,6 +99,9 @@ void __init kasan_init_tags(void) if (WARN_ON(!stack_ring.entries)) static_branch_disable(&kasan_flag_stacktrace); } + + /* KASAN is now initialized, enable it. */ + static_branch_enable(&kasan_flag_enabled); } static void save_stack_info(struct kmem_cache *cache, void *object, From patchwork Tue Feb 18 08:15:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979238 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 C7B5AC021A9 for ; Tue, 18 Feb 2025 08:17:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5AF7D2800F1; Tue, 18 Feb 2025 03:17:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 55F4F2800EC; Tue, 18 Feb 2025 03:17:13 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D9652800F1; Tue, 18 Feb 2025 03:17:13 -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 202DA2800EC for ; Tue, 18 Feb 2025 03:17:13 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id C85FC1C80A2 for ; Tue, 18 Feb 2025 08:17:12 +0000 (UTC) X-FDA: 83132360304.29.A6F2C89 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf14.hostedemail.com (Postfix) with ESMTP id 9EAC5100004 for ; Tue, 18 Feb 2025 08:17:10 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=jxwnY7hL; spf=pass (imf14.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866630; 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:in-reply-to:references:references:dkim-signature; bh=iCSpbFIW52Uw1IMNiH8VOklKBmF7UNSkwh0phBRHF78=; b=y+TWGjv/kv8RJ4eROkCwayBsfi+mf6Pm+5WtqUbQrtQU+Q5aWIWkGFw1LjLyFPISo2GC4j L7nLhLTsQ0CQfalOJSCasje6ABUkwmq5J5sIhqB4MNf2X7yGUo9UVbFfSBzSpWVhxYMc9b miAirq/DJPlyCXSwsUIOQg+OdlA11zE= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=jxwnY7hL; spf=pass (imf14.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866630; a=rsa-sha256; cv=none; b=o3G8I6dt51X2ns7yL1NxPxf85uXIIcDH5Q94Bk+t0MGS8kpg43rdR9ubifCaRy7hU+kebT A8C3+8mkIS2IMbIcExicCBKIxWB/JQFHqHuc+7gOwCrl0t2niLr8SfqxPpHwyGLrYxBN5I nVbUpUyYXHJbg989IRnMONeRBH2heQA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866631; x=1771402631; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bXO9RjmvEI/gGPfc1eFRDuxO1uk/Wq+sbi65zILen0w=; b=jxwnY7hLXuHxZPdupZWqAMiRDDrtq7PdETdOABTGS1zO3GywvTfeIVos F4wZpo4+hFxfmROOJsSP9E6Py0VivkO5VPyuclWbcYb/2vJvnpeTR00gZ NL4yq1qsYQcQMtyo7PPjSkMnbVg+yjXA4YqEflI4p0AwY/J8PIMKr79dy sqk5hPfsAMJxj6cmPz9NUN8co09z35vxyBGTpwaVz6eoI3pX0coW3h7mK ghpriLdgB58O2J6N90/33Rb9IgIyGbD2kak+gHfmd9+0kYTpGPLnaZFci Iz8VI55bM7SnVrxN+hlXWqNS3vy8K9ic4NMmKxKoIDMTXNH0bzf137ycF w==; X-CSE-ConnectionGUID: 90p9WNODTlqtkpa5tqzqSQ== X-CSE-MsgGUID: RvBQlWGZTOCgXwNj47jUug== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150093" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150093" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:17:09 -0800 X-CSE-ConnectionGUID: +HOO78zjQVWglPzSMQGDaA== X-CSE-MsgGUID: iC+fl3UpTo2a4V5pAf6vOA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247460" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:16:49 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 03/14] kasan: sw_tags: Support outline stack tag generation Date: Tue, 18 Feb 2025 09:15:19 +0100 Message-ID: <20f64170c0b59cb5185cfe02c4bc833073a2ebe6.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 9EAC5100004 X-Stat-Signature: 8ebemgqcfobxqttfoa7jou5rf48whr3a X-HE-Tag: 1739866630-646500 X-HE-Meta: U2FsdGVkX1/+Clj9Viz5tax29fna9htRiPtDStnhX5cL6xXTDjdQsxhQopiH3I/dE067v6ZOUDgiHPg+qAZw9WSj2aQDRSbFd5jzNqXGCMhtXr4WS8p7ASb0TUWls/ww/UjH0JggY4A+7B9h0JJWGZBdJKmtCddoNeMwX2uDXMniiO/x1SLHDiFESdYFBh0EJ4dtj6As5DZ95P/99ac9hZaJ5eckykX0mmKQKKGKUA7xSrjVWGMS10wK8lRMHr2BAuk0tOeRu4Rxrdc5PK1PtUiUKctTh3w5QH7rLSQp0U1HqQw0ZFYTB/RjLukIREhR/NcSNUhgX/CWVT5yZGBJI1RiTNebCQeClYrn/VIFYVehW1x0eRCl5AXROVuZxktjY5+e98Ki8W1XEKvzJajc6dNRVCVraxe+4k/a8bOfen1KSgxW50qTlFBWs0ms3iEnEIH0NQCcDywVB7KbZM+RjPUiw0mu51hHMijnEQncV9rozDq45goTIJOLsfsqCmYJD8mVMTJhR//nEXSrDS4yWrWdCP0LvFJMLGxiRzur8WR7dzaTp9uPX406Cw6QeMeRNJi9Zl1AxGBL74z23RwkcglaOh7LvFdLoKg3x8sl99QvssfRqv7Xe8dSEuzIB5fmyleZrXHqDui1q2hzWmZIkjdtgdbyip06ymRGHd0eLAx6h4gFDEwAIlJYxol+9+Zkqm1Q1okZcDXjzGqdpnvMdLQNMCVTlfoUqX1ZV1ZvJVag7M3XsgpswAT46A2quGKhBW1hBfU/yWbBQKDMo+AYYbi9NbKq9IOYbwGwHeJteFNqbFVoyJIG5GozY9ITD64eYK/QQHX8BgXAU2PU43RVZFAE3tVXpZaYnuIlnJ6tyv577eq9rJLklcnrm7g3X3ozdwleamTDqE86oMgjuUKCP7w6AVy8p/2vL/vGQ65p9HA3ZbfOhgnzY14tdXi1MaQsftUacZvtQLxfLXSKziz 7ssz8E/L jcDBBjrFgPGLVdjticwz0jaAlCNkShKalllLzhYUNPb1K5TRgg0fpo9P2782Hgrmunw+UVIPI8CQ/Ft3HDyD9j9rGmzT2yMo6angVK/Pws2EIHmMeYQeyyRfsCufCeheF5KEP2MePec1pVb0PZPp1dvnKqDnkgQjoamugdu6a24ybbYNzC+LnjezFIHhG5Nkiup/ZHdqNO9gYC5mRkc4iGTwAAOZ8VD2rPrOVUEpYa8VZ9KoNQD2nHRl0DEhkTg9iHaQS4LNj+M1uc8ui875QdkAHaPUij4VylEEHxrsWuSYdmeMDvrGZfoyPw+ylfdK2w2nTerv+v9JUa9lXxuaxviU84wkcsHk8f+td5xvmPu6wgYYuBpCcYmAoPA== 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: Samuel Holland This allows stack tagging to be disabled at runtime by tagging all stack objects with the match-all tag. This is necessary on RISC-V, where a kernel with KASAN_SW_TAGS enabled is expected to boot on hardware without pointer masking support. Signed-off-by: Samuel Holland Reviewed-by: Andrey Konovalov Signed-off-by: Maciej Wieczor-Retman --- mm/kasan/kasan.h | 2 ++ mm/kasan/sw_tags.c | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h index 129178be5e64..2fb26f74dff9 100644 --- a/mm/kasan/kasan.h +++ b/mm/kasan/kasan.h @@ -636,6 +636,8 @@ void *__asan_memset(void *addr, int c, ssize_t len); void *__asan_memmove(void *dest, const void *src, ssize_t len); void *__asan_memcpy(void *dest, const void *src, ssize_t len); +u8 __hwasan_generate_tag(void); + void __hwasan_load1_noabort(void *); void __hwasan_store1_noabort(void *); void __hwasan_load2_noabort(void *); diff --git a/mm/kasan/sw_tags.c b/mm/kasan/sw_tags.c index b9382b5b6a37..94465a8a3640 100644 --- a/mm/kasan/sw_tags.c +++ b/mm/kasan/sw_tags.c @@ -71,6 +71,15 @@ u8 kasan_random_tag(void) return (u8)(state % (KASAN_TAG_MAX + 1)); } +u8 __hwasan_generate_tag(void) +{ + if (!kasan_enabled()) + return KASAN_TAG_KERNEL; + + return kasan_random_tag(); +} +EXPORT_SYMBOL(__hwasan_generate_tag); + bool kasan_check_range(const void *addr, size_t size, bool write, unsigned long ret_ip) { From patchwork Tue Feb 18 08:15:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979239 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 E422FC02198 for ; Tue, 18 Feb 2025 08:17:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 821A32800F2; Tue, 18 Feb 2025 03:17:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7D1082800EC; Tue, 18 Feb 2025 03:17:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 672462800F2; Tue, 18 Feb 2025 03:17:31 -0500 (EST) 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 472A42800EC for ; Tue, 18 Feb 2025 03:17:31 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id F13C6A0DAD for ; Tue, 18 Feb 2025 08:17:30 +0000 (UTC) X-FDA: 83132361060.20.F89AABF Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf29.hostedemail.com (Postfix) with ESMTP id D97FE120007 for ; Tue, 18 Feb 2025 08:17:28 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=BFI7yhzP; spf=pass (imf29.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866649; 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:in-reply-to:references:references:dkim-signature; bh=/cX1p2lxroC4wffAIvexwPR0Fxx/XW76IQ4D/P2WkdY=; b=zuhcmGT0GER3wF2E6OQRlbp3nh4FVBPsGPgBJOW/+60QtRJ9az7lyuAfzWRdRI6ImQn+xd 4thEZbadAMhRbPJj0vpNMGwcjQQZbuqwb6LcfwYbN9RmYORFycmJZ3x9fpPl76F6V3/gAP V9e1V1r5GpBA3NQqV3VudGVLEcHpe9k= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=BFI7yhzP; spf=pass (imf29.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866649; a=rsa-sha256; cv=none; b=VD07qbClVKoAWFH7Fw2/R+CDkwWHw7nA4yqhqaHHFMwnjSAn53jaU6YuCLptNtqaW/BUA9 pD71cQsz6kTw6yCzTvt1Ep2B+EbDlF5irxm/IxSO4a728onKpihGkQ4ic22pI3kHVd0NLw PLV25ekwjCsZJqEF4wHiSeKiKd0lWhI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866649; x=1771402649; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vZnoVBHv0l9iKflwNJuydsONrEphO2Y6vfEcHPCjENE=; b=BFI7yhzP+26mLZb+zDJKHuNC6Kyow0cFnZND3DJLmLM9qXkWe5pYtLXz kNNkpuGJY7d8q/IU0d235xbjUt5Jxz9HLIv+LpJ3J98zR1MFpIxTlqQGK UC4ArAz0mC4HfbzKuFfI50llv3umB5WfZA9nWDc3Txc5pw7TzLO7DjMui QBNeeY7sr3OmyH0X/Ckh8wskdP3QThx5z9CsMpHbxKnKkAhjMEkgIvrka coky6wOOI1+YuwLVVd/+n0GiRckVg793Cc5MhR6KZW8Q9mLn/XVsAP/B0 svhwlAsoz3rPptnLoG/04ImAm+WDTUxdhmzouEQjr3LSZ83/q3soTcLPL A==; X-CSE-ConnectionGUID: 0PdV9+I2STCn2OHYoZKYVA== X-CSE-MsgGUID: 426DcbGlQhCTR4Mnk+Ui2A== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150135" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150135" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:17:28 -0800 X-CSE-ConnectionGUID: xKQi23p7SyujmVCTf7U/Zg== X-CSE-MsgGUID: 9P48bDiJSRi9kqQCnYaSFA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247544" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:17:10 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 04/14] kasan: sw_tags: Support tag widths less than 8 bits Date: Tue, 18 Feb 2025 09:15:20 +0100 Message-ID: <09962dd580a56e308d98b7bd5829dc57928bcc40.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: zhn4stnwqdp3gtkm6hxwkkraar3e6z8i X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: D97FE120007 X-HE-Tag: 1739866648-766058 X-HE-Meta: U2FsdGVkX1/5nTD3Q5ZXVX+gkByoVTUzOIZh82DyS4W4W0eeb/m0hTuBb9ofVznD3KGQgKUvWEw6XfP/LZMKX5gXlhaYVrjHYLRuEk9oZ2/PfN011fXTPsKkLgPaHgDixw1GdN/BmkEeGJSBAZXOhtoMjg50aUBnLKlt2kCOHTWJ4FYBRlTEGv/s7vNRfI0/2Q4asH1kLlCtLR1vy6XARr7ouEkwQXn6K0iKX6mtuPJSavfY716evdZeHs6t5e0Xz4XAP7i1q4+oqN7FLD3Rzvx+eJXEBy8MX9N4wmp3FRR7WVuXEbfMPY3q6H7y7ytDqYBa+HKzzCcwCCP4uAj3KX/nq8xft/KGb4+Mb2Dn9YLzZ3uKx2SHFct9+LboEyLFuSfNUbNkHeu2svj9BtH2Hyvro5NlnwhSLXHzc6ai23UeMLuqWPN2PgumRs0MZheV0WR4Fy/iAfrOZliK/x+niO7aqzHR26VrjUcADk9NQTJ2ezpz9o/V9T/gFQKJ2nFEGpfkPWoBqf21m5vt/0LO78MKc+8dZ1ZQ8ImbHGb+pHgwKvGykAjCC9g1nKZ4g4zHfwT/pqpx9NH8eyvhSi0Uimn0Fh2cooF4X+aX44BBieFGf85imvnj8AEQcmFmpN0IcGUVMc0Ka7fNw0UmYoWfMrMDsN+AT5CPp02jwfq5w+gCzdF5Gr3oZpz0iKiRLnwjcM5422qfJrTfTBiRXx9E8X8Bgn54p7my5pl+38oc3DS4WPs8rEmGwdm6o+IWIs4JPjTOl7jlKTRUBmneg6Q5Vu9MV3/CGTT3FWCaKxVaOrpfe8uLSxnwtBgGrfODdhbc4H/+vPJRx5l9tGPa6skhCNGpRjawb0ZdQZ1efuGhEzHmUlJMtXsIXxiyb7vBUkTPC+NAbo3lKRuZJDGw0Jmfq0gxzD55hKI/CHAaL+Lh8GuymhFn4/xSKbftKXbP8QD4HunS8HX292ju0vEybjF u4/+xP0y EHwvVKORtJhneh0CmHoiwyqcEmWZpHsy3vPV0IFGiofoF0ZFE91JReKYDU7/QI3aCQ8pOsuKeSs1XLbT5wp6aQw5U7msodsK6N5Wk7AtFM5n7y/uMXtiBoGBcEg82AjGc6WqVOFRtEnWtASzMsLavIzmDkAvZmXSNHZOwkxJ+6+MqNOGpmDRwhhsRWBv4EQ1XUfxX+s1XnIcFAMpqL8XNelFrqYlvQuX1Wm+WmwB6fk9A0+KPdhzAkZ2hN4PjrPKYM2LPfVtBSCQhIybyq8Q5Ao7xuguMG3AKzZCL6FFzjy8pnIug5iUdDION0Qn9XuOyw0J6pDV0Scw1rTkkrn1nluCYCwX9IGdYpeKWOxISLXcw0KCq9JArNno03A== 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: Samuel Holland Allow architectures to override KASAN_TAG_KERNEL in asm/kasan.h. This is needed on RISC-V, which supports 57-bit virtual addresses and 7-bit pointer tags. For consistency, move the arm64 MTE definition of KASAN_TAG_MIN to asm/kasan.h, since it is also architecture-dependent; RISC-V's equivalent extension is expected to support 7-bit hardware memory tags. Reviewed-by: Andrey Konovalov Signed-off-by: Samuel Holland Signed-off-by: Maciej Wieczor-Retman --- arch/arm64/include/asm/kasan.h | 6 ++++-- arch/arm64/include/asm/uaccess.h | 1 + include/linux/kasan-tags.h | 13 ++++++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/arch/arm64/include/asm/kasan.h b/arch/arm64/include/asm/kasan.h index e1b57c13f8a4..4ab419df8b93 100644 --- a/arch/arm64/include/asm/kasan.h +++ b/arch/arm64/include/asm/kasan.h @@ -6,8 +6,10 @@ #include #include -#include -#include + +#ifdef CONFIG_KASAN_HW_TAGS +#define KASAN_TAG_MIN 0xF0 /* minimum value for random tags */ +#endif #define arch_kasan_set_tag(addr, tag) __tag_set(addr, tag) #define arch_kasan_reset_tag(addr) __tag_reset(addr) diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h index 5b91803201ef..f890dadc7b4e 100644 --- a/arch/arm64/include/asm/uaccess.h +++ b/arch/arm64/include/asm/uaccess.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include diff --git a/include/linux/kasan-tags.h b/include/linux/kasan-tags.h index 4f85f562512c..e07c896f95d3 100644 --- a/include/linux/kasan-tags.h +++ b/include/linux/kasan-tags.h @@ -2,13 +2,16 @@ #ifndef _LINUX_KASAN_TAGS_H #define _LINUX_KASAN_TAGS_H +#include + +#ifndef KASAN_TAG_KERNEL #define KASAN_TAG_KERNEL 0xFF /* native kernel pointers tag */ -#define KASAN_TAG_INVALID 0xFE /* inaccessible memory tag */ -#define KASAN_TAG_MAX 0xFD /* maximum value for random tags */ +#endif + +#define KASAN_TAG_INVALID (KASAN_TAG_KERNEL - 1) /* inaccessible memory tag */ +#define KASAN_TAG_MAX (KASAN_TAG_KERNEL - 2) /* maximum value for random tags */ -#ifdef CONFIG_KASAN_HW_TAGS -#define KASAN_TAG_MIN 0xF0 /* minimum value for random tags */ -#else +#ifndef KASAN_TAG_MIN #define KASAN_TAG_MIN 0x00 /* minimum value for random tags */ #endif From patchwork Tue Feb 18 08:15:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979240 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 33AE8C02198 for ; Tue, 18 Feb 2025 08:17:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BF0D32800F3; Tue, 18 Feb 2025 03:17:52 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BA19C2800EC; Tue, 18 Feb 2025 03:17:52 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A1B2B2800F3; Tue, 18 Feb 2025 03:17:52 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 82BA82800EC for ; Tue, 18 Feb 2025 03:17:52 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 0C34E80960 for ; Tue, 18 Feb 2025 08:17:52 +0000 (UTC) X-FDA: 83132361984.03.A695470 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf25.hostedemail.com (Postfix) with ESMTP id D50A8A0005 for ; Tue, 18 Feb 2025 08:17:49 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=WiUjdQKc; spf=pass (imf25.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866670; 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:in-reply-to:references:references:dkim-signature; bh=yp9z/72mv2QLx/Ef/ffuZlQr1HZnsXUELIZaKdEAc8I=; b=Wp0PQ8VvjWA9dp7kHcoxMhnCzWI9hXdWiTf6x7Wg4xaLKhNtqnBQc4BsdIVKSW3Cxf2zPv oH71SUedqlw9rBlHpf/ZzKXKMmW3+rdxdFZP7C3Ky/ahZSZ35dE6Zursj2AHABMSNwa2DP hwVom6TCDlkuwts6RMTxU6KCjK0C05k= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=WiUjdQKc; spf=pass (imf25.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866670; a=rsa-sha256; cv=none; b=WX4hksKJSX7z5ml4X1iue8ymXRspbD2h3ZvnKJJ01BzVyBQtQiye8B5lHggnuzznNzNW84 EmrFcIpcxSFfMlXPl1OuGk7R3KdEewy5pwkbtZcbfpseAJi1hWWXrtVqC0PV0RooNGCeFr 9SRxlaurmvO968lWqWbUvI/0xufVxew= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866670; x=1771402670; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=As7/89K9C1tmOKqNLRLkHDkRJGF2t3muumzfgCc3j9E=; b=WiUjdQKcRHpZn+1YOykBWw8u2dV2UG1pMBzoODyHGvp6HmArR0gR01yr El8a6LEpS9c88TrCUXm57/1/LgEU5nTQXYgE9PXDHKDypRa/LLq19gdXc AIJefx+5HRUcX6aqhJYYjfgKtYFHTr7pwtU0zeUlg7N36VKfWkGSedTZP O/qobMgRg6w0n/eNDnfuMtOXD01oC4a2UPG3mWSDs68P1NCxfj+Emf+zR iXzRbD2L/74rjmNAc7Muj4dF9Lbq3+G7r/24szaSMAoKz6X3dURfvwAnv uZunhZpIKAKM7VqSYEnnLT3RPU4r/kE8g5r/ck42fItfTqtFJdMSitnGf w==; X-CSE-ConnectionGUID: /J9Mm+agRXyVfIEhj1pBbQ== X-CSE-MsgGUID: 3tdfcSauTVKADZGbpQUQDw== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150188" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150188" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:17:48 -0800 X-CSE-ConnectionGUID: PLYcFuuUTMCNDg97bomtmQ== X-CSE-MsgGUID: IjcorwQURzO8cEIwpFujCA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247610" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:17:28 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 05/14] kasan: arm64: x86: Make special tags arch specific Date: Tue, 18 Feb 2025 09:15:21 +0100 Message-ID: X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: D50A8A0005 X-Stat-Signature: zowyy7gyy4gihbu3n1irrd8drxherwd7 X-Rspam-User: X-HE-Tag: 1739866669-251287 X-HE-Meta: U2FsdGVkX1/8IvVDuGzHcdTdO/X18JkyUE3QDyIQTu+IIiCqxZhX5Xd88fef/ZX+tO0310rce6d7BswyF92ddCb2M0BYDywEl9Zcpt2CPYNK4sBuNA8EE0cRDghLa9fhTtkeQ3opU6YKWFZgGpCwr87gDkdveYCXun5MTbLgn+7xKc/sOXdNhNonao9GBEhWIpjnwZoB+uLTWt1RnTdLLlM/n8cHjrWNWL5+RyLr9n59v6H/Zakh0xQ8Olll0sVAgTEAQIthC/peaziZa3QuULoh0xRwL1LMQ2EiUSmFMfysvvgjAe/Ww7p2L3LhvgGv8Vr3LSPyziJnSTDmOcqi86YfUSD1yNSRBG58csrRZZTVkbhyiu9GeaQM2KT2FJebM/3O9xRhsOTuA7zIc5D5vE2aWJYGPtd5lQGMcQktqpdIrYqwrbUiROqCTyrhyxRzDlWv82fv70FUatiOA0PmM73jub0jq/53CGE3pxyjOMm/RBl5CWYyCloRe9ndFr9CWuiJc/MUHtNB5khlhL6bAr1N0XeHFg5zJcgQzbDcHjZAztC9KFRidaNfOrtfZmEvu3HKsAas08VNzaf9crBJnepBJpef9yTCj0iOHFbgC8BTmQWbSxQx3VZXHzyWSL9EmGHKWs24zYwMcNSbkW2IUUjh86MA5oJc+UBkBhrRn9gy5+MauNTZzZjz3A5IH0L4Bib9G3qDepb5afGUvMPdSrRyaf6K3ieI0BtM6dgSFaSniiOMOqftqw+Pl8e16RUMCjqepbzkGEBoLUeBSJLyJB8RyBuvFbpAQ32ONehip+UcJaArx/5WfykluYicAfczquuJtcW3LU3Rp52xzmnwIRe9I/jPzbePYpHrL4YKzOammUqVfU/mR82XZ/ADgdl0W1hOTkwbp7Up/6BTcY4R8YAhtd0/tA2gnvAdnW/zxJiC8mX4iGJtGa/bhG6cA7DNaxYhMtNQrwzhAMoBD1J 9HE702/q 7iGcH5neK7v125Qt4pI9TUNia3tck2tnHRKq6BO9P7nd4LeXfnE1lU0mRHm7254DwfOYg9mZml2P+1dmPn7lOzv1kw/afq1+WEcZI7ka8uiV6sWDtf0Yi3u+kUhPUht7MHQLh2Ct5EaSdEmLb4fTWV+RF+soNdzh1Z8tL5r/aQnLrI/PRqyclR6GUYIqYZWHMmiI9Xm/e3JZBafsFYRf+Z5P78SMH8Vdy2LbD6U1ocr9joxxnWMBWpNHSUAjnZTg2kQ2GtwU9Dqv8OnYNGCM45n+1pMLZnsVc2AC+NjuBTceNkaxaAl4PiQ4C+ySVkcfk/lSyb1wipmQdu8A= 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: KASAN's tag-based mode defines multiple special tag values. They're reserved for: - Native kernel value. On arm64 it's 0xFF and it causes an early return in the tag checking function. - Invalid value. 0xFE marks an area as freed / unallocated. It's also the value that is used to initialize regions of shadow memory. - Max value. 0xFD is the highest value that can be randomly generated for a new tag. Metadata macro is also defined: - Tag width equal to 8. Tag-based mode on x86 is going to use 4 bit wide tags so all the above values need to be changed accordingly. Make native kernel tag arch specific for x86 and arm64. Replace hardcoded kernel tag value and tag width with macros in KASAN's non-arch specific code. Signed-off-by: Maciej Wieczor-Retman --- Changelog v2: - Remove risc-v from the patch. MAINTAINERS | 2 +- arch/arm64/include/asm/kasan-tags.h | 9 +++++++++ arch/x86/include/asm/kasan-tags.h | 9 +++++++++ include/linux/kasan-tags.h | 8 +++++++- include/linux/kasan.h | 4 +++- include/linux/mm.h | 6 +++--- include/linux/page-flags-layout.h | 7 +------ 7 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 arch/arm64/include/asm/kasan-tags.h create mode 100644 arch/x86/include/asm/kasan-tags.h diff --git a/MAINTAINERS b/MAINTAINERS index 896a307fa065..37971952c24b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -12478,7 +12478,7 @@ L: kasan-dev@googlegroups.com S: Maintained B: https://bugzilla.kernel.org/buglist.cgi?component=Sanitizers&product=Memory%20Management F: Documentation/dev-tools/kasan.rst -F: arch/*/include/asm/*kasan.h +F: arch/*/include/asm/*kasan*.h F: arch/*/mm/kasan_init* F: include/linux/kasan*.h F: lib/Kconfig.kasan diff --git a/arch/arm64/include/asm/kasan-tags.h b/arch/arm64/include/asm/kasan-tags.h new file mode 100644 index 000000000000..9e835da95f6b --- /dev/null +++ b/arch/arm64/include/asm/kasan-tags.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_KASAN_TAGS_H +#define __ASM_KASAN_TAGS_H + +#define KASAN_TAG_KERNEL 0xFF /* native kernel pointers tag */ + +#define KASAN_TAG_WIDTH 8 + +#endif /* ASM_KASAN_TAGS_H */ diff --git a/arch/x86/include/asm/kasan-tags.h b/arch/x86/include/asm/kasan-tags.h new file mode 100644 index 000000000000..68ba385bc75c --- /dev/null +++ b/arch/x86/include/asm/kasan-tags.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_KASAN_TAGS_H +#define __ASM_KASAN_TAGS_H + +#define KASAN_TAG_KERNEL 0xF /* native kernel pointers tag */ + +#define KASAN_TAG_WIDTH 4 + +#endif /* ASM_KASAN_TAGS_H */ diff --git a/include/linux/kasan-tags.h b/include/linux/kasan-tags.h index e07c896f95d3..ad5c11950233 100644 --- a/include/linux/kasan-tags.h +++ b/include/linux/kasan-tags.h @@ -2,7 +2,13 @@ #ifndef _LINUX_KASAN_TAGS_H #define _LINUX_KASAN_TAGS_H -#include +#if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS) +#include +#endif + +#ifndef KASAN_TAG_WIDTH +#define KASAN_TAG_WIDTH 0 +#endif #ifndef KASAN_TAG_KERNEL #define KASAN_TAG_KERNEL 0xFF /* native kernel pointers tag */ diff --git a/include/linux/kasan.h b/include/linux/kasan.h index b396feca714f..54481f8c30c5 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h @@ -40,7 +40,9 @@ typedef unsigned int __bitwise kasan_vmalloc_flags_t; #ifdef CONFIG_KASAN_SW_TAGS /* This matches KASAN_TAG_INVALID. */ -#define KASAN_SHADOW_INIT 0xFE +#ifndef KASAN_SHADOW_INIT +#define KASAN_SHADOW_INIT KASAN_TAG_INVALID +#endif #else #define KASAN_SHADOW_INIT 0 #endif diff --git a/include/linux/mm.h b/include/linux/mm.h index 7b1068ddcbb7..0b1d21864294 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1824,7 +1824,7 @@ static inline u8 page_kasan_tag(const struct page *page) if (kasan_enabled()) { tag = (page->flags >> KASAN_TAG_PGSHIFT) & KASAN_TAG_MASK; - tag ^= 0xff; + tag ^= KASAN_TAG_KERNEL; } return tag; @@ -1837,7 +1837,7 @@ static inline void page_kasan_tag_set(struct page *page, u8 tag) if (!kasan_enabled()) return; - tag ^= 0xff; + tag ^= KASAN_TAG_KERNEL; old_flags = READ_ONCE(page->flags); do { flags = old_flags; @@ -1856,7 +1856,7 @@ static inline void page_kasan_tag_reset(struct page *page) static inline u8 page_kasan_tag(const struct page *page) { - return 0xff; + return KASAN_TAG_KERNEL; } static inline void page_kasan_tag_set(struct page *page, u8 tag) { } diff --git a/include/linux/page-flags-layout.h b/include/linux/page-flags-layout.h index 4f5c9e979bb9..b2cc4cb870e0 100644 --- a/include/linux/page-flags-layout.h +++ b/include/linux/page-flags-layout.h @@ -3,6 +3,7 @@ #define PAGE_FLAGS_LAYOUT_H #include +#include #include /* @@ -72,12 +73,6 @@ #define NODE_NOT_IN_PAGE_FLAGS 1 #endif -#if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS) -#define KASAN_TAG_WIDTH 8 -#else -#define KASAN_TAG_WIDTH 0 -#endif - #ifdef CONFIG_NUMA_BALANCING #define LAST__PID_SHIFT 8 #define LAST__PID_MASK ((1 << LAST__PID_SHIFT)-1) From patchwork Tue Feb 18 08:15:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979241 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 93330C021A9 for ; Tue, 18 Feb 2025 08:18:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 27BD62800F4; Tue, 18 Feb 2025 03:18:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 22C1B2800EC; Tue, 18 Feb 2025 03:18:13 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0A68F2800F4; Tue, 18 Feb 2025 03:18:13 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id DFE172800EC for ; Tue, 18 Feb 2025 03:18:12 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 9312FA0DC5 for ; Tue, 18 Feb 2025 08:18:12 +0000 (UTC) X-FDA: 83132362824.10.059F841 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf04.hostedemail.com (Postfix) with ESMTP id 7BC2940004 for ; Tue, 18 Feb 2025 08:18:10 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=QaUy80Uj; spf=pass (imf04.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866690; 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:in-reply-to:references:references:dkim-signature; bh=hd/rmwwNUxEWJaueMUiOYmy433JWOqfiDFpi9akupUI=; b=n0YsKj2MJsqTzeJyegaTqrCT7ZRQTu/yadDp5Vw82taTnxASHERYu+Gw6lzqVVSteaPerW e7YvBU8ehkHVC6R4x7HEDfZ1goNpRenmgf3oEPXK8Py4nGytNx253xMyOHzOZr3qEmVygb CPr0AWrrMgJoImT6vCEroKy8Da0qhso= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866690; a=rsa-sha256; cv=none; b=mmehnxSU86ZgtMDMmfbn7zowAPBJNKwlpTCDFnfzeZq58ktzrIAFS4lmMdwIMNOvJGryhT b4wROiIOn0JQD3NOdcGRCwWf9fk1+Zz7a/Vd1fWT6XrTrmS8HhDBXAWy02UAr5BsnV39qZ +/C1CuWmvRQ5k5PIAVEh9TeZ+sEQRKk= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=QaUy80Uj; spf=pass (imf04.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866691; x=1771402691; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1nix+N5DUro8RwKo5+pglZtqohhVbR1ohGEV2E0y1dM=; b=QaUy80Uj2oZhJbylIBQrqHlBGOMeTnWbpDPWy22LyOlzg0XCEKyfglnC pfSoL3+3ib8mwGK6YhwQ/Q/R00urHYk7k4DT3XdnviMGfZnMuGebn9HD3 9eFV9WaZWuJlAUwoCRoZGqyy8xd5AM89OHPjF7npLgn7wwpKV/Drvewtf NI7JXcM7jcndxSF20SSvzf53CmgyD4ESNBrk0ROfACDNDkB+FzINEkKsb XUbUII6os2EUMl+1bHz/TdhmTI4jjn7knDGPSGL6jU9W8PxC17z5cOHI3 BPpcerzT1fCauloqeSBqffLOxMs/5vXEbjsp59qYOl/IVUJ2a2qv+u4iQ Q==; X-CSE-ConnectionGUID: 9ot+h3uhQcGRPMYNP99ovA== X-CSE-MsgGUID: Umy0GbPNSuu7cKCj46HJdg== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150221" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150221" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:18:09 -0800 X-CSE-ConnectionGUID: CUmazHzUQ3u+x4JDYFIJPA== X-CSE-MsgGUID: v51nsDBYQWmIf8M/s1m01w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247639" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:17:49 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 06/14] x86: Add arch specific kasan functions Date: Tue, 18 Feb 2025 09:15:22 +0100 Message-ID: <7099fb189737db12ab5ace5794080458d7a14638.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 7BC2940004 X-Rspamd-Server: rspam07 X-Stat-Signature: iams16bzftbazwuryw7h6x1wt45o66d5 X-HE-Tag: 1739866690-569374 X-HE-Meta: U2FsdGVkX19xdK/Xsp2Oa1cvRnvhBZRUgp/7Nr4FSa8dwMSvzAcsv6AKkonVmA6VyBg8QYAGdMFZYBndZd57Q3C6ykO3qP+WgBTnqoBPU8FsV05BZwFIOND5yYVyToPmx3PUhe8/dkM9FVnLqwRjOZbT+CtT4ntbckG7YTkfIBxOR+jRSLxh6qlXdqVEfyiGrIxwxeH/UhEiV4BlwuNO23oXqyudfFEHbNI5tdDBxlRvlu6GrP+Tj1lAJl4nH9Hov1VPEbhGKVhspZ/5D68gpjlFBbjTmadRxc6KiXiPRIVzd8j/+CA6HPQeZdQpc7cuPKtLA47fJ986SvCXI/Bl5SW6kJGOSQYVPJgdfAozsMcmSorkxhtzT5OYl0nGOk8WLeE9Wl5HHiZ2RJw9I4Sati+q13juIKkiJIezpaZ6kBCG1ZfvvPryigABuM7elD0rbx23NGs3ClMKuIqxuFxtqEx7DOVm2B+LdGBO1o+8MhY92KZSQyUWrMcKbkhYexKr+mpApUkcVDytme8LTBnPaPHthxY7U4gftyPwZCtWpVxX2FPsHh3Ae34+IwfsmiGw6tLYCph2RKiE+oVHHlSnCwJaLDsNHKKvFIdSsf6e3rEmR4vTAwuVrG9GR+M2pQkw9MThzcUDUkFsj1YjW//bAqtF8qN9ZHLnICaaVyU1fHu7y5LfKONiL5I4NvCHneU1Hb2GJhLR3qJ8apJCs21p1nqalQaiNbC3WjXcPrwKCreyxx7JzHCX/BMiBcuEjn+uigwRkULYsbPg/u5PZ4HXIX1T56MiQjnhI8KrqfPqQ/b/kapyDnnvBk13Ofuc13AtP6XWUbY61Aoh096KWNd/Kw6/a0TdmVohC9IBPytlx+JDpfpPhZG1Md9iyD259NP3fmGi6DMde0kbDSoY+YXCOkHtWoFI7WR8ZkKr+LxnZJcdWfP+cmvbaPtv74f9u+ITeb5XNY2H45HEsFitcfK 7S/O1K8g 6XpPquiC7OJ3RvQIfQeDWD6NM5aLyJQTJOux1UsBsjh4q0KGWlV5ynzDlBAskOARFGxRDc1XY8I1YTD1lSGxbeJZUyxPFDFKhbgHrtuKDxvTy3GMxDmaMBkTHWuIH8coW4CAucFxeum2P4Ba8y2JOTCbXxkL1Ptj5zddRJJr4m3z7dqQllufeMwbATrGMmMWBlNQ6XJ0OP69KMlnMQxdsl3fUtWfnOpaZsj3YFLx0Z3iF2Z0PoALz8gytJwNlZzp1kzvOWBDSdcxbfzr6h8kKeYLUKkHvxy9FSMM8 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: KASAN's software tag-based mode needs multiple macros/functions to handle tag and pointer interactions - mainly to set and retrieve tags from the top bits of a pointer. Mimic functions currently used by arm64 but change the tag's position to bits [60:57] in the pointer. Signed-off-by: Maciej Wieczor-Retman --- arch/x86/include/asm/kasan.h | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/kasan.h b/arch/x86/include/asm/kasan.h index de75306b932e..8829337a75fa 100644 --- a/arch/x86/include/asm/kasan.h +++ b/arch/x86/include/asm/kasan.h @@ -3,6 +3,8 @@ #define _ASM_X86_KASAN_H #include +#include +#include #define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) #define KASAN_SHADOW_SCALE_SHIFT 3 @@ -24,8 +26,33 @@ KASAN_SHADOW_SCALE_SHIFT))) #ifndef __ASSEMBLY__ +#include +#include +#include + +#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) + +#ifdef CONFIG_KASAN_SW_TAGS + +#define __tag_shifted(tag) FIELD_PREP(GENMASK_ULL(60, 57), tag) +#define __tag_reset(addr) (sign_extend64((u64)(addr), 56)) +#define __tag_get(addr) ((u8)FIELD_GET(GENMASK_ULL(60, 57), (u64)addr)) +#else +#define __tag_shifted(tag) 0UL +#define __tag_reset(addr) (addr) +#define __tag_get(addr) 0 +#endif /* CONFIG_KASAN_SW_TAGS */ #ifdef CONFIG_KASAN + +static inline const void *__tag_set(const void *addr, u8 tag) +{ + u64 __addr = (u64)addr & ~__tag_shifted(KASAN_TAG_KERNEL); + return (const void *)(__addr | __tag_shifted(tag)); +} + void __init kasan_early_init(void); void __init kasan_init(void); void __init kasan_populate_shadow_for_vaddr(void *va, size_t size, int nid); @@ -34,8 +61,9 @@ static inline void kasan_early_init(void) { } static inline void kasan_init(void) { } static inline void kasan_populate_shadow_for_vaddr(void *va, size_t size, int nid) { } -#endif -#endif +#endif /* CONFIG_KASAN */ + +#endif /* __ASSEMBLY__ */ #endif From patchwork Tue Feb 18 08:15:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979242 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 5F30FC021A9 for ; Tue, 18 Feb 2025 08:18:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E8B752800F5; Tue, 18 Feb 2025 03:18:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E3A802800EC; Tue, 18 Feb 2025 03:18:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CB3F32800F5; Tue, 18 Feb 2025 03:18:31 -0500 (EST) 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 AE7CE2800EC for ; Tue, 18 Feb 2025 03:18:31 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 35F2BC09C8 for ; Tue, 18 Feb 2025 08:18:31 +0000 (UTC) X-FDA: 83132363622.11.1AD3A10 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf11.hostedemail.com (Postfix) with ESMTP id 088024000F for ; Tue, 18 Feb 2025 08:18:28 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ElNiv4SK; spf=pass (imf11.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866709; 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:in-reply-to:references:references:dkim-signature; bh=IkiSs8Mx0ftzr0bNH0MOKgRQ603f42VR6P8kP2Y60Y8=; b=oeCFYm2rwbAwrSX5NwNCKOiU7vRO7YxBAl/UFMqNJFtseWKmBxcPPofR4fMOnwfELO78Lv F+3bChIWJGQLBHhgozoyVXQFss/W+mP/M9Stcr/02miQqgxQ6S7S3tGJNipozOTvfbFAxr 7zbgqkNpABNzmHFm/Rg/1E61a7fsFrQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866709; a=rsa-sha256; cv=none; b=RFoFDUDV+nEUdjs+X374VucymI4boUnPiTe99Hs3OPhmxj2aV+A5GIZvZlJb92BIjdEQwg CWKET/At4n3rRlLJHoxKVou1kwE1QHz25THiQrF8ls7CtKCTHYfjbUuoZBeg4GJ3+CzXNf ZQwAszoBjreUX7+NUR7fmf29XOuhE0A= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ElNiv4SK; spf=pass (imf11.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866709; x=1771402709; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Nv/ltyViEdDWF68nXs2iXcAPsfBSVXeu+MHh0fs1GJ4=; b=ElNiv4SKhLU7p9aOdJ5jvo6r6qIMUP8VVjytEDztWt7GXveEwTpvLGzm 6p5RdpzkRFQQQnht5GYW4FB7VTw6uII+ykEOBUjSlQom971+Ow06bJ/H7 jvbSVXh81NW7FCiKGJZ4SWGztpRXa+WX4mVxrkRMk4VLgJJ36WIyqoxJP Slus1z7xaPjqxtr3QcBLLbvOfDcXud2ppUuUChJh6B2KqeuX2EkXj6UPW 8yyt4eFeqslvdUMTG09YDb56Zm+3wQtgeLfXGMyt5kII2in214UQRAcrC 3+aOc5HcQ2cUPTTC8ePBwDsHpccrL/6KNFvLlIUsnu2PiAd2/m/o5CwTp A==; X-CSE-ConnectionGUID: 3YqMccG2SxC9qSZd0gQ5BQ== X-CSE-MsgGUID: Rm8il2txQx+2AVLI1Mg/Sg== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150277" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150277" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:18:27 -0800 X-CSE-ConnectionGUID: 5z9vRN7wSMWUvwtxJjGh6g== X-CSE-MsgGUID: Z/kyhOw/QdSF0c+xdlivEw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247683" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:18:10 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 07/14] x86: Reset tag for virtual to physical address conversions Date: Tue, 18 Feb 2025 09:15:23 +0100 Message-ID: X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 088024000F X-Rspamd-Server: rspam07 X-Stat-Signature: hib8s3zoc44ommrz8ys6brcwp7g68s81 X-HE-Tag: 1739866708-297551 X-HE-Meta: U2FsdGVkX1+o20Fxa6TVOXHixKHKQf4BeblfGHbFE+G3TUCNIUnhqEyQzzEVGOyfcrKTGvJ0gCTSlW0vwa+bRXmpiKQK6bjsri8Ef8oGp4MWWDahWnFZW1AoMAPgRC113EmWI86cafuDcok/ZsFw5GsSrzgM+yTz2SOYizwJfXtwYZ9GXcJeGAMJJp23Vz4LP7p4lwMkRZ7W1/0nFhjrzRlkU+8s8c2dM5FFmCafg6f5V3tHvamULX6iLbaYoRRwgQ7CmGngIm7YMNh0k0mOJszx2LYeOF344GAZZaMpoBD38ibSVynMzTL0kr2fejf6mouCOQyRQPT6fgBH4O3vHyUF6AunfbCQ7INkvGLCm2DG+s4A1XdiboecBPh/8lGgsAapscgf0lRrI4+c8lRNIIP0eh2Xj1L6/jtR8ko1/MkX3yB8E+OoszpXXwx8f4ekL7y6RGvyEM+94AeCw4XmCAk7zpuMVKyGlknw18XKgQzEiZaHZmi7vd01hhDyFnkizzTzUu9v43a41nU5SGHX3U/dJsCdbRsL2NMg19wOp8t6AcHHTN23FWfr8NIUiBFjf6pUw9zOrM24NchfR4ULLQvj23yrmI+PZwsyqV/f6KvAgbBoZH2QYzA5vyinmUXYVZUGxqz7eMsE8FP1BlBe2qWDXVPQzkzFAUH62WsQW4pU+HNeEcWrvoNLhSUv7SA4MOk2eNdN4+6L42KMlh5uyrDy/ApkClwiq3keVX8kuvddCMpfpF+LE2loxb3mzvaeP9CXHNox0yYnmPb4qbSpb3ar5qG8ol4s7y3vPZsQrEoeo2nWK5OPKq49gMo2AxfQs/lfr7OHR9C0JzftSCjZD+XTgeb4+1VRJ5IYTlKubkte88NeFrLRChuH8Ok/Q0iQHipFMoKgOOFZT7T7uhQ6Mog1bCp4UGuaCb4l5rnrYLNsFhV5EM9j72MGuLIgk4ZKpJwGIBe8x83dydug3DH QyiPNCrb yIWKN31tq7Bwp1Y8Za5+Aw7KcGdC/mMD5jptwVP4omcQZ4WbdYQtenYYKeJfbWwhdGZKeOIjHYQ/j7ztXLkjnz2V17GVYc6Aq3rGvVNv+G2gT4Lp73i7+UsHIdBwVFjBVbNpA+2lFJzLNnEp0urCVRWT3a+G7Lx5eJCF73/+kemt/HkwT3+19uAMAket4yMnjaLce8Wvq4BPvfxVT2OIXJwcaMnckmFfPj1Pia6WmKbF/EyNypyInFw0AJZiFRMeRy0t8vLJ74jxyydg6bOjYRmTxLo5UvbgltQzlAUDEDg7t12pzUCOrntOFPI9XVg6sTLtjzW9eKEMDdxOYCN6KkD9H9FSwOf+EwLM5G17HuZPw+wt6IgF66MD5qL3nYP1d94ljDQoPlGFgy8k75ImmPx1MK4by1VHhsos+nVyLXmrmt2Nd5dKLaLkryjpMUP1gvP3yndevMLycL2QaDcT14IQLQA== 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: Any place where pointer arithmetic is used to convert a virtual address into a physical one can raise errors if the virtual address is tagged. Reset the pointer's tag by sign extending the tag bits in macros that do pointer arithmetic in address conversions. There will be no change in compiled code with KASAN disabled since the compiler will optimize the __tag_reset() out. Signed-off-by: Maciej Wieczor-Retman --- arch/x86/include/asm/page.h | 17 +++++++++++++---- arch/x86/include/asm/page_64.h | 2 +- arch/x86/mm/physaddr.c | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h index c9fe207916f4..fdafeb06c195 100644 --- a/arch/x86/include/asm/page.h +++ b/arch/x86/include/asm/page.h @@ -7,6 +7,7 @@ #ifdef __KERNEL__ #include +#include #ifdef CONFIG_X86_64 #include @@ -41,7 +42,7 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr, #define __pa(x) __phys_addr((unsigned long)(x)) #endif -#define __pa_nodebug(x) __phys_addr_nodebug((unsigned long)(x)) +#define __pa_nodebug(x) __phys_addr_nodebug((unsigned long)(__tag_reset(x))) /* __pa_symbol should be used for C visible symbols. This seems to be the official gcc blessed way to do such arithmetic. */ /* @@ -65,9 +66,17 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr, * virt_to_page(kaddr) returns a valid pointer if and only if * virt_addr_valid(kaddr) returns true. */ -#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) + +#ifdef CONFIG_KASAN_SW_TAGS +#define page_to_virt(x) ({ \ + __typeof__(x) __page = x; \ + void *__addr = __va(page_to_pfn((__typeof__(x))__tag_reset(__page)) << PAGE_SHIFT); \ + (void *)__tag_set((const void *)__addr, page_kasan_tag(__page)); \ +}) +#endif +#define virt_to_page(kaddr) pfn_to_page(__pa((void *)__tag_reset(kaddr)) >> PAGE_SHIFT) extern bool __virt_addr_valid(unsigned long kaddr); -#define virt_addr_valid(kaddr) __virt_addr_valid((unsigned long) (kaddr)) +#define virt_addr_valid(kaddr) __virt_addr_valid((unsigned long)(__tag_reset(kaddr))) static __always_inline void *pfn_to_kaddr(unsigned long pfn) { @@ -81,7 +90,7 @@ static __always_inline u64 __canonical_address(u64 vaddr, u8 vaddr_bits) static __always_inline u64 __is_canonical_address(u64 vaddr, u8 vaddr_bits) { - return __canonical_address(vaddr, vaddr_bits) == vaddr; + return __canonical_address(vaddr, vaddr_bits) == __tag_reset(vaddr); } #endif /* __ASSEMBLY__ */ diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h index d63576608ce7..54990ea82f74 100644 --- a/arch/x86/include/asm/page_64.h +++ b/arch/x86/include/asm/page_64.h @@ -33,7 +33,7 @@ static __always_inline unsigned long __phys_addr_nodebug(unsigned long x) extern unsigned long __phys_addr(unsigned long); extern unsigned long __phys_addr_symbol(unsigned long); #else -#define __phys_addr(x) __phys_addr_nodebug(x) +#define __phys_addr(x) __phys_addr_nodebug(__tag_reset(x)) #define __phys_addr_symbol(x) \ ((unsigned long)(x) - __START_KERNEL_map + phys_base) #endif diff --git a/arch/x86/mm/physaddr.c b/arch/x86/mm/physaddr.c index fc3f3d3e2ef2..7f2b11308245 100644 --- a/arch/x86/mm/physaddr.c +++ b/arch/x86/mm/physaddr.c @@ -14,6 +14,7 @@ #ifdef CONFIG_DEBUG_VIRTUAL unsigned long __phys_addr(unsigned long x) { + x = __tag_reset(x); unsigned long y = x - __START_KERNEL_map; /* use the carry flag to determine if x was < __START_KERNEL_map */ From patchwork Tue Feb 18 08:15:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979243 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 5227FC021A9 for ; Tue, 18 Feb 2025 08:18:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E3C582800F6; Tue, 18 Feb 2025 03:18:51 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DEC1A2800EC; Tue, 18 Feb 2025 03:18:51 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CB4002800F6; Tue, 18 Feb 2025 03:18:51 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id AC4CF2800EC for ; Tue, 18 Feb 2025 03:18:51 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 6FEE3160979 for ; Tue, 18 Feb 2025 08:18:51 +0000 (UTC) X-FDA: 83132364462.27.D015156 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf23.hostedemail.com (Postfix) with ESMTP id 521C2140005 for ; Tue, 18 Feb 2025 08:18:49 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=asurgMUu; spf=pass (imf23.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866729; a=rsa-sha256; cv=none; b=GrAF/cpX8q5V+XBTJkh4Mgjhb2MJC4+zKxbvpM27tr80XS/2IHzsu4F4thhoGzOiJvFYrz xHZuQ4Lxid5ajjLNYKigG0IHIfEmxbbvbo04/5U9YbRz00udyTuxV+O16QaKGiyfsEGLt7 Dej34BZeCKHxrOim7pWX7rVhcmrJFMs= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=asurgMUu; spf=pass (imf23.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866729; 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:in-reply-to:references:references:dkim-signature; bh=Dq6MnYM3YBaeNWtWD0oUNO4zWYWOlBEkNt7N4mL1ols=; b=NcP8snX4KlOUBJj8+INU3I/0JihawLQRPyPcGIGIYqXvlbbFgRCBkzRg/eKtyc7zguz830 Fzols2RQjFTt8CyPvV9GI8w8aTiBrjx3g6T9i3bOThwLDczS0x9s9G+iW8YhW5Jp1/C7Q8 DOvTBWUl1pcBzYtpZAcuzdnC0lvjAq4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866730; x=1771402730; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=A3dtCBfE4C8c/Xw6lULikavzFkti/llvChkLMpO3s2Q=; b=asurgMUuCih7isQgDwfOBI87SC6N8RogrItBKcOG6J216ods76nnAToA yq+jcjfXfpj+nC/h0xsZ7oXTXjtsSGixnYGNuOwBUG+MQSVMx7OWT3i05 lGgCnf1hCICmwIuVNHS/xpyibDBxndIpHv6Sb+xnWGkRIQO5DPe5VO5cj lyKLo06MZ67S3MOHXAFTGJMRW/QRkjWLBYT6GOs3hLWMymjnGWOGdj62b X+YZY8KHHlc5+rzUab3bL3oFm10FiRGQLaKCwlP1+1bl1hpNclhc6nrlF wTo+vfhn0CvsBAc2Fzyk58YgBdA8akch5t15GNSmR/hCdYFkAErGinZ5O g==; X-CSE-ConnectionGUID: 1XD7aXY7TlSyXIur7c55KA== X-CSE-MsgGUID: b4+rnlpOTrScI/Vx+f09aw== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150323" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150323" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:18:48 -0800 X-CSE-ConnectionGUID: wF3cj88LRZaiNzHrGFykHQ== X-CSE-MsgGUID: O+VYLHV1SG6BS6/LzC21Dw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247761" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:18:28 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 08/14] x86: Physical address comparisons in fill_p*d/pte Date: Tue, 18 Feb 2025 09:15:24 +0100 Message-ID: X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: 521C2140005 X-Stat-Signature: x1aadip8mxr3cx55pfj548b5ery97puy X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1739866729-107457 X-HE-Meta: U2FsdGVkX1+NKtEB52bkBE1p08JKisHMklS8rEtwJiEXjibRnHT2MzBqskVNac6HY/4JaWVmmuiHEYWEfIgRmjWDkWmduQHXlizAI6dwVOlAcyjCoU0210ffz8eCOW6gWP2h/Uo1LBmWCoO7rp0nmERk2xHmpbVLL6gSbKvprEzeb8aU/3jvzQKBr5Uw3qJopx8bd7gMadYQo6M57IOlyp+yaz6sfiXN1q120nN+EGtCXhlduAbE/WoXVm6c62VfDoMs8m5+5l0J9TJ5zu76fflUwkRkTE6AYM52I+LvkR7cMonK+i64uwTfH7ADDF8WolQ8DHzwRWlqA6dLhgS55SA4gdLfQTxXrMotPXSADK1UCqTonOvuMb3a2OpFX8DlN+FjW42RHiWf86gIVb+KNMfKt+oHCC1IdlTAMFH/3ePzf7k21pjkSQtOnI7zb0PZa8xfzj7iL63YgN7XogYx8xo484B1lJzOnPRGhNf5+JHNd1MX74o+wKiwfWOdd25ZAi0FhC83x2GI4gmaPlPezbYXowXJ1DSit/XBfYo8hiKpHSQE3X7nFrRgoX8q1WzPvost0l4I22uTLc2gypyhFHNAM9MDrR2cDryxPsrpsUykjzV/fNg0JX1BP38hMg4WEMDXqzfXHGJ/LjDZo/fX+6cgNBsZM4bqJWSdJUEaVjrwz1NLdGDM/5J3Ygng1EamsTYfFIaLXytD3uWuUKYZrLFt1DzOPFAtIJLiy8lkzdhIw4r15y/7WKw1pCIq3fG9HfpsmXNjkhhOE/5gfQMa/PUAUxVLrtiYL47IjSZ3V6suhHl2ZLHTZFIvavfxmRWA28nEuo+yO1vFyNg+lmD9FsNvpB8bHvMKQzc7RdyHzWqHcYaot6Q8V9r+wDx6hAgjku1R86p6ZTo9Z02QlzoS0/S9uxqCcpN6PeubCE1E+l/duSplQfj6GxpCyWGL4fMJGJcdxltRmuVcHR/IkQH QkdAsbOI AdvS6uulezP4zK5NT4QRoprFMQCQ2JAX4JrUxOhSbnjSLEQ2aDUQR57IQLHhhaHkZi2+j92+VZNy4v4axfUKds0C7R15aQDi5X7pIo5H6e8ZjX1V+56KP+iboMIPcgi9rTdX4sd6VPmnzxEUdo4moVqhn/ts7WgmAtBpqYGJapgjCKSN2UZkfn3JDeQf4DHPH+/FAwCMG2f16Rkq7vt2r9WXBnbeW4BAh3hQT39LLejzW9qd0aTUYzD8UWaiihaC6m9kET0I/y90VYnvhnJyuBRY9loVxNlGQdxx/zHJiMdUDqro= 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: Calculating page offset returns a pointer without a tag. When comparing the calculated offset to a tagged page pointer an error is raised because they are not equal. Change pointer comparisons to physical address comparisons as to avoid issues with tagged pointers that pointer arithmetic would create. Open code pte_offset_kernel(), pmd_offset(), pud_offset() and p4d_offset(). Because one parameter is always zero and the rest of the function insides are enclosed inside __va(), removing that layer lowers the complexity of final assembly. Signed-off-by: Maciej Wieczor-Retman --- Changelog v2: - Open code *_offset() to avoid it's internal __va(). arch/x86/mm/init_64.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 01ea7c6df303..e555895dbb68 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -251,7 +251,10 @@ static p4d_t *fill_p4d(pgd_t *pgd, unsigned long vaddr) if (pgd_none(*pgd)) { p4d_t *p4d = (p4d_t *)spp_getpage(); pgd_populate(&init_mm, pgd, p4d); - if (p4d != p4d_offset(pgd, 0)) + + if (__pa(p4d) != (pgtable_l5_enabled() ? + __pa(pgd) : + (unsigned long)pgd_val(*pgd) & PTE_PFN_MASK)) printk(KERN_ERR "PAGETABLE BUG #00! %p <-> %p\n", p4d, p4d_offset(pgd, 0)); } @@ -263,7 +266,7 @@ static pud_t *fill_pud(p4d_t *p4d, unsigned long vaddr) if (p4d_none(*p4d)) { pud_t *pud = (pud_t *)spp_getpage(); p4d_populate(&init_mm, p4d, pud); - if (pud != pud_offset(p4d, 0)) + if (__pa(pud) != (p4d_val(*p4d) & p4d_pfn_mask(*p4d))) printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n", pud, pud_offset(p4d, 0)); } @@ -275,7 +278,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr) if (pud_none(*pud)) { pmd_t *pmd = (pmd_t *) spp_getpage(); pud_populate(&init_mm, pud, pmd); - if (pmd != pmd_offset(pud, 0)) + if (__pa(pmd) != (pud_val(*pud) & pud_pfn_mask(*pud))) printk(KERN_ERR "PAGETABLE BUG #02! %p <-> %p\n", pmd, pmd_offset(pud, 0)); } @@ -287,7 +290,7 @@ static pte_t *fill_pte(pmd_t *pmd, unsigned long vaddr) if (pmd_none(*pmd)) { pte_t *pte = (pte_t *) spp_getpage(); pmd_populate_kernel(&init_mm, pmd, pte); - if (pte != pte_offset_kernel(pmd, 0)) + if (__pa(pte) != (pmd_val(*pmd) & pmd_pfn_mask(*pmd))) printk(KERN_ERR "PAGETABLE BUG #03!\n"); } return pte_offset_kernel(pmd, vaddr); From patchwork Tue Feb 18 08:15:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979244 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 6AFBBC021A9 for ; Tue, 18 Feb 2025 08:19:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E3D2A2800F7; Tue, 18 Feb 2025 03:19:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DEC0D2800EC; Tue, 18 Feb 2025 03:19:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C8CE22800F7; Tue, 18 Feb 2025 03:19:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id AE73F2800EC for ; Tue, 18 Feb 2025 03:19:12 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 73E52C098F for ; Tue, 18 Feb 2025 08:19:12 +0000 (UTC) X-FDA: 83132365344.08.A1836C6 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf13.hostedemail.com (Postfix) with ESMTP id 42D8520003 for ; Tue, 18 Feb 2025 08:19:10 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=bAUkdsNN; spf=pass (imf13.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866750; a=rsa-sha256; cv=none; b=mTKwN37UilenrMgJM6qdiOq4j6S5TJRUO6FdmVZxJt5TVFthUZbgRl8wKKgD/HtUf22TcW kxAemMkLx31e9jKjWDV2p/C2UO+i16b3pEjD78A/6JtAxNnyJCOkurdJBzIc+NHkkcW8X1 yi7lLCTIqFOVK2JJk+UJlGO2kfZrmUo= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=bAUkdsNN; spf=pass (imf13.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866750; 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:in-reply-to:references:references:dkim-signature; bh=o0QxH8z6cj5lUaoAwjX8vI7JCJobGz53CoJ6O2LJ4cM=; b=z+HwSA+zye2ekpEVsR35ifpItyYJsL+1bIKZmcPIuWhSdK13LcpJ7gOkv5PQuv79gk+Szf dQihxBSn4CqN7S4mhxtGcAx5eAFgyC2O5Vmh5lbzLDEqORFe9SmCTE53aa581wYSOZyWx6 ZB/hpKj9FhatGaJrLvta3944RF7WyB0= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866750; x=1771402750; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=PewXt3mq2ZzovNzL7I8Fp3xpOP5/pryHgDbcA5gr/7A=; b=bAUkdsNNBoYV/AJiC138ouqOCG4NsOIvKOVhdKS47z9eg+uKQAdbpwbk 2Krs/dQrI0FVX17Xelix9HzWbM08Qqc/m9L1087/AYdtlEHqbhv8UCn+j jBelJjaDBBwRW/tlfaEG8C0Wn6sP/ffbsSSvgP8/bJn7pGiALk7+oUi1O 8+x6AvkRgLjmWZ5nhTw+tRaOKZIb/+W39EfBt1Z8bKOXK0vKcxiODXncA HOCRNXQ9xxY+NpmiSufMfLtNrJ1VJmCTRzE+7ypMk4M3De2l6JjN6f/JW C/zF4DfghiE7D5XXcwvi5sMpM1NKx93Nfe4c9ZZ6LO8SKDYznFkcueSuX w==; X-CSE-ConnectionGUID: cESzIUMuQqeV1VkDreLnMw== X-CSE-MsgGUID: nXtvlZo+TouD/HED4hRQ0g== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150382" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150382" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:19:09 -0800 X-CSE-ConnectionGUID: TjE0RLKdQ9KhXqTyx5cbfw== X-CSE-MsgGUID: sZVzDBj6QnqZ2EAIVQa3TA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247808" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:18:48 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 09/14] mm: Pcpu chunk address tag reset Date: Tue, 18 Feb 2025 09:15:25 +0100 Message-ID: <383482f87ad4f68690021e0cc75df8143b6babe2.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Stat-Signature: ubtb9wo8tds5iwtff5qa86tpfhn5hbp4 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 42D8520003 X-Rspam-User: X-HE-Tag: 1739866750-599077 X-HE-Meta: U2FsdGVkX1/FyNOFO1s8cffYoaiUTlSsOV8vrSftZ83hU8O2HOIJhqjcO/mR0+c4UJxOuxq5Q1PIuGUfqfxJVA8bbBXhuYhsS3DCb0STHBL4nzMh295YoD8Z9C5FxXrKshC+7SYWMZde1CksARxfF0rRYLRe5KCGfpkAXaHuNfGpFGEfXV30V/jYZIwV2jzIwD5oQIl828kGnz7CR1n9ZJEuvrfhH64xDrh8Bv1a8EsQVCIs3OA2iJEGg8Ovj+f4bLfEJWbJmgkwSKDV0lapib6SsGMg29QDxRYmOIe71jWvgEzIA3gsWj5dwv62KQpzvF0wos2xT2eUFWRUMb0eBNa9otLcFtzihmqHN0fKUAEA0xRSjOxIOjvBVMZsct0Kn5ck7PezJPfCi+a7CBuepVYBWy30NEnD2wVctJd+hxdfdfsV+5vaj7BJ6jVLtQ0RQ6DHuCLIXtgSdfSvKgN3NRLCVRsZ3FxbeeBzsT/J6FipOulpeI1p4Oo3TkGxMhkfQ7NugGpREUhYD6wOctnXUSk3n2q90qtRqlxtbByW0GnCqoeACyL51RLPVUu8QNOtTa4Gq0uNt86uclM0Am/LrBFZrM0M15aBMO6vt0JtRiHx7lzI1prA0Kb3ubjkYbbBFkM1cxZvXjFVufdDtP/R41o8vHc8l8yvXIUkHQ3oXhEgbbd8BIr/GVbC+E4elyKK3cYL9Qrn/bRliSZgK3v3cRGqoYacRQYamPs6A48/8QplH2wvXmqBVxweFFa+juCvWfUSQbykYIwu57MXj5TBmCVHUBo2VtM9N4ni6kkOarN5oMkJUk06jvF23osZdexFXCVaPjGfyCt6YlEwmvIwaZwb7hMV30kagdsHrk6YV0NSl8cJ8qUehS3eJ3ITn8hmz1iHNoz17/XIAd3LnxYqwoAbIHk01mlpwqg3WaaDopMSTQdrXYBLjBBlm7oClQCIP8f1FIASN9Fd/r0gl1Z z08dD6zI Pyo9XRoLa97AiWHTMpdQjaxc8zJJWd24suOwJu+23kYiP8OmejD1K6LAkcSKPOShcLf06oRFo70u22Hu6JiVebl2shf+BLylAKBqZhJanGzMmB/v7B2/C6vpji01VLuCIJIUqTh5aUnBtNqKJgj2yrOXUyXaz7lcdiohVI/+7ZI6QVqeQ1Nd+tgIdPEMxlbNJEPAwU45BK0fY6xH7ERX6ogsFBl0ZNvIuyKqwPNzvyDK1r6+/jJIGACyWIw== 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: The problem presented here is related to NUMA systems and tag-based KASAN mode. Getting to it can be explained in the following points: 1. A new chunk is created with pcpu_create_chunk() and vm_structs are allocated. On systems with one NUMA node only one is allocated, but with more NUMA nodes at least a second one will be allocated too. 2. chunk->base_addr is assigned the modified value of vms[0]->addr and thus inherits the tag of this allocated structure. 3. In pcpu_alloc() for each possible cpu pcpu_chunk_addr() is executed which calculates per cpu pointers that correspond to the vms structure addresses. The calculations are based on adding an offset from a table to chunk->base_addr. Here the problem presents itself since for addresses based on vms[1] and up, the tag will be different than the ones based on vms[0] (base_addr). The tag mismatch happens and an error is reported. Reset the base_addr tag, since it will disable tag checks for pointers derived arithmetically from base_addr that would inherit its tag. Signed-off-by: Maciej Wieczor-Retman --- mm/percpu-vm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/percpu-vm.c b/mm/percpu-vm.c index cd69caf6aa8d..e13750d804f7 100644 --- a/mm/percpu-vm.c +++ b/mm/percpu-vm.c @@ -347,7 +347,7 @@ static struct pcpu_chunk *pcpu_create_chunk(gfp_t gfp) } chunk->data = vms; - chunk->base_addr = vms[0]->addr - pcpu_group_offsets[0]; + chunk->base_addr = kasan_reset_tag(vms[0]->addr) - pcpu_group_offsets[0]; pcpu_stats_chunk_alloc(); trace_percpu_create_chunk(chunk->base_addr); From patchwork Tue Feb 18 08:15:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979245 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 E96D8C02198 for ; Tue, 18 Feb 2025 08:19:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5B39B2800F8; Tue, 18 Feb 2025 03:19:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5616B2800EC; Tue, 18 Feb 2025 03:19:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3DAC12800F8; Tue, 18 Feb 2025 03:19:31 -0500 (EST) 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 1D21A2800EC for ; Tue, 18 Feb 2025 03:19:31 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id C6B0DC09A1 for ; Tue, 18 Feb 2025 08:19:30 +0000 (UTC) X-FDA: 83132366100.27.79538B4 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf18.hostedemail.com (Postfix) with ESMTP id A57681C0004 for ; Tue, 18 Feb 2025 08:19:28 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=D+6NaU6P; spf=pass (imf18.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866768; a=rsa-sha256; cv=none; b=XpgKMhs7zoNV9tbmYn/etKpeojOovDJd+oiafXzPO3eh/Kf0DMFYnURqT+CjSCJHcX7A9K bdz7Lk7eysfAqA4snPazsbNh+kASkNuoXje/eLeLTVoLORAm7Stf5/RsvA6TFTiYZHIi8W 2qnoS2oTW4oFPFRsGIZuzzGCgBTDt4Q= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=D+6NaU6P; spf=pass (imf18.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866768; 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:in-reply-to:references:references:dkim-signature; bh=Wa0dFcuZNks8+m78LqIF6+BNsI3gx1vfldLXivV4N3o=; b=XVa/dlAJNruBhmYE+bUrR9bVWBBdxBG83XvWPoD+Ic0vElPWxPeilM5oysiQdvB8Gwkw9P Mc9IDWmOfHDDwiQnw9nlHNidxDWQrnyLZFUkYygwVMuqBCON/b7dlsxcHk8/e0jwpvmCEM yhl67tuJqkPNUzO7ySOAnfwpL2JTXGk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866769; x=1771402769; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=8ws+/8lspNy+rR5tjQn0/4EjYnvKhOpPRaAw0LffmfQ=; b=D+6NaU6PkN5axv6chDOXlZJWghFBDFnZUWH6HKSfzPEpnQnzBje5uJJF w/SDvhm8wM7KkGXGrFmp1xDYWAtYja7dW5UKbxoXhttYZUAOqny3F/SZ3 GMDF0LCuOiHxWMJAh42RDEAzmXgTQ5swLC9i71PU7qwscBpbcO0efK0e8 ELT/Bg2K3iHvOTI3XiHFJQCQYLBezBfbvTtN/7XWbO3C1f02D/dMpGj7e cskJmUcul/XkBKV5lGqsii9iCVosijAMs0NiN+eDFE6xVkDo2+dLzUcrQ gc4sXN6bNVHy6YiddHTvoL2/VLybpcVuljvTqSk7KWSbfuEh2pw60R2j+ w==; X-CSE-ConnectionGUID: fs2DSByORkSWUgjOVOYrqA== X-CSE-MsgGUID: w/T/8NCxRU+gTCq5AxOvxA== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150409" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150409" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:19:27 -0800 X-CSE-ConnectionGUID: 46KsSX6nShmB+6L3gB4eDg== X-CSE-MsgGUID: zDFh8fMPSzOB5kwIyeazag== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247888" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:19:09 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 10/14] x86: KASAN raw shadow memory PTE init Date: Tue, 18 Feb 2025 09:15:26 +0100 Message-ID: <738373d32089fbf84a8c5d6f32ade1bf28d14020.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: A57681C0004 X-Stat-Signature: cwa8ezhz4wa5xnk1imfukd5wg1kyj6ij X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1739866768-986056 X-HE-Meta: U2FsdGVkX18b8SrbPT1l5tBgaOKmfKvefbA1KDVqOFqeJhD/7eoj3HUI7l0Yu+0eA1P1NpoKXlSCSN3PgB8NxRX4Isv7V/jRNrpECA+kTJiORnVmACoIaa/zhR3K0hAIEpmHk3QTuTM6gKBWY7yde6YJq3/3wFiOJtek7fHLJpbqZqzkFNiOo4xOdH8BcyWu4j9ZRPY0x8WsTZUK3D30sXl0gPkwRhr97gp9fTBJ7O7Fx/+yURSUMQjEJDbXEkYKPewnQt5Ekc5KKNCCxOBP9HksKkm3GdWONjgNRmD2KqoKVz1GXwHa3QgMaLC7uSpSCRpW8eKLg2475VslR3ex2924xTO3ESKM+PNx1jAWge60aitBUEMupp0zsFDk5xntjyJ5CqkKQRP1BMxDPSXApGmyWOJrJ3xYVQc/+q/Uw0vjZ3kNqPF0BOa5AnNBPkYUMPvLrrFuVMhAjOnwNw4B1/iAICvaZhRrMEpE2OLFHFUJDIt8alAVOYkK9LAeDgl6wrQsh8VWlXNHeqNmC7rvTYpudUpxjhd/qLxcKsaXoxbAF7+6Opc+DG6oTWc8DgiWA/y5aOagxHlPdHxeBg/llhTzGCKzuM6Ocnxkl0P5QtoCeHT8YceLHDy7xHkPWrBDshoxPGky107SafCVAleOfypK+6vGdKovgI75QTCugMHuxJfiWQ/EEcPsrKGCHgDbSXXRkkzT4Ze6sTdTOOpLa20Nz/ctvlo+JyBthk36sDGqd6F3SYBrNg0xa71QtqzPpff1sgDttMFWc/+PBF3/3rSvIqvT0Sy/J5zDlXLYbPG1ZDYJnCzW8pzTflhIwCmiYbcb8kI/XRq0LcjZ4BrwSc6xmjPgdy3CnAR6mDKPuQkUSEm1Mw+G/bKOIi8iPNP9OyQRYLNtkwtD/rWP7CGE3H8oqI+enfvPgrxJC32vurodwuQQUaHoyl4PLMqyMfDlqnkIesKmcTo0ah1Mgoo a8eATpVF ffdZgOYLVRmSrC9YAweq/2KNWyAATVO4v2yM+4hXwmfGhjiiwkEu0uuO9QF7xCe9hx9x6OdJ/VdtNPRqWzphdJAzssBeZnez1PE4sECXpoWI6tAxJaaYf1emg/EWAIGd1a3q5xZBk8sKyUth5bn+gNiyzOxNVBUet2jWid1eYUJpDv1jvKKhz9voKjJ0PdJ1C1T7IvE5OeUqqosTGuR26grsNVpQKd2p0Pm8JQO3OEDC1MixUhGJm5sjD2A== 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: In KASAN's generic mode the default value in shadow memory is zero. During initialization of shadow memory pages they are allocated and zeroed. In KASAN's tag-based mode the default tag for the arm64 architecture is 0xFE which corresponds to any memory that should not be accessed. On x86 (where tags are 4-bit wide instead of 8-bit wide) that tag is 0xE so during the initializations all the bytes in shadow memory pages should be filled with 0xE or 0xEE if two tags should be packed in one shadow byte. Use memblock_alloc_try_nid_raw() instead of memblock_alloc_try_nid() to avoid zeroing out the memory so it can be set with the KASAN invalid tag. Signed-off-by: Maciej Wieczor-Retman --- Changelog v2: - Remove dense mode references, use memset() instead of kasan_poison(). arch/x86/mm/kasan_init_64.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c index 9dddf19a5571..299a2144dac4 100644 --- a/arch/x86/mm/kasan_init_64.c +++ b/arch/x86/mm/kasan_init_64.c @@ -35,6 +35,18 @@ static __init void *early_alloc(size_t size, int nid, bool should_panic) return ptr; } +static __init void *early_raw_alloc(size_t size, int nid, bool should_panic) +{ + void *ptr = memblock_alloc_try_nid_raw(size, size, + __pa(MAX_DMA_ADDRESS), MEMBLOCK_ALLOC_ACCESSIBLE, nid); + + if (!ptr && should_panic) + panic("%pS: Failed to allocate page, nid=%d from=%lx\n", + (void *)_RET_IP_, nid, __pa(MAX_DMA_ADDRESS)); + + return ptr; +} + static void __init kasan_populate_pmd(pmd_t *pmd, unsigned long addr, unsigned long end, int nid) { @@ -64,8 +76,9 @@ static void __init kasan_populate_pmd(pmd_t *pmd, unsigned long addr, if (!pte_none(*pte)) continue; - p = early_alloc(PAGE_SIZE, nid, true); - entry = pfn_pte(PFN_DOWN(__pa(p)), PAGE_KERNEL); + p = early_raw_alloc(PAGE_SIZE, nid, true); + memset(p, PAGE_SIZE, KASAN_SHADOW_INIT); + entry = pfn_pte(PFN_DOWN(__pa_nodebug(p)), PAGE_KERNEL); set_pte_at(&init_mm, addr, pte, entry); } while (pte++, addr += PAGE_SIZE, addr != end); } @@ -437,7 +450,7 @@ void __init kasan_init(void) * it may contain some garbage. Now we can clear and write protect it, * since after the TLB flush no one should write to it. */ - memset(kasan_early_shadow_page, 0, PAGE_SIZE); + memset(kasan_early_shadow_page, KASAN_SHADOW_INIT, PAGE_SIZE); for (i = 0; i < PTRS_PER_PTE; i++) { pte_t pte; pgprot_t prot; From patchwork Tue Feb 18 08:15:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979246 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 772F0C02198 for ; Tue, 18 Feb 2025 08:19:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 11D006B00A8; Tue, 18 Feb 2025 03:19:52 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0A7FF2800F9; Tue, 18 Feb 2025 03:19:52 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E62382800EC; Tue, 18 Feb 2025 03:19:51 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id C4E4B6B00A8 for ; Tue, 18 Feb 2025 03:19:51 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 8065EAFF3B for ; Tue, 18 Feb 2025 08:19:51 +0000 (UTC) X-FDA: 83132366982.20.D23CEAF Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf07.hostedemail.com (Postfix) with ESMTP id 55CF440006 for ; Tue, 18 Feb 2025 08:19:49 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ndc5y1eP; spf=pass (imf07.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866789; 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:in-reply-to:references:references:dkim-signature; bh=JU4QLoaDROMi+mjFEZexr7HHDWstJFVdYTBk7lWlpYc=; b=SRWDVZH27d+O3F0hweLskzxdtkJy1hG/Nv3sRPzWtMNledgpHXOGdNWq1zlJLFD+wf8CM2 x7uJKOpdtP+BWG9OLENQf1JFMQsPo7qI2NzjlF+Kj/BAxTy+62PJjSyn6EScF+d1hXla2H MaLo8MiA5XeEU0L9/Eez5xQD31UYnvs= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ndc5y1eP; spf=pass (imf07.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866789; a=rsa-sha256; cv=none; b=p2ZeGX637uLfx9ZEd4hpzTDjBIB4U5r27RbM/kAYSUWjfnIJx6mOWm3dTSdojQLXeBLbUt iM69aqfWiVug8lec3vEnWyzNNhmRPUTtX9SH36KLEUtpxanaFspFsDOwYXNLzBA+l28OqE RAg7YmdRefCz98nMDPOpjdwVBtjQEtM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866790; x=1771402790; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kRU3BBM+6pq6tmllpt/bIuIdjTWZr2MiffpU/uDWsS0=; b=ndc5y1ePmZwkCXDRp82yc3BcTS+80lBhns5i7JaykcQAkFefPs+6cHv3 oBW126PbR7O5g8SjmnQtQvab7Vx7dzeIVL/8KD3uFfraRLGdBvCYUinMt 9Dhcl8BUhkQyQegCTQ3PsK4d+AT/1Jw7sNKe0W+0qzQ+7rbIR+uBCg784 qi44FXcKB6PO1NafFk0mfeUbFsmz7hEVd66uGfGiKmSlfv1scc3xZlJOp dwOuF+hA6iouPukwADwhIAum6LMXIalEDEvQHfGDbzCVQzK3feg0MXxyx wzmpODp1jJu6pxAmodY3b6AZkk/JVjPvhY0wsvch1sIwb3sajaT0plt7f w==; X-CSE-ConnectionGUID: 6/p2FrRVQA6tJKRAciXtVQ== X-CSE-MsgGUID: 6wLBBHduQCeWu6C1Ir0qMQ== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150458" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150458" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:19:48 -0800 X-CSE-ConnectionGUID: IYj6E66YQH63xLaNCe56vw== X-CSE-MsgGUID: fqGS+T4jSJq734ReKLPe/A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247941" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:19:28 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 11/14] x86: LAM initialization Date: Tue, 18 Feb 2025 09:15:27 +0100 Message-ID: X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 55CF440006 X-Stat-Signature: ka4ayhk3dsuweqt3f8s4s7ams4eusscx X-HE-Tag: 1739866789-312744 X-HE-Meta: U2FsdGVkX1+zedD6skFQ50VLJjVnD3CV592EYnKzSjq5PP5+8JPjvM1zb6cIoJ5O7yboH5urUzgPDUzXp5ySokHK3Suhjzs6tO/hyV1bCeNTuhjwno0S/XFVWjlGTjJxIifAMUv2NUb1DzNso8D1PBXtoiqI1bk8qbqOYJZJ9stm9/1t027BM/4JR0eZFyngPGqvpcQcxevXzQvNkCRjX/xboFoX/xipRi4zHHJExf5iN/CI6B64XT6aG7CJQSJyVc9taO/rMTGlr1pQ1qVb/k3qs8u43Rt3F7s5qvSfCGfHD2yaNOJ/hOestCLWlobj0YLleQaji8reDD92iYBDob2HteQ7wBXkidpWpEL8zNCiWJaxCxqmB0dKOfewedUteKQXrqMDd68rzwewhE8XS0/tTy/zgcc941K4LovqtSLRO67n0hDZYNAq4v2LYWbP7De4VhOBqNCsh8ye1T/RXO4u+uN8SflD0eMO8QHJ6baH6Qf1NC89xE6dWQO92kT3AsbS5nkLx2L3GJ3uD3+bpXlS9nTljcFiUSFdFp8t4jFy/orB6lsugouEBMjOe7/4hFhvUd6hLcgP4evmYEqMU82kIYGSWS+0xP6h+t5c2IKMAne3tI/syDULjsqv0mfbmZQzeLPxMy6TSHMvgIl3lwqgmaif4RvnNoznC6O1W/POaWIvFK7aNACxbJzAKZFTTK+Vk8NZwwQC+sed9MC36R0K9NFCmoZVNYGE3YDnSV2SDvLVuP7xhEbuMHZIPHXMlE4y9O5BGEjm6urKh/O/CEn/s0qb+co3bfDrM5iikf0qsU31Da9nLGTdbPVgPFyCp+kcWZsZusphm+hGxcXu3Hrzslb49J6vMpSSbp/iqhdy1v4LbPuLZloheJ469v6+xga38+A/vj3fZmLwVrKQgcEqV2n3M7uAZSZIPjP6H3jahKxCgZdaeRi+2KvB5seqqM5+cRpGMtAh7/8k6bk mu0lgLKr Tmn+Rt537s+ywRbLU/pKJx5RUWPyA2QfJtepEUplRcpV9qDQyZUkGWYdjZNr0qskMQEKNgzHOA5+ubTuDiIjvdRwMVIjnSvqCSG4wH3zd2+I8uWRmoZPoDSd3o66+x8Q+YKkSjRO0xby0FqixvJa4TAhF5JKnBaB5Hbxd2TVnQtjHQAUng//HrD/hVUEK4XtZlwP7ipw5ZWWsd7lFgrZtf6KSCkUXfVvzGOv8Tntw/hzLH1ZxZA6Q/wwUnQ== 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: To make use of KASAN's tag based mode on x86 Linear Address Masking (LAM) needs to be enabled. To do that the 28th bit in CR4 needs to be set. Set the bit in early memory initialization. When launching secondary CPUs the LAM bit gets lost. To avoid this it needs to get added in a mask in head_64.S. The bit mask permits some bits of CR4 to pass from the primary CPU to the secondary CPUs without being cleared. Signed-off-by: Maciej Wieczor-Retman --- arch/x86/kernel/head_64.S | 3 +++ arch/x86/mm/init.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 31345e0ba006..87158729f138 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S @@ -206,6 +206,9 @@ SYM_INNER_LABEL(common_startup_64, SYM_L_LOCAL) * there will be no global TLB entries after the execution." */ movl $(X86_CR4_PAE | X86_CR4_LA57), %edx +#ifdef CONFIG_ADDRESS_MASKING + orl $X86_CR4_LAM_SUP, %edx +#endif #ifdef CONFIG_X86_MCE /* * Preserve CR4.MCE if the kernel will enable #MC support. diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index 62aa4d66a032..5499ba683b53 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -761,6 +761,9 @@ void __init init_mem_mapping(void) probe_page_size_mask(); setup_pcid(); + if (boot_cpu_has(X86_FEATURE_LAM) && IS_ENABLED(CONFIG_KASAN_SW_TAGS)) + cr4_set_bits_and_update_boot(X86_CR4_LAM_SUP); + #ifdef CONFIG_X86_64 end = max_pfn << PAGE_SHIFT; #else From patchwork Tue Feb 18 08:15:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979247 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 CCD27C02198 for ; Tue, 18 Feb 2025 08:20:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5B4CE2800EB; Tue, 18 Feb 2025 03:20:11 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 513CD2800EC; Tue, 18 Feb 2025 03:20:11 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 38F142800EB; Tue, 18 Feb 2025 03:20:11 -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 15F932800EC for ; Tue, 18 Feb 2025 03:20:11 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id CDB6A1C6CDB for ; Tue, 18 Feb 2025 08:20:10 +0000 (UTC) X-FDA: 83132367780.19.EFC6A18 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf29.hostedemail.com (Postfix) with ESMTP id A2BEC12000D for ; Tue, 18 Feb 2025 08:20:08 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Y661naYf; spf=pass (imf29.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866808; 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:in-reply-to:references:references:dkim-signature; bh=COic6/VOoJ0eGVo5zHidc2M6LNkQyli/tN3USV00O/c=; b=wQyyRxcnEZ9KIXLPOQX/ofKw6hkTw4KXMV6kntpEL6qIJTqUe3+cR+KJdC/0kVcfj0F5hy WwgmoxpxLeofAXkY9TUpDZR/iOQosrGtIgZ/lJ372WqLT8soNAe2wid+XPSJb66fPiRw9s tmPpZb515SyGUbjA8yLrkAtldpJMsvc= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Y661naYf; spf=pass (imf29.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866808; a=rsa-sha256; cv=none; b=RJyhVJagcKZDG/pUSvJQIaxPkWuk7c2UC7tfjfrttTzZFLqHOQdczRN7VMQRS1aPf0qbIm +fPwDu8sWUozys46UKkJPGu5bCzXxTDcC8xWp65zGn5qzx4tkB0wP6sqFxoDikZwBPu+ry 5jgBIz6knAedReh2qxrWBJn1rcsUhxg= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866809; x=1771402809; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0sbrC9tGnrpSIjCBvMQjjZHz47dMDIJFFFhx0nNlTv0=; b=Y661naYfZ9Mc+tZmPaBhCmQSF83ZHFKY8dz2I7GgakwAEl0WVvpOlyzn 0ZXuC9VwOszH8BHcrfuNNEgzBK4hpE7b3LPUTH4kMfzvkB0EsgxM6yfmZ bGw73e57c5H0LxXy+y0JCCCV8sLkjGNLgIRzZD60pPxIDDFNUXSJLIXVU xHlPYjBZ4WCO3rKfwDo/YDBZlDjLHde2KmEPaC5crkRGDqBb+jaSPuACZ h5A1Zy2aSeRPQnZTDqbubDMh8US7K7S6udHmaP9DUDOZ/69hVNNKiBXY2 c2k5C6W0RTOoQcZUv4hMpXYxtJAaKUknsLIQX7vsx81fTFGWASX6T5KDv w==; X-CSE-ConnectionGUID: 1WVuyxrGSwCXT+Eb+ALXAw== X-CSE-MsgGUID: MhMkXjTkSDu8ZKP043KKsg== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150521" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150521" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:20:07 -0800 X-CSE-ConnectionGUID: gMq3mPUvTV65euptYpCgkA== X-CSE-MsgGUID: 4QJymTnUTKCW0GQU3obH6A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119247992" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:19:49 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 12/14] x86: Minimal SLAB alignment Date: Tue, 18 Feb 2025 09:15:28 +0100 Message-ID: <7492f65cd21a898e2f2608fb51642b7b0c05ef21.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: A2BEC12000D X-Stat-Signature: 8zcnhmbxcujo96b71qi1rr15scqmt8ob X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1739866808-164696 X-HE-Meta: U2FsdGVkX19D+l3OexqvWbvQaYRz8YpotUaWdHGh1HD3HxH34I/omJrJd6yn3eB7S7ZqKmrrxTkk3znJTaAa3lzEyCfmNKWXdFz/o0QwI22QO8rcrPgo11qUAd7AT0PEBao7fRML64UOqlLv2FsaMMyg3sGNflY4W1fNoRVvbWvBB5VstcjeTzBLQYhHwjWAGn+y5EK1wPJFOxg00MK/6kOY9IagvkVBJRMoD1PUHwqM+9AkJ/yCZkk7nytxurkpU2LXv6B/NETDUiibC44amuGz0iJwRlZ/AXwwfUbd1Q5+AmqJov/9HnwKSnX9KNJz0PRJ1X1YcnICtDDUQeRtTz00X+oPBWUl6hzYkIeMzVJNohDObfFGekrwRjGW35ccmy0y3HcScpDtDxji1WXZB2wIZS9/uw7zuWU1O+ggHKAQTRIwWwJEZPVzpKSgoexJSICaQBNfHhl4H+ooUVQXGl3ChzecIQ23fm0ckEvFR0e8OohDAJp/QkvveqBf5MvdC291xyxSPzq89zngRSg86VHqVmFs37gqY8OQ/jz+LRu8T5bFjTDWSCFM45dSsCezved3el6w8vWOc5Ec4YwbObVd6W90O1abYw3Op4e35JyCyzYnEdiHdw85tW0YpqNva5VsPhIDWprmmWlYXL3//V5rov280enTz+EokKyGwxgm2SBZgfX7JR/TNmtt8Lyqbjc7FoMKBIoCQga1UjmoU+kQ2HNz+hwQ47qHLKsC8OreBDyG7CYvS/t+kfX3mHcTGdimGnBcMUIAfpSley9DkJoG7l359+e/5tScJYa06zx5GkDyEAwT8VGCiAeQgsmc9mp0xY//RreuckHnatOI2xuJikRGfyrDzl++KqU3a71PLGC3A8DU5zT5BYH93DwnU7nomdEJMWWY4I23qgWqK+UT9zENW6PlWgEy17v0pPvBIzxSVBeuvPb1r2BA7FGQFXx+Zn+HoZrcHLW8usx NViyOZKf CwSb0U867WzY/fs3/aLm8CgFruKv543sbpeeo/XW6sLfQ+yjLVh6bWsVb6EYi9ftjbP+FDVOstKMXffmpm79jLhP8YDqqT/q43sFWPnr2Vk5LbI3zWP7mx7ZwlC+jWBCPWiZe00xwjPgqgSOBlnMUJc5JCXVN/qJsqkjkHVpDhH5S9WjuBpz2DqZcuQwQNE5bE14lJusRWCozzCAYFYABNEBcIzsgJWa/CSLU/4I5qX88onlh0+fknWNhqQ== 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: Adjust x86 minimal SLAB alignment to match KASAN granularity size. In tag-based mode the size changes to 16 bytes so the value needs to be 4. Signed-off-by: Maciej Wieczor-Retman --- arch/x86/include/asm/kasan.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/x86/include/asm/kasan.h b/arch/x86/include/asm/kasan.h index 8829337a75fa..a75f0748a4b6 100644 --- a/arch/x86/include/asm/kasan.h +++ b/arch/x86/include/asm/kasan.h @@ -36,6 +36,8 @@ #ifdef CONFIG_KASAN_SW_TAGS +#define ARCH_SLAB_MINALIGN (1ULL << KASAN_SHADOW_SCALE_SHIFT) + #define __tag_shifted(tag) FIELD_PREP(GENMASK_ULL(60, 57), tag) #define __tag_reset(addr) (sign_extend64((u64)(addr), 56)) #define __tag_get(addr) ((u8)FIELD_GET(GENMASK_ULL(60, 57), (u64)addr)) From patchwork Tue Feb 18 08:15:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979248 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 BFAC7C02198 for ; Tue, 18 Feb 2025 08:20:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5B1B32800FA; Tue, 18 Feb 2025 03:20:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 589532800F9; Tue, 18 Feb 2025 03:20:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 429B42800FA; Tue, 18 Feb 2025 03:20:29 -0500 (EST) 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 259392800F9 for ; Tue, 18 Feb 2025 03:20:29 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id DEED8A0D64 for ; Tue, 18 Feb 2025 08:20:28 +0000 (UTC) X-FDA: 83132368536.08.751C4CF Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf30.hostedemail.com (Postfix) with ESMTP id A5F1880008 for ; Tue, 18 Feb 2025 08:20:26 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="DNrLW0/0"; spf=pass (imf30.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866826; 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:in-reply-to:references:references:dkim-signature; bh=LvxOhHcvAG8oEwurNxE+t8tG/ggtZ5vdhW46eAhAGP0=; b=O6dLl2PaAA+aqBVJdky7eGPlM0/+xyaTaC3ASe9fIhg3Xuv4RwgrpH8Kx7ispOWDARZ8NG YhgkAz3lPR2IRI4w+38W8d+ICYHBm0BRo7SM6PnJ05TJWzy0eQfsZG+tf0YoBqnyV52gy6 Bp0Rq3PWdGnS+7PDAChsT9dzA4eUPKI= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="DNrLW0/0"; spf=pass (imf30.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866826; a=rsa-sha256; cv=none; b=DuHv/f+emMqVf4BNvBEr5Lhu14H8FFODFBtk8n3gdCvxzikz1WIqzXAHpQ0fP5R1ge2X8k GfmhTQICpEaU4kZKRG8k93cKSSymHizbDPok0W4JweZ9/9nBqhlw/dd2iVsV0Z8w29uP/F TXeq58q61AkxP3pA7NvrXfhIoNyLPL0= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866827; x=1771402827; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=tLFNi6QiCcH4XS9SXJrys5meLjBaYY7ZaQ2eE4lAVKI=; b=DNrLW0/07rJSZ/FyoNHS3WszzlClUjIQFX0f8oFsCOsQH+37OB6orYs6 hkUu4xbGQ1yER/9/kx4sFi7XD6MMPuxlMkNGSlg3onKWlnGzYA399aSYn PEm+HgvYW0uGSt7b+chA16HBIKg+Dx+a11Y9gnp59jRneLA620TpsLZLS BXx+FvjypyNUcIuMCVtmYsWUJ0fNlGXOiiz6IK44gWCbF/e2m/AdU200o b4TK5S7MsKQR3o2tJm8a8A/WqRSIsypWw5jpmElypksi9X64SVwAvcrk/ EtCDNoJbHGMRggnp4SIl7bGHhBB0DHOxxaYstCChq+/wRZOs8kH/+zYYI A==; X-CSE-ConnectionGUID: QUbwTnKpRcarI87bzb26Qw== X-CSE-MsgGUID: t8EOB518RYOQb9xZfXxFWA== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150558" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150558" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:20:25 -0800 X-CSE-ConnectionGUID: ZBHrRLDGSHmtBzW5XHTLlA== X-CSE-MsgGUID: DOPqudHOR6e9SmDmLLK9pQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119248027" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:20:07 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 13/14] x86: runtime_const used for KASAN_SHADOW_END Date: Tue, 18 Feb 2025 09:15:29 +0100 Message-ID: <2a2f08bc8118b369610d34e4d190a879d44f76b8.1739866028.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: A5F1880008 X-Stat-Signature: makd6s37xg5ue5o5uh3sb658p45qu13o X-HE-Tag: 1739866826-470028 X-HE-Meta: U2FsdGVkX1+8XihDtfYkTU1Ql1b/obkSBp350n6yoT0SKmbqcE+7c+Z1VLxXhzLK2Z+QkljZ5zYLPKz5f1dZs1lLatizJYUQ2hPGf3eOJ5GmkvXd68ulUp3biuyZuHnlaE9GKKU+dbZmJsQof4MEYag6BJq8rRls+bMpNwueAfHdL3RUbAPeaaDE+s6CygUzkzJx64W+3HLuJ05qmntCQRe0eHjzhNmgjt07Xb7pfHcTtHPU7JKr92M2Z6QDmEn+TeIEi0mm3ThTt1R93C+BKEdYOOWXAE/mC1+bO/ux6nhEHJhl1vv92OjIPlBOtYUogPxXsbGnwcPXHqnKPbaE48ZXiqD20Jxt70+4lGrHH3ZmxWkR5r5EyEUEBXl18+Q7bjVFbzm7MG9Tz1hy/9v6um2NXSdtJQ+Tc5OPxwGrwSzi+tKTvwlUnfj73HAGP3XQ/Fau8HFIVjuzjs6MF7DwTNlANWjUJ2ZZzE/UoTBGjHHToSeJX+rt8BScvRoQlmWwmNj76ztw5LA7YwygDicl8FKN59SbiZRyA50OGa4+467n/EfSFf+vnqufTu7+Qll6Rlb5M51f9o0E4aHY932vuEzbJV3ZxOlQCU2oudCcWBkBnET36DX2b9h9s+j/pqNZwHSJ3badEqYX7J6pY9i77bQgrK2CLb8grFql4UlnUEhOhawlG5yBEqcjUiPFX2Tqfph7MV7W1cBBbIYNaxiyEEU7a1nCOr3QdEivLBgn5G3LR+E4gKGlUBKkElnsRBfePdBDHRlrsrf8WcI7o7H2orn1A+FMlmros4k+0Ojv5AuH9baU2MPJasr5AZx8dOXlxECqkna8He2wgK0/rDbAHSaoWH09HrgtvQS5HVz9XjoDypt9+MJ/LRU0oegmP/44k+wkMoREPbgEVrs5/psYOd5UCd7vv8Bi4dFGldq5SPLuDU3sgZMHFOqxdi8vicoqrYkAOfD82ERMSodM+2g xzH5J3MN aSVYzdSGPMYhZUcENPR13ZMglQ7w641hj4bJ9MwpOEXQCqtGoTfwxLRmIMy845HyQpZ6mUt4Ri9SybUb4OIWrL9Dt0EoG4TxV6XBV25iGTAdUOFeaDBIcUxJBZmea+HlloSmikL0GZO1IXjL/lPBmiDj74MMRNu7gLCVs8judzcNRAFAs9IW+jRM7ZgU6UmBjTstPll/K9vnt8UmbuhxARoznGdKIRLhfgvxw3+Y+BNFNiWyEkbsujS8QwD8c0nAxwE6B4L2g4IlBdKM2cYSLvwojJ1EaVpzA8UYPOjiiAbcyLuc= 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 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. 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/x86/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 | ... unused hole ffffea0000000000 | -22 TB | ffffeaffffffffff | 1 TB | virtual memory map (vmemmap_base) ffffeb0000000000 | -21 TB | ffffebffffffffff | 1 TB | ... unused hole - ffffec0000000000 | -20 TB | fffffbffffffffff | 16 TB | KASAN shadow memory + ffffec0000000000 | -20 TB | fffffbffffffffff | 16 TB | KASAN shadow memory (generic mode) + fffff40000000000 | -8 TB | fffffc0000000000 | 8 TB | KASAN shadow memory (software tag-based mode) __________________|____________|__________________|_________|____________________________________________________________ | | Identical 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 | ... unused hole ffd4000000000000 | -11 PB | ffd5ffffffffffff | 0.5 PB | virtual memory map (vmemmap_base) ffd6000000000000 | -10.5 PB | ffdeffffffffffff | 2.25 PB | ... unused hole - ffdf000000000000 | -8.25 PB | fffffbffffffffff | ~8 PB | KASAN shadow memory + ffdf000000000000 | -8.25 PB | fffffbffffffffff | ~8 PB | KASAN shadow memory (generic mode) + ffe0000000000000 | -6 PB | fff0000000000000 | 4 PB | KASAN shadow memory (software tag-based mode) __________________|____________|__________________|_________|____________________________________________________________ | | Identical 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 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_SHIFT))) +#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)) << (__VIRTUAL_MASK_SHIFT - KASAN_SHADOW_SCALE_SHIFT))) +#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) . = 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 = pgtable_l5_enabled() ? 0xfff0000000000000 : 0xfffffc0000000000; + + 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 = (void *)pgd_page_vaddr(*pgd_offset_k(KASAN_SHADOW_END)); From patchwork Tue Feb 18 08:15:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maciej Wieczor-Retman X-Patchwork-Id: 13979250 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 6A3A0C02198 for ; Tue, 18 Feb 2025 08:20:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F28EE2800FB; Tue, 18 Feb 2025 03:20:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id ED80F2800F9; Tue, 18 Feb 2025 03:20:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D51B12800FB; Tue, 18 Feb 2025 03:20:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id B6BCE2800F9 for ; Tue, 18 Feb 2025 03:20:49 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 60F6A43D74 for ; Tue, 18 Feb 2025 08:20:49 +0000 (UTC) X-FDA: 83132369418.12.0760CEA Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by imf06.hostedemail.com (Postfix) with ESMTP id 22A1318000B for ; Tue, 18 Feb 2025 08:20:46 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=eRkaE6I5; spf=pass (imf06.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739866847; 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:in-reply-to:references:references:dkim-signature; bh=y+2vJ5V8fj0QHnrVr72+4J/GflVUeiKjoW1Qh/HQtpE=; b=npvo6hphKnyazktR9n1Na48dQIKczZOhRWlTSrkSjqdv9Wm83ZGamlnWn52ltPXjcw9081 CJ28NAmAo7fD5c6fLNSecYRdGiHaZhLklRjJlYJ9LhnBd5RZYPJfqFCI4Yctfx0V4VIROn NPMyZ46aQBGX5zCAPi3TllDo635VzDc= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=eRkaE6I5; spf=pass (imf06.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 192.198.163.16 as permitted sender) smtp.mailfrom=maciej.wieczor-retman@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739866847; a=rsa-sha256; cv=none; b=C4MbZIz47+CzsYPqhTi2o56a6aP4zsmUg1AOeSvtvH0Ee00dpEucum1NU7nEPj+LI2VWGl ggCLNEqe6U+05V/d0dH8PIhVoGqHpSQpuKNl/rf6EpwhdpPiJdftaiAgbvYfGcdpj4ILOQ AFUhHLm6P02ZWRmgmMlviLBw0xo1P3Q= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739866847; x=1771402847; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AlEyxh75+r5QiPqcPtjpo+/HVa79C4HAQUROM4qi8Mc=; b=eRkaE6I5/2OliVANuvq01HFglALM2FhrNQ293lcR7gJ4NbSeLzVEhuMn 82aKqjn8ZsNt+uLQnW29ziafBkiXDTK//a3VgDYPvzxqMPMby8Jo7Q9oT DAqmXGuiJDzR9EaWwhQI2QJpQsL2vZkxAqZ/92Ki4pIALqyBy5zO7Gbmh HT0gBBsNAR+spUYqkvIcRabM2y7jeUPeF+94FhG0+hH6P0mCOmeuAex9q PNF+eXZ1SnsWxxsiFjhz2X4XE7b349ziiYdNAMxSdrm1zOhh0rcZwKRpM 6i/xMSNPS+jggGZbU9+w36XSvc3Idw75nDp/oFHFR+y7X1afUJz7fQVV5 g==; X-CSE-ConnectionGUID: oQEUNx69RFOxhD7f2UhhrQ== X-CSE-MsgGUID: 3bdk6uM0Qu+yLyJsquv3nQ== X-IronPort-AV: E=McAfee;i="6700,10204,11348"; a="28150611" X-IronPort-AV: E=Sophos;i="6.13,295,1732608000"; d="scan'208";a="28150611" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:20:46 -0800 X-CSE-ConnectionGUID: WmLxTe3CRhiKO8fnH2NB1g== X-CSE-MsgGUID: lzXfGprHTkiUTI4Yyjdk7g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="119248085" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.245.245.49]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 00:20:25 -0800 From: Maciej Wieczor-Retman To: 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, andreyknvl@gmail.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, maciej.wieczor-retman@intel.com, 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 Cc: 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 Subject: [PATCH v2 14/14] x86: Make software tag-based kasan available Date: Tue, 18 Feb 2025 09:15:30 +0100 Message-ID: X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 22A1318000B X-Stat-Signature: 53ir7e1zapxzzgxkktgue5x8axupew1s X-HE-Tag: 1739866846-587787 X-HE-Meta: U2FsdGVkX19oRR92xAi7OO49P/xGh9sx2Wh8QBwXAV4kIDoq7+wHAop8xen5hET1G1Jc4YnL9zQhDCU0h8MDJWv5vBCI5Rc0QMq2/xTQr0rPr4RnlOtfQVmsXWhe7KDMhNml5+tDysak/3+X3eg9wbA/tam2fxwJ2dZnKe9x9aYVHUa7emMZtQJiuqZjNUlsJHICbTq+RHXbPfLVvXyJNTbs18X8FAesRgmpB1XByBEadbUq5YmTjAuDBrGIG3Wh06dGgtNTvKc+V10zsZgg4M/jMnf4NEvgg3gI1TyYTHUn5N7gyPBLBiJEVXq/cQWmm4M7Dn71YJMmML4a6FqWIOvWc+EN1G+oDHRlbDAlD+UHbWHtq2CRFDfOPe5eVohqYLt1EkjU818nUGdS8joiPjY8ywwcKo8qhyWo/fhEmxXr4gXk+iJkF2006z7K6eX4msymZxLUguPK2ojjcQLMMSoWZniZd0ySl9hdsi6oPq6z7cgxp0m8vuNOrEI1199mFdBNGT4bUBPanE8w2kib+QrKlDhe2QHiBkeuAudGyLDZxveG38hFx1C6PNKAfvicwMGo0ZB4CexmJfrkiuqQgOSYGKiyXj8/WZW+1e2ByqWN24gAvhwu6AEl0AygUQ64dcR4UgladOJbRTdgZbo+At7v4cCwwsTwMs0M2qySkbi/07eENsQcokGHlPMCHX/mFaPqf9gGslEEIZrakBpx79i5lY2EOnZxYy4A5saF/2IkQaamndtxQHAMTn2336XmNAoglLCsdUYdoL9EuKDCw4mewXpTD8qWD58XewJ/hcFScy6NwWDOIecIu6Y62adgbIZVuxlFs9aRcYfi8ZK4yVGxF7hIt348JicTkLulww5lzvo4jGr1+hj545yeKT0wqgZNi5KkxOwwmiXYz2aMTkELgAgr9or0kVhv2rYuhvn2AWWGARDoxrOgktVG8q6J3ColmuOq9hY5jxcSj0N duBW8Tfm Ah/3/yYP+w1P3HuM64Tq1qebeA+aMRVDQ/PVZYw8Hla1s8CC/NSfKNwMmAwxE0Xxoc+5o3gjJ5kBPA+rxOTv9ctR3+7TdwYxxM4ygZgpmDWkUPuOubClhvgxuwthsNhsh4L8gQXY3bjTkVpTHtz5+jB08bnnm7Xt36jMsGqr0537pHpvUuEBonUnupjh4kEJW9Y1kbdrEqoq0/BFFvrEi85O3hNfg5/mrTtS52OQTtxxyW3RUQNita6L7Sg== 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: Make CONFIG_KASAN_SW_TAGS available for x86 machines if they have ADDRESS_MASKING enabled (LAM) as that works similarly to Top-Byte Ignore (TBI) that allows the software tag-based mode on arm64 platform. Set scale macro based on KASAN mode: in software tag-based mode 32 bytes of memory map to one shadow byte and 16 in generic mode. Signed-off-by: Maciej Wieczor-Retman --- Changelog v2: - Remove KASAN dense code. arch/x86/Kconfig | 6 ++++++ arch/x86/boot/compressed/misc.h | 1 + arch/x86/include/asm/kasan.h | 2 +- arch/x86/kernel/setup.c | 2 ++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index f4ef64bf824a..dc48eb5b664f 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -195,6 +195,7 @@ config X86 select HAVE_ARCH_JUMP_LABEL_RELATIVE select HAVE_ARCH_KASAN if X86_64 select HAVE_ARCH_KASAN_VMALLOC if X86_64 + select HAVE_ARCH_KASAN_SW_TAGS if ADDRESS_MASKING select HAVE_ARCH_KFENCE select HAVE_ARCH_KMSAN if X86_64 select HAVE_ARCH_KGDB @@ -402,6 +403,11 @@ config KASAN_SHADOW_OFFSET hex default 0xdffffc0000000000 if KASAN_GENERIC +config KASAN_SHADOW_SCALE_SHIFT + int + default 4 if KASAN_SW_TAGS + default 3 + config HAVE_INTEL_TXT def_bool y depends on INTEL_IOMMU && ACPI diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h index dd8d1a85f671..f6a87e9ad200 100644 --- a/arch/x86/boot/compressed/misc.h +++ b/arch/x86/boot/compressed/misc.h @@ -13,6 +13,7 @@ #undef CONFIG_PARAVIRT_SPINLOCKS #undef CONFIG_KASAN #undef CONFIG_KASAN_GENERIC +#undef CONFIG_KASAN_SW_TAGS #define __NO_FORTIFY diff --git a/arch/x86/include/asm/kasan.h b/arch/x86/include/asm/kasan.h index 4bfd3641af84..cfc31e4a2f70 100644 --- a/arch/x86/include/asm/kasan.h +++ b/arch/x86/include/asm/kasan.h @@ -6,7 +6,7 @@ #include #include -#define KASAN_SHADOW_SCALE_SHIFT 3 +#define KASAN_SHADOW_SCALE_SHIFT CONFIG_KASAN_SHADOW_SCALE_SHIFT /* * Compiler uses shadow offset assuming that addresses start diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index cebee310e200..768990c573ea 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -1124,6 +1124,8 @@ void __init setup_arch(char **cmdline_p) kasan_init(); + kasan_init_sw_tags(); + /* * Sync back kernel address range. *