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)