From: Baoquan He <bhe@redhat.com>
To: Andrey Konovalov <andreyknvl@gmail.com>
Cc: linux-mm@kvack.org, ryabinin.a.a@gmail.com, glider@google.com,
dvyukov@google.com, vincenzo.frascino@arm.com,
akpm@linux-foundation.org, kasan-dev@googlegroups.com,
linux-kernel@vger.kernel.org, kexec@lists.infradead.org,
elver@google.com, sj@kernel.org, lorenzo.stoakes@oracle.com,
snovitoll@gmail.com, christophe.leroy@csgroup.eu
Subject: Re: [PATCH v4 02/12] mm/kasan: move kasan= code to common place
Date: Tue, 9 Dec 2025 11:27:50 +0800 [thread overview]
Message-ID: <aTeXNkWx/U8MB9hf@MiWiFi-R3L-srv> (raw)
In-Reply-To: <CA+fCnZeHZ4+8GOn0untumM0TE9TeSHqja9kAsbEb-+jbEFNQQQ@mail.gmail.com>
On 12/04/25 at 05:39pm, Andrey Konovalov wrote:
> On Fri, Nov 28, 2025 at 4:33 AM Baoquan He <bhe@redhat.com> wrote:
> >
> > This allows generic and sw_tags to be set in kernel cmdline too.
> >
> > When at it, rename 'kasan_arg' to 'kasan_arg_disabled' as a bool
> > variable. And expose 'kasan_flag_enabled' to kasan common place
> > too.
>
> This asks to be two separate patches.
Makes sense to me, thanks..
>
> >
> > This is prepared for later adding kernel parameter kasan=on|off for
> > all three kasan modes.
> >
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > ---
> > include/linux/kasan-enabled.h | 4 +++-
> > mm/kasan/common.c | 20 ++++++++++++++++++--
> > mm/kasan/hw_tags.c | 28 ++--------------------------
> > 3 files changed, 23 insertions(+), 29 deletions(-)
> >
> > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h
> > index 9eca967d8526..b05ec6329fbe 100644
> > --- a/include/linux/kasan-enabled.h
> > +++ b/include/linux/kasan-enabled.h
> > @@ -4,13 +4,15 @@
> >
> > #include <linux/static_key.h>
> >
> > -#if defined(CONFIG_ARCH_DEFER_KASAN) || defined(CONFIG_KASAN_HW_TAGS)
>
> These changes of moving/removing CONFIG_ARCH_DEFER_KASAN also seem to
> belong to a separate patch (or should be combined with patch 12?); the
> commit message does not even mention them.
Yes, combining tit with patch 12 sounds great. I will move patch 12 to
earlier oder.
>
> > +extern bool kasan_arg_disabled;
> > +
> > /*
> > * Global runtime flag for KASAN modes that need runtime control.
> > * Used by ARCH_DEFER_KASAN architectures and HW_TAGS mode.
> > */
> > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled);
>
> So kasan_flag_enabled is now always exposed here...
>
> >
> > +#if defined(CONFIG_ARCH_DEFER_KASAN) || defined(CONFIG_KASAN_HW_TAGS)
>
> but the functions that use it are not. Why?
Good question. I didn't consider this reasonably. At the beginning, I
thought it could cause problem if people has specified 'kasan=off'
before patch 12 when bisecting. That's why put kasan_arg_disabled and
kasan_flag_enabled declaration outside of any ifdeffery scope. Now after
reconsiderring, putting patch 12 earlier can solve the problem.
Thanks for careful reivewing, all suggestions are good and taken.
>
>
> > /*
> > * Runtime control for shadow memory initialization or HW_TAGS mode.
> > * Uses static key for architectures that need deferred KASAN or HW_TAGS.
> > diff --git a/mm/kasan/common.c b/mm/kasan/common.c
> > index 1d27f1bd260b..ac14956986ee 100644
> > --- a/mm/kasan/common.c
> > +++ b/mm/kasan/common.c
> > @@ -32,14 +32,30 @@
> > #include "kasan.h"
> > #include "../slab.h"
> >
> > -#if defined(CONFIG_ARCH_DEFER_KASAN) || defined(CONFIG_KASAN_HW_TAGS)
> > /*
> > * Definition of the unified static key declared in kasan-enabled.h.
> > * This provides consistent runtime enable/disable across KASAN modes.
> > */
> > DEFINE_STATIC_KEY_FALSE(kasan_flag_enabled);
> > EXPORT_SYMBOL_GPL(kasan_flag_enabled);
> > -#endif
> > +
> > +bool kasan_arg_disabled __ro_after_init;
> > +/* kasan=off/on */
> > +static int __init early_kasan_flag(char *arg)
> > +{
> > + if (!arg)
> > + return -EINVAL;
> > +
> > + if (!strcmp(arg, "off"))
> > + kasan_arg_disabled = true;
> > + else if (!strcmp(arg, "on"))
> > + kasan_arg_disabled = false;
> > + else
> > + return -EINVAL;
> > +
> > + return 0;
> > +}
> > +early_param("kasan", early_kasan_flag);
> >
> > struct slab *kasan_addr_to_slab(const void *addr)
> > {
> > diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c
> > index 1c373cc4b3fa..709c91abc1b1 100644
> > --- a/mm/kasan/hw_tags.c
> > +++ b/mm/kasan/hw_tags.c
> > @@ -22,12 +22,6 @@
> >
> > #include "kasan.h"
> >
> > -enum kasan_arg {
> > - KASAN_ARG_DEFAULT,
> > - KASAN_ARG_OFF,
> > - KASAN_ARG_ON,
> > -};
> > -
> > enum kasan_arg_mode {
> > KASAN_ARG_MODE_DEFAULT,
> > KASAN_ARG_MODE_SYNC,
> > @@ -41,7 +35,6 @@ enum kasan_arg_vmalloc {
> > KASAN_ARG_VMALLOC_ON,
> > };
> >
> > -static enum kasan_arg kasan_arg __ro_after_init;
> > static enum kasan_arg_mode kasan_arg_mode __ro_after_init;
> > static enum kasan_arg_vmalloc kasan_arg_vmalloc __initdata;
> >
> > @@ -81,23 +74,6 @@ unsigned int kasan_page_alloc_sample_order = PAGE_ALLOC_SAMPLE_ORDER_DEFAULT;
> >
> > DEFINE_PER_CPU(long, kasan_page_alloc_skip);
> >
> > -/* kasan=off/on */
> > -static int __init early_kasan_flag(char *arg)
> > -{
> > - if (!arg)
> > - return -EINVAL;
> > -
> > - if (!strcmp(arg, "off"))
> > - kasan_arg = KASAN_ARG_OFF;
> > - else if (!strcmp(arg, "on"))
> > - kasan_arg = KASAN_ARG_ON;
> > - else
> > - return -EINVAL;
> > -
> > - return 0;
> > -}
> > -early_param("kasan", early_kasan_flag);
> > -
> > /* kasan.mode=sync/async/asymm */
> > static int __init early_kasan_mode(char *arg)
> > {
> > @@ -222,7 +198,7 @@ void kasan_init_hw_tags_cpu(void)
> > * When this function is called, kasan_flag_enabled is not yet
> > * set by kasan_init_hw_tags(). Thus, check kasan_arg instead.
> > */
> > - if (kasan_arg == KASAN_ARG_OFF)
> > + if (kasan_arg_disabled)
> > return;
> >
> > /*
> > @@ -240,7 +216,7 @@ void __init kasan_init_hw_tags(void)
> > return;
> >
> > /* If KASAN is disabled via command line, don't initialize it. */
> > - if (kasan_arg == KASAN_ARG_OFF)
> > + if (kasan_arg_disabled)
> > return;
> >
> > switch (kasan_arg_mode) {
> > --
> > 2.41.0
> >
>
next prev parent reply other threads:[~2025-12-09 3:28 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-28 3:33 [PATCH v4 00/12] mm/kasan: make kasan=on|off work for all three modes Baoquan He
2025-11-28 3:33 ` [PATCH v4 01/12] mm/kasan: add conditional checks in functions to return directly if kasan is disabled Baoquan He
2025-12-04 16:38 ` Andrey Konovalov
2025-12-05 7:20 ` Baoquan He
2025-12-05 15:07 ` Andrey Konovalov
2025-11-28 3:33 ` [PATCH v4 02/12] mm/kasan: move kasan= code to common place Baoquan He
2025-12-04 16:39 ` Andrey Konovalov
2025-12-09 3:27 ` Baoquan He [this message]
2025-11-28 3:33 ` [PATCH v4 03/12] mm/kasan/sw_tags: don't initialize kasan if it's disabled Baoquan He
2025-12-04 16:40 ` Andrey Konovalov
2025-11-28 3:33 ` [PATCH v4 04/12] arch/arm: " Baoquan He
2025-11-28 3:33 ` [PATCH v4 05/12] arch/arm64: " Baoquan He
2025-11-28 3:33 ` [PATCH v4 06/12] arch/loongarch: " Baoquan He
2025-11-28 3:33 ` [PATCH v4 07/12] arch/powerpc: " Baoquan He
2025-11-28 3:33 ` [PATCH v4 08/12] arch/riscv: " Baoquan He
2025-11-28 3:33 ` Baoquan He
2025-11-28 3:33 ` [PATCH v4 09/12] arch/x86: " Baoquan He
2025-11-28 3:33 ` [PATCH v4 10/12] arch/xtensa: " Baoquan He
2025-11-28 3:33 ` [PATCH v4 11/12] arch/um: " Baoquan He
2025-12-01 10:56 ` Johannes Berg
2025-12-02 13:13 ` Baoquan He
2025-11-28 3:33 ` [PATCH v4 12/12] mm/kasan: make kasan=on|off take effect for all three modes Baoquan He
2025-11-28 15:50 ` Alexander Potapenko
2025-11-30 2:49 ` Baoquan He
2025-12-04 16:40 ` Andrey Konovalov
2025-12-04 16:38 ` [PATCH v4 00/12] mm/kasan: make kasan=on|off work " Andrey Konovalov
2025-12-05 7:14 ` Baoquan He
2025-12-05 11:03 ` Heiko Carstens
2025-12-05 12:57 ` Baoquan He
2025-12-05 15:07 ` Andrey Konovalov
2025-12-24 3:28 ` Baoquan He
2025-12-24 12:25 ` Andrey Ryabinin
2025-12-25 2:26 ` Baoquan He
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aTeXNkWx/U8MB9hf@MiWiFi-R3L-srv \
--to=bhe@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=andreyknvl@gmail.com \
--cc=christophe.leroy@csgroup.eu \
--cc=dvyukov@google.com \
--cc=elver@google.com \
--cc=glider@google.com \
--cc=kasan-dev@googlegroups.com \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=ryabinin.a.a@gmail.com \
--cc=sj@kernel.org \
--cc=snovitoll@gmail.com \
--cc=vincenzo.frascino@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.