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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 69AADC6FA82 for ; Thu, 8 Sep 2022 10:38:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Wgvc/YyzOpXLBltRitBn6ExKiSLoSwOMwMjHTPaiVCI=; b=tnBlwma78vl/TN CBpq8KXwDru21nFcGJpbTnCFztjVdYjzeqJMabgzJPcZSjmTcM8FzfDbZvkYRcymQlQNxO4f8CFR/ m9l+OUYb7MV1kEQddLV7cGu8eIwhbbENFIYd32S5Evm2j0tEWMm7WMC6qECaJVAi3A6fRq94i9Sd+ yd5c9Y5sy6/VBLK7DpaEJscjSZn7UtcwSci5W258r8pKW/koLrwWQb9y1xaYDd9WlI06HRFA0FlLD 6DU8XrA1V/ncUg37cRP5crepREocWf9VBg/AY5gAzaryyhkTF2xGBHwMrP23Bs37xA7h5fKEMOeM2 fmfexGcMPnjCve2b55wA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oWEu5-002MHC-BA; Thu, 08 Sep 2022 10:37:01 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oWEu1-002MFX-7T for linux-arm-kernel@lists.infradead.org; Thu, 08 Sep 2022 10:36:59 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 29A1314BF; Thu, 8 Sep 2022 03:37:00 -0700 (PDT) Received: from [10.1.27.146] (e121487-lin.cambridge.arm.com [10.1.27.146]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8B71C3F71A; Thu, 8 Sep 2022 03:36:52 -0700 (PDT) Message-ID: <198b1486-d402-9061-a6f0-e522a548f040@arm.com> Date: Thu, 8 Sep 2022 11:36:42 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v2] mte: Initialize tag storage to KASAN_TAG_INVALID Content-Language: en-US To: Vincenzo Frascino , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com Cc: Catalin Marinas , Will Deacon References: <20220907110015.11489-1-vincenzo.frascino@arm.com> From: Vladimir Murzin In-Reply-To: <20220907110015.11489-1-vincenzo.frascino@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220908_033657_412453_D7076819 X-CRM114-Status: GOOD ( 27.17 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Vincenzo, On 9/7/22 12:00, Vincenzo Frascino wrote: > When the kernel is entered on aarch64, the MTE allocation tags are in an > UNKNOWN state. > > With MTE enabled, the tags are initialized: > - When a page is allocated and the user maps it with PROT_MTE. > - On allocation, with in-kernel MTE enabled (HW_TAGS KASAN). > > If the tag pool is zeroed by the hardware at reset, it makes it > difficult to track potential places where the initialization of the > tags was missed. > > This can be observed under QEMU for aarch64, which initializes the MTE > allocation tags to zero. > > Initialize to tag storage to KASAN_TAG_INVALID to catch potential > places where the initialization of the tags was missed. > > This is done introducing a new kernel command line parameter > "mte.tags_init" that enables the debug option. > > Note: The proposed solution should be considered a debug option because > it might have performance impact on large machines at boot. > > Cc: Catalin Marinas > Cc: Will Deacon > Signed-off-by: Vincenzo Frascino > --- > arch/arm64/kernel/mte.c | 47 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 47 insertions(+) Nothing in Documentation/ ? > > diff --git a/arch/arm64/kernel/mte.c b/arch/arm64/kernel/mte.c > index b2b730233274..af9a8eba9be4 100644 > --- a/arch/arm64/kernel/mte.c > +++ b/arch/arm64/kernel/mte.c > @@ -6,6 +6,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -35,6 +36,8 @@ DEFINE_STATIC_KEY_FALSE(mte_async_or_asymm_mode); > EXPORT_SYMBOL_GPL(mte_async_or_asymm_mode); > #endif > > +static bool mte_tags_init __ro_after_init; > + > static void mte_sync_page_tags(struct page *page, pte_t old_pte, > bool check_swap, bool pte_is_tagged) > { > @@ -98,6 +101,48 @@ int memcmp_pages(struct page *page1, struct page *page2) > return ret; > } > > +/* mte.tags_init=off/on */ > +static int __init early_mte_tags_init(char *arg) > +{ > + if (!arg) > + return -EINVAL; > + > + if (!strcmp(arg, "off")) > + mte_tags_init = false; > + else if (!strcmp(arg, "on")) > + mte_tags_init = true; > + else > + return -EINVAL; > + You might want to offload parsing to kstrtobool() > + return 0; > +} > +early_param("mte.tags_init", early_mte_tags_init); > + > +static inline void __mte_tag_storage_init(void) > +{ > + static bool mte_tags_uninitialized = true; > + phys_addr_t pa_start, pa_end; > + u64 index; > + > + if (mte_tags_init && !mte_tags_uninitialized) > + return; > + > + for_each_mem_range(index, &pa_start, &pa_end) { > + void *va_start = (void *)__phys_to_virt(pa_start); > + void *va_end = (void *)__phys_to_virt(pa_end); > + size_t va_size = (u64)va_end - (u64)va_start; > + > + if (va_start >= va_end) > + break; > + > + mte_set_mem_tag_range(va_start, va_size, KASAN_TAG_INVALID, false); > + } > + > + /* Tags are now initialized to KASAN_TAG_INVALID */ > + mte_tags_uninitialized = false; > + pr_info("MTE: Tag Storage Initialized\n"); Why All Words Start With Capital Letter? :D Anyway, you might want to advertise tag value used for initialization. > +} > + > static inline void __mte_enable_kernel(const char *mode, unsigned long tcf) > { > /* Enable MTE Sync Mode for EL1. */ > @@ -105,6 +150,8 @@ static inline void __mte_enable_kernel(const char *mode, unsigned long tcf) > SYS_FIELD_PREP(SCTLR_EL1, TCF, tcf)); > isb(); > > + __mte_tag_storage_init(); > + > pr_info_once("MTE: enabled in %s mode at EL1\n", mode); > } > Cheers Vladimir _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel