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 X-Spam-Level: X-Spam-Status: No, score=-15.5 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2ECFFC433DB for ; Thu, 7 Jan 2021 17:26:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EDE38233CE for ; Thu, 7 Jan 2021 17:26:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728999AbhAGR0d (ORCPT ); Thu, 7 Jan 2021 12:26:33 -0500 Received: from foss.arm.com ([217.140.110.172]:36504 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728674AbhAGR0d (ORCPT ); Thu, 7 Jan 2021 12:26:33 -0500 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 1A85B31B; Thu, 7 Jan 2021 09:25:47 -0800 (PST) Received: from [10.37.8.33] (unknown [10.37.8.33]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6166C3F719; Thu, 7 Jan 2021 09:25:44 -0800 (PST) Subject: Re: [PATCH 2/4] arm64: mte: Add asynchronous mode support To: Andrey Konovalov Cc: Linux ARM , LKML , kasan-dev , Catalin Marinas , Will Deacon , Dmitry Vyukov , Andrey Ryabinin , Alexander Potapenko , Marco Elver , Evgenii Stepanov , Branislav Rankov References: <20210106115519.32222-1-vincenzo.frascino@arm.com> <20210106115519.32222-3-vincenzo.frascino@arm.com> From: Vincenzo Frascino Message-ID: Date: Thu, 7 Jan 2021 17:29:24 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Andrey, On 1/7/21 4:29 PM, Andrey Konovalov wrote: > On Wed, Jan 6, 2021 at 12:56 PM Vincenzo Frascino > wrote: >> >> MTE provides an asynchronous mode for detecting tag exceptions. In >> particular instead of triggering a fault the arm64 core updates a >> register which is checked by the kernel at the first entry after the tag >> exception has occurred. >> >> Add support for MTE asynchronous mode. >> >> The exception handling mechanism will be added with a future patch. >> >> Note: KASAN HW activates async mode via kasan.mode kernel parameter. >> The default mode is set to synchronous. >> >> Cc: Catalin Marinas >> Cc: Will Deacon >> Signed-off-by: Vincenzo Frascino >> --- >> arch/arm64/kernel/mte.c | 31 +++++++++++++++++++++++++++++-- >> 1 file changed, 29 insertions(+), 2 deletions(-) >> >> diff --git a/arch/arm64/kernel/mte.c b/arch/arm64/kernel/mte.c >> index 24a273d47df1..5d992e16b420 100644 >> --- a/arch/arm64/kernel/mte.c >> +++ b/arch/arm64/kernel/mte.c >> @@ -153,8 +153,35 @@ void mte_init_tags(u64 max_tag) >> >> void mte_enable_kernel(enum kasan_arg_mode mode) >> { >> - /* Enable MTE Sync Mode for EL1. */ >> - sysreg_clear_set(sctlr_el1, SCTLR_ELx_TCF_MASK, SCTLR_ELx_TCF_SYNC); >> + const char *m; >> + >> + /* Preset parameter values based on the mode. */ >> + switch (mode) { >> + case KASAN_ARG_MODE_OFF: >> + return; >> + case KASAN_ARG_MODE_LIGHT: >> + /* Enable MTE Async Mode for EL1. */ >> + sysreg_clear_set(sctlr_el1, SCTLR_ELx_TCF_MASK, SCTLR_ELx_TCF_ASYNC); >> + m = "asynchronous"; >> + break; >> + case KASAN_ARG_MODE_DEFAULT: >> + case KASAN_ARG_MODE_PROD: >> + case KASAN_ARG_MODE_FULL: >> + /* Enable MTE Sync Mode for EL1. */ >> + sysreg_clear_set(sctlr_el1, SCTLR_ELx_TCF_MASK, SCTLR_ELx_TCF_SYNC); >> + m = "synchronous"; >> + break; >> + default: >> + /* >> + * kasan mode should be always set hence we should >> + * not reach this condition. >> + */ >> + WARN_ON_ONCE(1); >> + return; >> + } >> + >> + pr_info_once("MTE: enabled in %s mode at EL1\n", m); >> + >> isb(); >> } >> >> -- >> 2.29.2 >> > > Hi Vincenzo, > > It would be cleaner to pass a bool to mte_enable_kernel() and have it > indicate sync/async mode. This way you don't have to pull all these > KASAN constants into the arm64 code. > Boolean arguments are generally bad for legibility, hence I tend to avoid them. In this case exposing the constants does not seem a big issue especially because the only user of this code is "KASAN_HW_TAGS" and definitely improves its legibility hence I would prefer to keep it as is. > Thanks! > -- Regards, Vincenzo