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=-23.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_IN_DEF_DKIM_WL autolearn=unavailable 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 34F75C433E6 for ; Fri, 22 Jan 2021 14:38:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0856F239EF for ; Fri, 22 Jan 2021 14:38:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728889AbhAVOiO (ORCPT ); Fri, 22 Jan 2021 09:38:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728658AbhAVOhD (ORCPT ); Fri, 22 Jan 2021 09:37:03 -0500 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69A2DC06178B for ; Fri, 22 Jan 2021 06:36:23 -0800 (PST) Received: by mail-pj1-x1035.google.com with SMTP id kx7so3778804pjb.2 for ; Fri, 22 Jan 2021 06:36:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=T4ndQifpB6vRYXO2w5aSIQgzTLZUsKUzNWBDOARv8pU=; b=s1JMK3gv2GQtNAS32P5zWmfle4NytnQV8g2REiMBp/MheT/zck6MOykUghCYl1zqjj Hj8LSwp400GJuC4t3YF+Jll4CfhlMnzo+74wRmJ5tooJfUHelvDEmkG2fmrvtuvXy2dO kND61YjndMCz5z3C0/iKkUvZpqMfFKsgLXNlgrenmj59MGeiWAfj751isWv1vw89Xn15 dJIvTHAwol/5CFRldQq2tJNv6gnKDL0JY3LIAjlsCxPDOlI0QsG01OzTwLXJPBhkrHoM tb5GWQcqLIHbtKKm7dphbQPE+33KOg08DRnm9DInFld88msCsqJD96JNyNGu39xKnhaX plHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=T4ndQifpB6vRYXO2w5aSIQgzTLZUsKUzNWBDOARv8pU=; b=H60HgjjK+gNEsLkBG5w6bDHS/edMBHFHi8V6awy1fYgbve44GPwpIBLQ+yBdSUDeTY XSxV6d7ClpKB9AL/t/M+77P4u0LMdMNFPtuySEzANJHMMzxT17stxlhK5MJh4CbKN5LA FXw/WaqZteppu/qgVfSqTbcFlfluxIR4sselzzHkOYWhF4T467RXCfBwg3V9JxilWQYl zr9i46BYDzW3gvuYCdShl15kV0jReF/P9Jw8br4h8dg0PGQAwUYpkxwBRuxtqqLh3NJF bROHYGz4Cpynv8mUrIoBLCnqZjKk/gJo01l8FurEME9YRZWO7m6QsNaLM48j1szhSMT4 8IkQ== X-Gm-Message-State: AOAM5326ky4UvUjmoF5iNzntMZVs1aWsrKVsPtf44OB5mpD2XlBQulHB DsqGSeyR45SZ0AIJJCfXqqaktAU3jFWEDT8GsLUxbeLnthQj/g== X-Google-Smtp-Source: ABdhPJxvIfUBZnUqb/DU5Y4C0S1Eul97b0Eg9Qg1qgUdFtPS1m+ucavQvS+aaBp8VDbflPPB7Vurih1L618A54rbZQk= X-Received: by 2002:a17:90b:350b:: with SMTP id ls11mr5726685pjb.166.1611326182815; Fri, 22 Jan 2021 06:36:22 -0800 (PST) MIME-Version: 1.0 References: <20210122141125.36166-1-vincenzo.frascino@arm.com> <20210122141125.36166-3-vincenzo.frascino@arm.com> In-Reply-To: <20210122141125.36166-3-vincenzo.frascino@arm.com> From: Andrey Konovalov Date: Fri, 22 Jan 2021 15:36:11 +0100 Message-ID: Subject: Re: [PATCH v7 2/4] kasan: Add KASAN mode kernel parameter To: Vincenzo Frascino Cc: Linux ARM , LKML , kasan-dev , Catalin Marinas , Will Deacon , Dmitry Vyukov , Andrey Ryabinin , Alexander Potapenko , Marco Elver , Evgenii Stepanov , Branislav Rankov Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jan 22, 2021 at 3:11 PM Vincenzo Frascino wrote: > > Architectures supported by KASAN_HW_TAGS can provide a sync or async mode > of execution. On an MTE enabled arm64 hw for example this can be identified > with the synchronous or asynchronous tagging mode of execution. > In synchronous mode, an exception is triggered if a tag check fault occurs. > In asynchronous mode, if a tag check fault occurs, the TFSR_EL1 register is > updated asynchronously. The kernel checks the corresponding bits > periodically. > > KASAN requires a specific kernel command line parameter to make use of this > hw features. > > Add KASAN HW execution mode kernel command line parameter. > > Note: This patch adds the kasan.mode kernel parameter and the > sync/async kernel command line options to enable the described features. > > Cc: Dmitry Vyukov > Cc: Andrey Ryabinin > Cc: Alexander Potapenko > Cc: Andrey Konovalov > Signed-off-by: Vincenzo Frascino > --- > Documentation/dev-tools/kasan.rst | 9 +++++++++ > lib/test_kasan.c | 2 +- > mm/kasan/hw_tags.c | 32 ++++++++++++++++++++++++++++++- > mm/kasan/kasan.h | 6 ++++-- > 4 files changed, 45 insertions(+), 4 deletions(-) > > diff --git a/Documentation/dev-tools/kasan.rst b/Documentation/dev-tools/kasan.rst > index e022b7506e37..e3dca4d1f2a7 100644 > --- a/Documentation/dev-tools/kasan.rst > +++ b/Documentation/dev-tools/kasan.rst > @@ -161,6 +161,15 @@ particular KASAN features. > > - ``kasan=off`` or ``=on`` controls whether KASAN is enabled (default: ``on``). > > +- ``kasan.mode=sync`` or ``=async`` controls whether KASAN is configured in > + synchronous or asynchronous mode of execution (default: ``sync``). > + Synchronous mode: a bad access is detected immediately when a tag > + check fault occurs. > + Asynchronous mode: a bad access detection is delayed. When a tag check > + fault occurs, the information is stored in hardware (in the TFSR_EL1 > + register for arm64). The kernel periodically checks the hardware and > + only reports tag faults during these checks. > + > - ``kasan.stacktrace=off`` or ``=on`` disables or enables alloc and free stack > traces collection (default: ``on`` for ``CONFIG_DEBUG_KERNEL=y``, otherwise > ``off``). > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > index d16ec9e66806..7285dcf9fcc1 100644 > --- a/lib/test_kasan.c > +++ b/lib/test_kasan.c > @@ -97,7 +97,7 @@ static void kasan_test_exit(struct kunit *test) > READ_ONCE(fail_data.report_found)); \ > if (IS_ENABLED(CONFIG_KASAN_HW_TAGS)) { \ > if (READ_ONCE(fail_data.report_found)) \ > - hw_enable_tagging(); \ > + hw_enable_tagging_sync(); \ > migrate_enable(); \ > } \ > } while (0) > diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c > index e529428e7a11..308a879a3798 100644 > --- a/mm/kasan/hw_tags.c > +++ b/mm/kasan/hw_tags.c > @@ -25,6 +25,12 @@ enum kasan_arg { > KASAN_ARG_ON, > }; > > +enum kasan_arg_mode { > + KASAN_ARG_MODE_DEFAULT, > + KASAN_ARG_MODE_SYNC, > + KASAN_ARG_MODE_ASYNC, > +}; > + > enum kasan_arg_stacktrace { > KASAN_ARG_STACKTRACE_DEFAULT, > KASAN_ARG_STACKTRACE_OFF, > @@ -38,6 +44,7 @@ enum kasan_arg_fault { > }; > > static enum kasan_arg kasan_arg __ro_after_init; > +static enum kasan_arg_mode kasan_arg_mode __ro_after_init; > static enum kasan_arg_stacktrace kasan_arg_stacktrace __ro_after_init; > static enum kasan_arg_fault kasan_arg_fault __ro_after_init; > > @@ -68,6 +75,21 @@ static int __init early_kasan_flag(char *arg) > } > early_param("kasan", early_kasan_flag); > > +/* kasan.mode=sync/async */ > +static int __init early_kasan_mode(char *arg) > +{ > + /* If arg is not set the default mode is sync */ > + if ((!arg) || !strcmp(arg, "sync")) > + kasan_arg_mode = KASAN_ARG_MODE_SYNC; > + else if (!strcmp(arg, "async")) > + kasan_arg_mode = KASAN_ARG_MODE_ASYNC; > + else > + return -EINVAL; > + > + return 0; > +} > +early_param("kasan.mode", early_kasan_mode); > + > /* kasan.stacktrace=off/on */ > static int __init early_kasan_flag_stacktrace(char *arg) > { > @@ -115,7 +137,15 @@ void kasan_init_hw_tags_cpu(void) > return; > > hw_init_tags(KASAN_TAG_MAX); > - hw_enable_tagging(); > + > + /* > + * Enable async mode only when explicitly requested through > + * the command line. > + */ > + if (kasan_arg_mode == KASAN_ARG_MODE_ASYNC) > + hw_enable_tagging_async(); > + else > + hw_enable_tagging_sync(); > } > > /* kasan_init_hw_tags() is called once on boot CPU. */ > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > index 07ef7fc742ad..3923d9744105 100644 > --- a/mm/kasan/kasan.h > +++ b/mm/kasan/kasan.h > @@ -294,7 +294,8 @@ static inline const void *arch_kasan_set_tag(const void *addr, u8 tag) > #define arch_set_mem_tag_range(addr, size, tag) ((void *)(addr)) > #endif > > -#define hw_enable_tagging() arch_enable_tagging() > +#define hw_enable_tagging_sync() arch_enable_tagging_sync() > +#define hw_enable_tagging_async() arch_enable_tagging_async() > #define hw_init_tags(max_tag) arch_init_tags(max_tag) > #define hw_set_tagging_report_once(state) arch_set_tagging_report_once(state) > #define hw_get_random_tag() arch_get_random_tag() > @@ -303,7 +304,8 @@ static inline const void *arch_kasan_set_tag(const void *addr, u8 tag) > > #else /* CONFIG_KASAN_HW_TAGS */ > > -#define hw_enable_tagging() > +#define hw_enable_tagging_sync() > +#define hw_enable_tagging_async() > #define hw_set_tagging_report_once(state) > > #endif /* CONFIG_KASAN_HW_TAGS */ > -- > 2.30.0 > Reviewed-by: Andrey Konovalov Thanks! 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=-13.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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 85377C433DB for ; Fri, 22 Jan 2021 14:37:45 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2D98623444 for ; Fri, 22 Jan 2021 14:37:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2D98623444 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=McP762GOs0WvUlqH8dKV40VM8h6WbSZTECUBvddkq8Y=; b=N+ImvAHZuPBkk4kyySO0tOXmm wYvCgWirpb0eNAfKoBqIlOUo/daOtpQzx3UNCKitUh4HOzfjGMZFsaKYQFedZyx+NKyH1mIX22A3D gHSR2Y7c8hTSZKUhDgfzW0GnMbAIwNrvV+XM09gL95NerwKL7NtSQvo8UrQR5Z/qhDCLrU/+qrzVx 2iTiwY3LAa7gIRhHjfb6KGbqBG19KmEyUhk0JX162WBgC6NSIhJq3XvTe+575Vni314o9AckaN4Fh IRvIv/jTB5NEn3wtbigW2PgMtINphw14lryHXSg7dDgFNiUPO4CRyVrxhfLoY5gPjJIKLhcFhHK6q JTmFmYljA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2xY5-00087C-Ob; Fri, 22 Jan 2021 14:36:29 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2xY3-00086d-D7 for linux-arm-kernel@lists.infradead.org; Fri, 22 Jan 2021 14:36:28 +0000 Received: by mail-pl1-x62d.google.com with SMTP id g3so3290349plp.2 for ; Fri, 22 Jan 2021 06:36:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=T4ndQifpB6vRYXO2w5aSIQgzTLZUsKUzNWBDOARv8pU=; b=s1JMK3gv2GQtNAS32P5zWmfle4NytnQV8g2REiMBp/MheT/zck6MOykUghCYl1zqjj Hj8LSwp400GJuC4t3YF+Jll4CfhlMnzo+74wRmJ5tooJfUHelvDEmkG2fmrvtuvXy2dO kND61YjndMCz5z3C0/iKkUvZpqMfFKsgLXNlgrenmj59MGeiWAfj751isWv1vw89Xn15 dJIvTHAwol/5CFRldQq2tJNv6gnKDL0JY3LIAjlsCxPDOlI0QsG01OzTwLXJPBhkrHoM tb5GWQcqLIHbtKKm7dphbQPE+33KOg08DRnm9DInFld88msCsqJD96JNyNGu39xKnhaX plHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=T4ndQifpB6vRYXO2w5aSIQgzTLZUsKUzNWBDOARv8pU=; b=o5yEtJII/oza1ACEmK8+qaPW2/j0pwD387xE6cCEItqcrYCOJ9V/cP/h+eYNBgUJTd ZUF65r0E/RFjWWD2uTnuE8Co6BdaK19fT/0/EI0AGx82uVX0zy8WOJ9LG/hBRWIiWhlt nvhu0SgBrbL0mAVfasXSOvfHtnlzS756rPybXTOp95UuLI+U26XZKBDqwOCf5rjEdU7M 6s39OUzJ+XhcRq1x9iK/UMFspW+9quspbZSyC+Q7PJDdflmBVdyZIhGwOWbW3Nm63XXg ZCunU52iqhoHUtcStltzCwAtv2Q+ec/GX5isMRo8e8Q/pquMwckPzEgMDAyF8Pg5AfAm gVtA== X-Gm-Message-State: AOAM532mK9cNI+JGmZhWKP8Eg0teXS/T062Cwn9r24snPo/dyVf6D0+3 6NZXD/deYTADOWhKY1endtlxQBu+a9oNgRjzYLXqCA== X-Google-Smtp-Source: ABdhPJxvIfUBZnUqb/DU5Y4C0S1Eul97b0Eg9Qg1qgUdFtPS1m+ucavQvS+aaBp8VDbflPPB7Vurih1L618A54rbZQk= X-Received: by 2002:a17:90b:350b:: with SMTP id ls11mr5726685pjb.166.1611326182815; Fri, 22 Jan 2021 06:36:22 -0800 (PST) MIME-Version: 1.0 References: <20210122141125.36166-1-vincenzo.frascino@arm.com> <20210122141125.36166-3-vincenzo.frascino@arm.com> In-Reply-To: <20210122141125.36166-3-vincenzo.frascino@arm.com> From: Andrey Konovalov Date: Fri, 22 Jan 2021 15:36:11 +0100 Message-ID: Subject: Re: [PATCH v7 2/4] kasan: Add KASAN mode kernel parameter To: Vincenzo Frascino X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210122_093627_479260_BC138D10 X-CRM114-Status: GOOD ( 30.85 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Branislav Rankov , Marco Elver , Catalin Marinas , Evgenii Stepanov , LKML , kasan-dev , Alexander Potapenko , Linux ARM , Andrey Ryabinin , Will Deacon , Dmitry Vyukov 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 On Fri, Jan 22, 2021 at 3:11 PM Vincenzo Frascino wrote: > > Architectures supported by KASAN_HW_TAGS can provide a sync or async mode > of execution. On an MTE enabled arm64 hw for example this can be identified > with the synchronous or asynchronous tagging mode of execution. > In synchronous mode, an exception is triggered if a tag check fault occurs. > In asynchronous mode, if a tag check fault occurs, the TFSR_EL1 register is > updated asynchronously. The kernel checks the corresponding bits > periodically. > > KASAN requires a specific kernel command line parameter to make use of this > hw features. > > Add KASAN HW execution mode kernel command line parameter. > > Note: This patch adds the kasan.mode kernel parameter and the > sync/async kernel command line options to enable the described features. > > Cc: Dmitry Vyukov > Cc: Andrey Ryabinin > Cc: Alexander Potapenko > Cc: Andrey Konovalov > Signed-off-by: Vincenzo Frascino > --- > Documentation/dev-tools/kasan.rst | 9 +++++++++ > lib/test_kasan.c | 2 +- > mm/kasan/hw_tags.c | 32 ++++++++++++++++++++++++++++++- > mm/kasan/kasan.h | 6 ++++-- > 4 files changed, 45 insertions(+), 4 deletions(-) > > diff --git a/Documentation/dev-tools/kasan.rst b/Documentation/dev-tools/kasan.rst > index e022b7506e37..e3dca4d1f2a7 100644 > --- a/Documentation/dev-tools/kasan.rst > +++ b/Documentation/dev-tools/kasan.rst > @@ -161,6 +161,15 @@ particular KASAN features. > > - ``kasan=off`` or ``=on`` controls whether KASAN is enabled (default: ``on``). > > +- ``kasan.mode=sync`` or ``=async`` controls whether KASAN is configured in > + synchronous or asynchronous mode of execution (default: ``sync``). > + Synchronous mode: a bad access is detected immediately when a tag > + check fault occurs. > + Asynchronous mode: a bad access detection is delayed. When a tag check > + fault occurs, the information is stored in hardware (in the TFSR_EL1 > + register for arm64). The kernel periodically checks the hardware and > + only reports tag faults during these checks. > + > - ``kasan.stacktrace=off`` or ``=on`` disables or enables alloc and free stack > traces collection (default: ``on`` for ``CONFIG_DEBUG_KERNEL=y``, otherwise > ``off``). > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > index d16ec9e66806..7285dcf9fcc1 100644 > --- a/lib/test_kasan.c > +++ b/lib/test_kasan.c > @@ -97,7 +97,7 @@ static void kasan_test_exit(struct kunit *test) > READ_ONCE(fail_data.report_found)); \ > if (IS_ENABLED(CONFIG_KASAN_HW_TAGS)) { \ > if (READ_ONCE(fail_data.report_found)) \ > - hw_enable_tagging(); \ > + hw_enable_tagging_sync(); \ > migrate_enable(); \ > } \ > } while (0) > diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c > index e529428e7a11..308a879a3798 100644 > --- a/mm/kasan/hw_tags.c > +++ b/mm/kasan/hw_tags.c > @@ -25,6 +25,12 @@ enum kasan_arg { > KASAN_ARG_ON, > }; > > +enum kasan_arg_mode { > + KASAN_ARG_MODE_DEFAULT, > + KASAN_ARG_MODE_SYNC, > + KASAN_ARG_MODE_ASYNC, > +}; > + > enum kasan_arg_stacktrace { > KASAN_ARG_STACKTRACE_DEFAULT, > KASAN_ARG_STACKTRACE_OFF, > @@ -38,6 +44,7 @@ enum kasan_arg_fault { > }; > > static enum kasan_arg kasan_arg __ro_after_init; > +static enum kasan_arg_mode kasan_arg_mode __ro_after_init; > static enum kasan_arg_stacktrace kasan_arg_stacktrace __ro_after_init; > static enum kasan_arg_fault kasan_arg_fault __ro_after_init; > > @@ -68,6 +75,21 @@ static int __init early_kasan_flag(char *arg) > } > early_param("kasan", early_kasan_flag); > > +/* kasan.mode=sync/async */ > +static int __init early_kasan_mode(char *arg) > +{ > + /* If arg is not set the default mode is sync */ > + if ((!arg) || !strcmp(arg, "sync")) > + kasan_arg_mode = KASAN_ARG_MODE_SYNC; > + else if (!strcmp(arg, "async")) > + kasan_arg_mode = KASAN_ARG_MODE_ASYNC; > + else > + return -EINVAL; > + > + return 0; > +} > +early_param("kasan.mode", early_kasan_mode); > + > /* kasan.stacktrace=off/on */ > static int __init early_kasan_flag_stacktrace(char *arg) > { > @@ -115,7 +137,15 @@ void kasan_init_hw_tags_cpu(void) > return; > > hw_init_tags(KASAN_TAG_MAX); > - hw_enable_tagging(); > + > + /* > + * Enable async mode only when explicitly requested through > + * the command line. > + */ > + if (kasan_arg_mode == KASAN_ARG_MODE_ASYNC) > + hw_enable_tagging_async(); > + else > + hw_enable_tagging_sync(); > } > > /* kasan_init_hw_tags() is called once on boot CPU. */ > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > index 07ef7fc742ad..3923d9744105 100644 > --- a/mm/kasan/kasan.h > +++ b/mm/kasan/kasan.h > @@ -294,7 +294,8 @@ static inline const void *arch_kasan_set_tag(const void *addr, u8 tag) > #define arch_set_mem_tag_range(addr, size, tag) ((void *)(addr)) > #endif > > -#define hw_enable_tagging() arch_enable_tagging() > +#define hw_enable_tagging_sync() arch_enable_tagging_sync() > +#define hw_enable_tagging_async() arch_enable_tagging_async() > #define hw_init_tags(max_tag) arch_init_tags(max_tag) > #define hw_set_tagging_report_once(state) arch_set_tagging_report_once(state) > #define hw_get_random_tag() arch_get_random_tag() > @@ -303,7 +304,8 @@ static inline const void *arch_kasan_set_tag(const void *addr, u8 tag) > > #else /* CONFIG_KASAN_HW_TAGS */ > > -#define hw_enable_tagging() > +#define hw_enable_tagging_sync() > +#define hw_enable_tagging_async() > #define hw_set_tagging_report_once(state) > > #endif /* CONFIG_KASAN_HW_TAGS */ > -- > 2.30.0 > Reviewed-by: Andrey Konovalov Thanks! _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel