From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68D28C02192 for ; Wed, 5 Feb 2025 20:20:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ED0AA280017; Wed, 5 Feb 2025 15:20:14 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E597C280013; Wed, 5 Feb 2025 15:20:14 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CD2E3280017; Wed, 5 Feb 2025 15:20:14 -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 AC552280013 for ; Wed, 5 Feb 2025 15:20:14 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 5100C140AFB for ; Wed, 5 Feb 2025 20:20:14 +0000 (UTC) X-FDA: 83087007948.11.DD48917 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) by imf18.hostedemail.com (Postfix) with ESMTP id 4F6BA1C0016 for ; Wed, 5 Feb 2025 20:20:12 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=dabbelt-com.20230601.gappssmtp.com header.s=20230601 header.b=FoePkceF; spf=pass (imf18.hostedemail.com: domain of palmer@dabbelt.com designates 209.85.216.54 as permitted sender) smtp.mailfrom=palmer@dabbelt.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738786812; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:dkim-signature; bh=IX+Sh5T3PaL+QWEnl0hjKKEH7VOJE9BsDETeBZSLsC4=; b=Ga6bLYf64uIs4CjGI/cwY9SwiQuDvnWiqfywyESKe1/NdpJoNvq91QCygT4Zrs+q7TNGGT ruEgmtPaC2SNBTWfxm+D72hVd88rN5ySzRKtuntQmsAeRLAX+Kd28yvCQTKu5sgpeMgy4l 2uUZ9IvIjZnCD62WmMHq/ojZajTYl0s= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=dabbelt-com.20230601.gappssmtp.com header.s=20230601 header.b=FoePkceF; spf=pass (imf18.hostedemail.com: domain of palmer@dabbelt.com designates 209.85.216.54 as permitted sender) smtp.mailfrom=palmer@dabbelt.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738786812; a=rsa-sha256; cv=none; b=V/90+Amm3L0gFy9Pwq7I/toclcTKgqJhKO+knLyr46BpJdiQNPHGLRVVc7Ctytp3luZKwb kzK6OLfJ+fy0vLZ/wdyqZmqhrYZr4RU1b3BimmhdNWp1We4HX/ebcz7oEPdBhsDIHCQfxE DYu6aGwkTGaRk3i6JD+YVr6GA3qY5xg= Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-2f9f5caa37cso1099685a91.0 for ; Wed, 05 Feb 2025 12:20:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dabbelt-com.20230601.gappssmtp.com; s=20230601; t=1738786811; x=1739391611; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:to:from:cc :in-reply-to:subject:date:from:to:cc:subject:date:message-id :reply-to; bh=IX+Sh5T3PaL+QWEnl0hjKKEH7VOJE9BsDETeBZSLsC4=; b=FoePkceF3HmD04qbkOYIbQA6u7S6DV9ocXQxmirQgvX6tpXx21UY+eRMvW904UrIGx 3PNvJsBl0ctYHbsZ4PhPmqJvEsoUotZldUWrcpQ9iO/1DBWcEYq3p3cnwxd6EHRBT48c 2rlu3rPw2wwiLxzAkNaiueUXcxLTHoHp/0FOBwYernDEBTZUKunadB/NFrTzkw5YwQ/t wJAq+lrgSBy1TDWIbsdb9ussp/tyTm6ADgQXH3quG4E5WnK0iFrkqpM3O0oVdGvwIkvg shVgLaKXmiHus8ld5AMJxe5MDB1c+/mIBDYjd7OK0Q+Q51mUGXS2ggva+SqWD4rtaI6g UdPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738786811; x=1739391611; h=content-transfer-encoding:mime-version:message-id:to:from:cc :in-reply-to:subject:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=IX+Sh5T3PaL+QWEnl0hjKKEH7VOJE9BsDETeBZSLsC4=; b=SUtCUOsj2h6LwVvUEPe77qKMU3g+18cPzYzjhFurS9lWcMqkYA3DXte3IIa5QJ7h9v vqSze5ARbNEUIWCoH0o44ZLtmuA1mXtjjoN2cdbZ4cPKW6PqmHeVzB2qygcHkLlvxRXl f48u4t1yVZWHC6LIPejD8mUb/gzCHazjzilWRwV61mbujIpozjL8KCM74mRDquDNhzVx 13rbAjFZvJs5QeU0WM/AhXzD+0pC2hV9xck7TqybhE0Ic8XvszTpx9PLqSIkMeYxVbyu pKq9W4bPAo6c3wSHiZGaB7iDDI02Yj6iiJcg7XbfCUcHUVPP/+yMhfh9sU2YcAVu1Rty AXUA== X-Forwarded-Encrypted: i=1; AJvYcCV7FHLLiS1Y9HMprym4UVcIYyTh4AB0WI9d0ciC2Lhi/sl2g/qqmpap67HjI7KiNefHUjkKPVt3ag==@kvack.org X-Gm-Message-State: AOJu0YxcovGVqOV1x2HRnMzxZXiAIdqr0wWmD8Nx2/178241lUQ0gYa+ LEiZvle96JQmPVed+ZdQ3QWYJntEgzWxULpdwnwbdru+dqDkDlIMo2EylAi1Sv8= X-Gm-Gg: ASbGnctRfQrV92hxiSdYJjJplX8dAT9yrwcyMiLCLYcQav0JzLOKo2hZpIM9DYHdEqU x3eVXaWxO6PSbVo5yvF6TSxMQtkE1yzcLmiQGihzlQXMUuKrRrePW9GZvfs1HQcR9qU64Lx1u+N 5RemjAK5F7Qfegeknk76iP4sOCG4orWLuMJc0W20gnxzmJER5zQZpo/veax2BfIyEMMiNrOnihD jcNgA7TkMFWdvYGxpmLiyPDVFN35NCw20ApvAg/S2DSjbItGklsm6mPsaU5SCbQkCiKs8d9syn6 ukRE5w0lZsMP X-Google-Smtp-Source: AGHT+IEFjhGWBA15EiC5Nj97NLp62uuszO3tIVmMaUsJvfBeL6+xT+t6gGEWElptXMC2M0mhdTS+Lw== X-Received: by 2002:a17:90a:e7c8:b0:2f7:b149:538f with SMTP id 98e67ed59e1d1-2f9ff787646mr1078810a91.4.1738786810832; Wed, 05 Feb 2025 12:20:10 -0800 (PST) Received: from localhost ([192.184.165.199]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2f9e1d77b73sm2228736a91.12.2025.02.05.12.20.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Feb 2025 12:20:10 -0800 (PST) Date: Wed, 05 Feb 2025 12:20:10 -0800 (PST) X-Google-Original-Date: Wed, 05 Feb 2025 12:20:08 PST (-0800) Subject: Re: [PATCH 04/15] kasan: arm64: x86: risc-v: Make special tags arch specific In-Reply-To: CC: luto@kernel.org, xin@zytor.com, kirill.shutemov@linux.intel.com, tj@kernel.org, andreyknvl@gmail.com, brgerst@gmail.com, Ard Biesheuvel , dave.hansen@linux.intel.com, jgross@suse.com, Will Deacon , akpm@linux-foundation.org, Arnd Bergmann , corbet@lwn.net, maciej.wieczor-retman@intel.com, dvyukov@google.com, richard.weiyang@gmail.com, ytcoode@gmail.com, tglx@linutronix.de, hpa@zytor.com, seanjc@google.com, Paul Walmsley , aou@eecs.berkeley.edu, justinstitt@google.com, jason.andryuk@amd.com, glider@google.com, ubizjak@gmail.com, jannh@google.com, bhe@redhat.com, vincenzo.frascino@arm.com, rafael.j.wysocki@intel.com, ndesaulniers@google.com, mingo@redhat.com, Catalin Marinas , junichi.nomura@nec.com, nathan@kernel.org, ryabinin.a.a@gmail.com, dennis@kernel.org, bp@alien8.de, kevinloughlin@google.com, morbo@google.com, dan.j.williams@intel.com, julian.stecklina@cyberus-technology.de, peterz@infradead.org, cl@linux.com, kees@kernel.org, kasan-dev@googlegroups.com, x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, llvm@lists.linux.dev, linux-doc@vger.kernel.org From: Palmer Dabbelt To: maciej.wieczor-retman@intel.com Message-ID: Mime-Version: 1.0 (MHng) Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4F6BA1C0016 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: shqyuybewzkt7zj5atzy13m6p4r1yyaa X-HE-Tag: 1738786812-830983 X-HE-Meta: U2FsdGVkX1+JMS9Zzwhk5HIOe7MPv0U1ibCX9rnr4sXIYlw6ihAn9TmPJ0r1EAI4TjRgA1YuM2EqZuL7S83em6RrR+AwbDsTwBYtg7N857IhjGeOr2R23rG+bAGErbBg4ez4V2PEKP8LJ5zVcjCLbG4xf7a98DusYk1fucHiiYwvHgonZpI7dsEFR/VdzkXTvMYm6XVQG1chszeYaAQDz+oDL0DNySPtd0F3rd9+0d1IM1er6yhwF4yY524ujpVJ6Nk9lxOYS+fnk2rT9coA7eTpjacwB+iw1hL9ja8VXeMax+Kz1RrGXs5D7gSp1yOxMJlnwdOIoBcNsVkhAOvnv+Sdg+PYKTVRyfekiv+ealgrZp3Rqx6K4e0VOCJK6DAxNpNTytUFr72k1kYvAC2yI2TXhy4yPKuPHx0pHS8l6pCcLxatyeAEG+xrRKOkiql9pGQWOSro//tcZiNrpKRM8NnlNGU+MIjZOAm26/KciP48/+eXXf+1e+SIV8pKvUeWu8f+DFDKGuChFEx1qbwSBqjY0FebEtaDfj+Tjo4j0+4pnTtjTwL9jDBgGWUgqs8TNwrT8Hhgp9KHj1mjkYo2dweR4SBAxBzXegzkj+m/sDA3NRDitQSmU7aZibhXMNaze9mTcEanZX6AdfPpL6r05jShELzy6vygGKk1MHEu/c/YcL8yr/0Io78D/DPc5LXOyEFC6ypMCfDHEuzLd7cNNuDWO8w/UVDAzEW9QLg5c02mqqx1QwLYdcbSUATFveYgEC4mQPEfWr4ahlHBzwP6RqirEPcxIJKB+0WQ4sw5iTc3rVVTftonQCAaY2bK0+PtwoxQoxhpDeVDG/VX1xfCklGXBooLgN7a+lJgouY7HsYezkbwx8XJC/4O4vxkk103CstrvDnHxn+YK8xhy4l37UTXXZ8vUXMKqfxvCAiNQNZ1icO9wBGPbR22VdMdHYAIPoIvzNSm4uRNn9YLztI Esw+Ia7g 4EJAKmCC1w1Img13KWhfWHdihzq3xVxns5uJWnLSqFy3U4Ph4bnrBsTniIBUWrn1NoDQNp8O3mzdjWAcxqx2fpbdiAOE9zvaWp/zhpzzkwLzuOipFpBm1MXd5dvtXKFXG6d1NQHzwbHE1mn25bOI/Xdy5xJWTHZymBh7LsNewnuQ1d9LRy0FpKakMBh1RmzNaBJaJ16pgs6VmDJY8NYei9NsWSshbwCjPPS9E7LxIuHFEFQhWa3yJAtau1oaWuoieEC4CKUhV5GR5ewa7HCsdmkhDsDGxIx9lWaLNayvZOmKSW/hFJIUiTycY8tGsO0prQEw5lWDS4qawi0FXMnCB8FyQ15MbaBZcDowEAl60LmJGtdrOmvoRbwSWAXsnyqu8MfiX32I558TmKo5xMZ00+BzHGSf75qNNdHWJEQ8pQe8+1WDWOolmq1JIoKWn3OkPpdtqiWE9v1sC/dyPQOBfonZHhsFvxGCXcPwKt4FX5uFP7iocFSTXl/wlAyX7jw5f64XuJmovAEsAha4FjTgXx1OoIzAOOCghXiaFNrV4RcvDS6YEz9Kime7/r/2lX8g9VyjFt5GwJalqFd4e8y5W/fWQkdfolO7UAzGHjckf1ZcoGt+uggsrpbb/z62ukbQbUMfq3Qt5fakJ9jhEYUfdYktLBDQlKTPcPbC0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, 04 Feb 2025 09:33:45 PST (-0800), maciej.wieczor-retman@intel.com wrote: > 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 tags arch specific for x86, risc-v and arm64. On x86 the values > just lose the top 4 bits. > > Replace hardcoded kernel tag value and tag width with macros in KASAN's > non-arch specific code. > > Signed-off-by: Maciej Wieczor-Retman > --- > MAINTAINERS | 2 +- > arch/arm64/include/asm/kasan-tags.h | 9 +++++++++ > arch/riscv/include/asm/kasan-tags.h | 12 ++++++++++++ > arch/riscv/include/asm/kasan.h | 4 ---- > arch/x86/include/asm/kasan-tags.h | 9 +++++++++ > include/linux/kasan-tags.h | 12 +++++++++++- > include/linux/kasan.h | 4 +++- > include/linux/mm.h | 6 +++--- > include/linux/page-flags-layout.h | 7 +------ > 9 files changed, 49 insertions(+), 16 deletions(-) > create mode 100644 arch/arm64/include/asm/kasan-tags.h > create mode 100644 arch/riscv/include/asm/kasan-tags.h > create mode 100644 arch/x86/include/asm/kasan-tags.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index b878ddc99f94..45671faa3b6f 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -12227,7 +12227,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/riscv/include/asm/kasan-tags.h b/arch/riscv/include/asm/kasan-tags.h > new file mode 100644 > index 000000000000..83d7dcc8af74 > --- /dev/null > +++ b/arch/riscv/include/asm/kasan-tags.h > @@ -0,0 +1,12 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef __ASM_KASAN_TAGS_H > +#define __ASM_KASAN_TAGS_H > + > +#ifdef CONFIG_KASAN_SW_TAGS > +#define KASAN_TAG_KERNEL 0x7f /* native kernel pointers tag */ > +#endif > + > +#define KASAN_TAG_WIDTH 8 > + > +#endif /* ASM_KASAN_TAGS_H */ > + > diff --git a/arch/riscv/include/asm/kasan.h b/arch/riscv/include/asm/kasan.h > index f6b378ba936d..27938e0d5233 100644 > --- a/arch/riscv/include/asm/kasan.h > +++ b/arch/riscv/include/asm/kasan.h > @@ -41,10 +41,6 @@ > > #define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) > > -#ifdef CONFIG_KASAN_SW_TAGS > -#define KASAN_TAG_KERNEL 0x7f /* native kernel pointers tag */ > -#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/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..b4aacfa8709b 100644 > --- a/include/linux/kasan-tags.h > +++ b/include/linux/kasan-tags.h > @@ -2,7 +2,17 @@ > #ifndef _LINUX_KASAN_TAGS_H > #define _LINUX_KASAN_TAGS_H > > -#include > +#if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS) > +#include > +#endif > + > +#ifdef CONFIG_KASAN_SW_TAGS_DENSE > +#define KASAN_TAG_WIDTH 4 > +#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 5a3e9bec21c2..83146367170a 100644 > --- a/include/linux/kasan.h > +++ b/include/linux/kasan.h > @@ -88,7 +88,9 @@ static inline u8 kasan_get_shadow_tag(const void *addr) > > #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 61fff5d34ed5..ddca2f63a5f6 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -1813,7 +1813,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; > @@ -1826,7 +1826,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; > @@ -1845,7 +1845,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 7d79818dc065..ac3576f409ad 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) Acked-by: Palmer Dabbelt # RISC-V Probably best to keep this along with the rest of the patches, but LMK if you want me to point something at the RISC-V tree.