From patchwork Fri Apr 4 13:14:08 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: 14038449 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 4804BC36014 for ; Fri, 4 Apr 2025 13:15:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 56A4928000A; Fri, 4 Apr 2025 09:15:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4F3C9280004; Fri, 4 Apr 2025 09:15:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 36E5128000A; Fri, 4 Apr 2025 09:15:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 1C3A6280004 for ; Fri, 4 Apr 2025 09:15:50 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 44914120161 for ; Fri, 4 Apr 2025 13:15:51 +0000 (UTC) X-FDA: 83296408902.25.C439D1F Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.11]) by imf06.hostedemail.com (Postfix) with ESMTP id 0D56E18000C for ; Fri, 4 Apr 2025 13:15:48 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=GmbHFPxc; spf=pass (imf06.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 198.175.65.11 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=1743772549; 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=1M+o1cDr/cejiJebPvpehZ/hYd9tAcNgHmEsRZx9DNY=; b=esooHGhboRPydvm+f434zShPUJj2iqtj0l9zD0f9WIT9yw+ZxmHlysVt3EuMMiVvVcmvIO NjmNq5zt60wSZZLNTczgw9QM3LJXkwl2b3yL2f47S6U/HSiG9n1PFBCttF8m0msJJtLo+p 4yx35CfEWHzI6cPn0czSMCc16n3s1vs= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=GmbHFPxc; spf=pass (imf06.hostedemail.com: domain of maciej.wieczor-retman@intel.com designates 198.175.65.11 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=1743772549; a=rsa-sha256; cv=none; b=g3BBJz4doHB3Jc/xsgWPkBeegQdSO1isvuLSrFe3b18gLpFG+v9tyx3acHFklFkBrU3kEi Bt55BySt65gK70UGFo57a79ZMWCOjCCH1Qc0er5RKyX2l7GLJYBjxmt+M4BuvfQjy5XPnx +rzPoZH5EbDVOH2sgF4E+z8DU5p/reI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1743772549; x=1775308549; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=D4i7JF8uDEtWP2nuK8uzBgD8AmJabmAUNQ+XaZEoObg=; b=GmbHFPxc7JFhak6WdGKtDu//ibWAJ780IaJDmfY6hLYh8ATa5pd6t3dm dvyDVPeYWdLxbN64XZH6K1+MeeU10y2CfUReOkTC0cjYE2VSIUCLUco83 fzgDrbNADsC0Jpo+91VCVxC0xLbBA3tSto5ABt0AId0Alebngrgs/8b3a udhGJZlkEIml2PTlsnlRy0ougOwCEuIKGWJpSUrJAusLpcwlEwgkHfxcz SWo1iryJYfGPG2gxtR2Jd0wU6mS4D4IVKO6+HsWcrRBvm9q23DB1nlPeq e5XJPHaXESgwU92ZO65glJljAmPzPe2lOaazn/Y96gcDmqfrXH8Ob+uiG A==; X-CSE-ConnectionGUID: VCmfLO5XRaOoWVNA6tW2Zw== X-CSE-MsgGUID: r0jzIGpCQ5+Sa2HHMXU5BQ== X-IronPort-AV: E=McAfee;i="6700,10204,11394"; a="55401682" X-IronPort-AV: E=Sophos;i="6.15,188,1739865600"; d="scan'208";a="55401682" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Apr 2025 06:15:47 -0700 X-CSE-ConnectionGUID: pzanETZmQhSdtpOzW63ogA== X-CSE-MsgGUID: Fj7gxPnqRE6y35rxD0gliw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,188,1739865600"; d="scan'208";a="128157039" Received: from opintica-mobl1 (HELO wieczorr-mobl1.intel.com) ([10.245.245.50]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Apr 2025 06:15:32 -0700 From: Maciej Wieczor-Retman To: hpa@zytor.com, hch@infradead.org, nick.desaulniers+lkml@gmail.com, kuan-ying.lee@canonical.com, masahiroy@kernel.org, samuel.holland@sifive.com, mingo@redhat.com, corbet@lwn.net, ryabinin.a.a@gmail.com, guoweikang.kernel@gmail.com, jpoimboe@kernel.org, ardb@kernel.org, vincenzo.frascino@arm.com, glider@google.com, kirill.shutemov@linux.intel.com, apopple@nvidia.com, samitolvanen@google.com, maciej.wieczor-retman@intel.com, kaleshsingh@google.com, jgross@suse.com, andreyknvl@gmail.com, scott@os.amperecomputing.com, tony.luck@intel.com, dvyukov@google.com, pasha.tatashin@soleen.com, ziy@nvidia.com, broonie@kernel.org, gatlin.newhouse@gmail.com, jackmanb@google.com, wangkefeng.wang@huawei.com, thiago.bauermann@linaro.org, tglx@linutronix.de, kees@kernel.org, akpm@linux-foundation.org, jason.andryuk@amd.com, snovitoll@gmail.com, xin@zytor.com, jan.kiszka@siemens.com, bp@alien8.de, rppt@kernel.org, peterz@infradead.org, pankaj.gupta@amd.com, thuth@redhat.com, andriy.shevchenko@linux.intel.com, joel.granados@kernel.org, kbingham@kernel.org, nicolas@fjasle.eu, mark.rutland@arm.com, surenb@google.com, catalin.marinas@arm.com, morbo@google.com, justinstitt@google.com, ubizjak@gmail.com, jhubbard@nvidia.com, urezki@gmail.com, dave.hansen@linux.intel.com, bhe@redhat.com, luto@kernel.org, baohua@kernel.org, nathan@kernel.org, will@kernel.org, brgerst@gmail.com Cc: llvm@lists.linux.dev, linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, x86@kernel.org Subject: [PATCH v3 04/14] kasan: arm64: x86: Make special tags arch specific Date: Fri, 4 Apr 2025 15:14:08 +0200 Message-ID: <716de282b80fe47895ebc876885e31e344c676cc.1743772053.git.maciej.wieczor-retman@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: 0D56E18000C X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: ebxyd6tqadrien5pwew7x4df1jxb8mtn X-HE-Tag: 1743772548-924587 X-HE-Meta: U2FsdGVkX19XeasqWyTLGPeMgPvPxmy0zxUULfqPU7ViqkpKpM69RGqiWRhCh1X2OIqS7pYPnjNE1M+LKQqe7F9cJ4bNjFBtcKwprsXlTbgWbuNh7wccyvNgE941wM3xTPSwsIlA/M813pX8ret2hnhlR5MW7yjPxcw2Hxsw/kBfkNAAFq8ny8uBSsduNx6GozlkC/yULYNCoynU4ItRL9kUJfsxorcdobyB+pIdil+v3dx/IeBjSa+CEXROusfqEZWOSaJeruG4CdDv/DTHd5U1Mp0l5HHWA13EXj3g1x7k1odnqeSubXj23YDpgZdgfpTLeHmIOIJZsLOCAVdA6c6kzc2irIOwOuUcVp0PA20jXW+HDc8CizjXl55PL+d2kfxGtHb/CyuHe4LKCD3Kts6UdejU3P/u8t/VIj375dBG0yIJWNMJ8WpfPNGRq1DVni2kGiLFvSWH3Q1na3MDEdmgGfmWDKd2uT6e+1TpjwQvVTXZ9M41P5Lp1q4fnR7Ybmbic1LWlGsYlzKwK0InNVxGyLMdC5lcd9DnL+sEtF3iNzE+20zRCEPPUh3r6g4TqoAM50KBEYrOtFnbRnbHcEVu7Ki+Mb3XJgdkslZWBluFEdIMkhT0kOFc/A6Eac1+W9A6FBRzZSdGb3nHi79UD/aCJ0T8OxnkvM6lHd4o8dHjvlnRPnTbXm8RAIvLLpO2A+7LeNuGoGsGJ0HXyj/+/JdGCUBAEiLPPrGnxyNg4ewxoR60v5+MBrejWX6YsSX3HZvDDuy2zI1t7lJK86qxnH54OhNiRwscU5/sOnwZAxrxxd9SxrDZtQXalMmEw28RugGzX98sW1/g7FpukLEGXZ0DlWnwEia2eSnqo2/WS0PnVxuP+xg2yXL8IpWlR8O3QDNNIE2clcKs9/slUegfPFXOGBTimd3TcR5JUJRgHx19rC7zvOrfB2CnA8roZKI9WqnZ2RVdCLxqUA6p3K2 zs0VL0Ee ty8z7RcrVH93gbWv7VBUWpeUlXoW34vP7iKxJBvj5UTCSp2FWP304yhwJEgW/zYRICOkFelLSewBQxeIB9sh41sqNjChKFUiImWF6tXTsiGf62yZ0nq4P90nz8joISMvnMMY+jncJLTulQyjvJlPaD4GxGTdjp3zIuPTHgmN12qOe/qyyaqld6smgJFP+rVidK3YrgEPv2Z2Q2xNMF0bkYmtSk6nin66+Q/hIxTvNuF4TGM1xPo6J7D2KFtLblKOAnVFXFblt/nF5ceP8y8UQPpDfmKqaNWtubfPHnLFAYPWF+/927BaQzZ4coM83w1MnjIHLQmifKfowoN4= 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 d5dfb9186962..e6c0a6fff9f9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -12728,7 +12728,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..8cb12ebae57f --- /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 beba5ba0fd97..610f6af6daf4 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1815,7 +1815,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; @@ -1828,7 +1828,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; @@ -1847,7 +1847,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)