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 83593C36010 for ; Fri, 4 Apr 2025 18:08:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 34FFF6B0010; Fri, 4 Apr 2025 14:08:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2FB3C6B0011; Fri, 4 Apr 2025 14:08:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 14F386B0012; Fri, 4 Apr 2025 14:08:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id E90116B0010 for ; Fri, 4 Apr 2025 14:08:21 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 50C7AB873D for ; Fri, 4 Apr 2025 18:08:22 +0000 (UTC) X-FDA: 83297146044.11.346E52A Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by imf12.hostedemail.com (Postfix) with ESMTP id E8DCC4000F for ; Fri, 4 Apr 2025 18:08:19 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=jLmSVK0m; spf=pass (imf12.hostedemail.com: domain of dave.hansen@intel.com designates 192.198.163.9 as permitted sender) smtp.mailfrom=dave.hansen@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=1743790100; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=yZYN6o5SIJaGPv7DJ8ETcSf2nZqQH2nOo4BGLBOH/SY=; b=uBn2LoQlATevWofp/LRLp3DUMWJNvluBPI9DTFSY2/txs2qAFlnxJubGA7fxeWStBzQDn5 CMjeifwGQRBGXjYMUSN9ahkZNeLXKgPRdp1l4U05bbCZVXUrw4RpJ2kl12ZvAvo5pdIBbv 4SRpT6bK16cz0zVJeO1GEhSmKCv7CQ8= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=jLmSVK0m; spf=pass (imf12.hostedemail.com: domain of dave.hansen@intel.com designates 192.198.163.9 as permitted sender) smtp.mailfrom=dave.hansen@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743790100; a=rsa-sha256; cv=none; b=DRwxJCOMi1MVIT9x9DkKvJ/+DMpkfDGJGKGyzb9678z16OjvX2KYB2s9wgQj/j49ZqoehK g+UG7WQuR+FDwH9BdGg8wDFBwHN3u5W9eBNvN7zFU8Mcj1pzt4D7jmrtMGHnXmOr0Z0FtD 5sWgzUkwIJDTtIEl8wcwhfsnAd+W2MU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1743790100; x=1775326100; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=6cHkeL6FETpmpby8P+Sxg8uzoqLOjkiDsJMX9VjwYsE=; b=jLmSVK0mn0Cams6JBU9m7gcD/jMx9HYetIX0DQyW5YgDP2NenAaoNBt6 vToNxWyjcPTtMCSQqY1CqzIU7NJV6d6GzbNRviexXdWn9WvlFjJmBNebo U1JYLVw2wiSl8eW/HAkQ8bmK5U+8DITmCpt9M0/EkFvFo0F4ebOO3afdt H2bu1MAsYjgiRTtL9rRUSsbGlJXjWqaUHYT0Rj90SyOfT3bqoI3Lebirn VSzybuz4X9P4R8GRZfceIMxC635c5du2DkQoTJp+5vYDtpTZ/V+dIOHly MbMUfvUvmq93u77ifoopyrHWCzgwdKqbEpwEkFCrQhtKoiD5j8nrVrAOr w==; X-CSE-ConnectionGUID: RVrOrd+nQV++AQ+rk3Frog== X-CSE-MsgGUID: TN8TbERCT4yFCWWxKsiOKA== X-IronPort-AV: E=McAfee;i="6700,10204,11394"; a="55871745" X-IronPort-AV: E=Sophos;i="6.15,189,1739865600"; d="scan'208";a="55871745" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Apr 2025 11:08:18 -0700 X-CSE-ConnectionGUID: 2p8hjetBSImgAuDysM4x7Q== X-CSE-MsgGUID: RysEYU0yQnqd7KpAb9OCrg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,189,1739865600"; d="scan'208";a="158354509" Received: from daliomra-mobl3.amr.corp.intel.com (HELO [10.124.223.29]) ([10.124.223.29]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Apr 2025 11:08:14 -0700 Message-ID: Date: Fri, 4 Apr 2025 11:08:12 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 13/14] mm: Unpoison pcpu chunks with base address tag To: Maciej Wieczor-Retman , 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, 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 References: <61033ef5b70277039ceeb8f6173e8b3fbc271c08.1743772053.git.maciej.wieczor-retman@intel.com> From: Dave Hansen Content-Language: en-US Autocrypt: addr=dave.hansen@intel.com; keydata= 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 In-Reply-To: <61033ef5b70277039ceeb8f6173e8b3fbc271c08.1743772053.git.maciej.wieczor-retman@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: E8DCC4000F X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: yd6539niimtk55ow5ihadtishynhe67j X-HE-Tag: 1743790099-887100 X-HE-Meta: U2FsdGVkX1+hpL7BY7y4GjwG7o0mSXYH8D9bcjYutiDhbK54zFpnc66we2d+OOkXAPnFyehbohVBaqRNJXzMy7f/rrgfn0sAClEd0DMGK4bf7fzc49WiZGrlGBskgB1rCFQi6nDgtFyy2ZeJqCcDq0q5ttzdjkQCtGPsK8Zim836lgivlUFoGjRkoWUPe7/nhWUXg5VZMeDwofhKrY5T3xA/KveB9KIkZE8euk143EQyN2QoVxbRneAZPMFu7q3k0Ct2HOCWTFxVk6/6zZF4XEhcHVUGpGE6dJhxzX5BGyX8EAaqI0qqbRVRrfOcS244uJBKpdxfXNeIs+K0QxNNq4GXIo+GOt3MLDZBzn++oj75AZ9NY2rsNX+k7nNuyCqSk1gJd5moiji7Fk2hQl8rfHYPcpFi6TEkdjorA4mSbwC0r/fmPmypxlTSf6qr9vXaLOa3q0AEVv38kG/Yg5+6ZS6AXSKg+D/Ne1Ph8b5al9RpOlb2irfraeJMRNNp6S3xXHgwUgkMnDLz60UJX5yX1iUb/caz3oEvljA+hgoxlZyN5E2u5OM9Ve5wWByNGVEsF+t0ioYVM2YRDqouUOQuU/+Rni9dHr/Db0gGaMMZPoXcd6wjxdA9hooqo3jTmmmS2t4ep+F/tfCQ+gvX4f1okPZMd41t+BMFNDlo3MJVYSsF+V9TplO3S0skZ5tuwLx06y3UELiDDzgspCMwJGCAkWHClk9RA8DyLHVQnioskEo4qYVM0CVEIsl7aN7eDRbEHcJ7N7m1lo4Ucd0NJO13t9NBmK/y6+xrYAeMf3vcNVTN2brfbzBsYMA9CWUZzW44c1E9CM6nnIgLgMPxrK+R/P6gLaqPURul4131gwxIQgxEFRZsZf0hVSRHmouuJtQ+XGJo+8t12h7J32ZNsLB5vAHqtmP7q/1MRT97NX6u9se3NR77r/J1L5jeiBeLfUgsm1C1odh+39VxFmP6j0m U5stmuDs GiO/POxcuf41AWUx0LTmc46tHBwsRICRcrFSDdzvdPpcSvWpHiBJfSokBpmY1YRoPWJBbrbgIv3XQWXZL9oXcoGQWeZkRgCPrTRuSnr52OsxupmGHwUCu46A7rignhfrIvxK+3LRzTAKFRpDr/V0zrbgl7LwaZfz9/XYUKgQkayzeeXdueBqro54keKZCtwdeghQp351PXFrfGuUDE9sAMyVhYDc1CXtYOicTAfE0Hjdgve+5Z7AC0xd7QEwkvY3n4YOTPn2r6l87CsUnnZLm5BCMmA== 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 4/4/25 06:14, Maciej Wieczor-Retman wrote: > 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. > > Unpoison all the vms[]->addr with the same tag to resolve the mismatch. I think there's a bit too much superfluous information in there. For instance, it's not important to talk about how or why there can be more than one chunk, just say there _can_ be more than one. 1. There can be more than one chunk 2. The chunks are virtually contiguous 3. Since they are virtually contiguous, the chunks are all addressed from a single base address 4. The base address has a tag 5. The base address points at the first chunk and thus inherits the tag of the first chunk 6. The subsequent chunks will be accessed with the tag from the first chunk 7. Thus, the subsequent chunks need to have their tag set to match that of the first chunk. Right? > diff --git a/include/linux/kasan.h b/include/linux/kasan.h > index 54481f8c30c5..bd033b2ba383 100644 > --- a/include/linux/kasan.h > +++ b/include/linux/kasan.h > @@ -613,6 +613,13 @@ static __always_inline void kasan_poison_vmalloc(const void *start, > __kasan_poison_vmalloc(start, size); > } > > +void __kasan_unpoison_vmap_areas(struct vm_struct **vms, int nr_vms); > +static __always_inline void kasan_unpoison_vmap_areas(struct vm_struct **vms, int nr_vms) > +{ > + if (kasan_enabled()) > + __kasan_unpoison_vmap_areas(vms, nr_vms); > +} > + > #else /* CONFIG_KASAN_VMALLOC */ > > static inline void kasan_populate_early_vm_area_shadow(void *start, > @@ -637,6 +644,9 @@ static inline void *kasan_unpoison_vmalloc(const void *start, > static inline void kasan_poison_vmalloc(const void *start, unsigned long size) > { } > > +static inline void kasan_unpoison_vmap_areas(struct vm_struct **vms, int nr_vms) > +{ } > + > #endif /* CONFIG_KASAN_VMALLOC */ > > #if (defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)) && \ > diff --git a/mm/kasan/shadow.c b/mm/kasan/shadow.c > index 88d1c9dcb507..9496f256bc0f 100644 > --- a/mm/kasan/shadow.c > +++ b/mm/kasan/shadow.c > @@ -582,6 +582,17 @@ void __kasan_poison_vmalloc(const void *start, unsigned long size) > kasan_poison(start, size, KASAN_VMALLOC_INVALID, false); > } > > +void __kasan_unpoison_vmap_areas(struct vm_struct **vms, int nr_vms) > +{ > + int area; > + > + for (area = 0 ; area < nr_vms ; area++) { > + kasan_poison(vms[area]->addr, vms[area]->size, > + arch_kasan_get_tag(vms[0]->addr), false); > + arch_kasan_set_tag(vms[area]->addr, arch_kasan_get_tag(vms[0]->addr)); > + } > +} -ENOCOMMENTS > #else /* CONFIG_KASAN_VMALLOC */ > > int kasan_alloc_module_shadow(void *addr, size_t size, gfp_t gfp_mask) > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 61981ee1c9d2..fbd56bf8aeb2 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -4783,8 +4783,7 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, > * non-VM_ALLOC mappings, see __kasan_unpoison_vmalloc(). > */ > for (area = 0; area < nr_vms; area++) > - vms[area]->addr = kasan_unpoison_vmalloc(vms[area]->addr, > - vms[area]->size, KASAN_VMALLOC_PROT_NORMAL); > + kasan_unpoison_vmap_areas(vms, nr_vms); > > kfree(vas); > return vms; So, the right way to do this is refactor, first, then add your changes after. This really wants to be two patches.