Now everything is ready, set kasan=off can disable kasan for all
three modes.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
include/linux/kasan-enabled.h | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h
index 32f2d19f599f..b5857e15ef14 100644
--- a/include/linux/kasan-enabled.h
+++ b/include/linux/kasan-enabled.h
@@ -8,30 +8,21 @@ extern bool kasan_arg_disabled;
DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled);
-#ifdef CONFIG_KASAN_HW_TAGS
-
static __always_inline bool kasan_enabled(void)
{
return static_branch_likely(&kasan_flag_enabled);
}
+#ifdef CONFIG_KASAN_HW_TAGS
static inline bool kasan_hw_tags_enabled(void)
{
return kasan_enabled();
}
-
#else /* CONFIG_KASAN_HW_TAGS */
-
-static inline bool kasan_enabled(void)
-{
- return IS_ENABLED(CONFIG_KASAN);
-}
-
static inline bool kasan_hw_tags_enabled(void)
{
return false;
}
-
#endif /* CONFIG_KASAN_HW_TAGS */
#endif /* LINUX_KASAN_ENABLED_H */
--
2.41.0
Hello Baoqua, On Tue, 5 Aug 2025 14:23:33 +0800 Baoquan He <bhe@redhat.com> wrote: > Now everything is ready, set kasan=off can disable kasan for all > three modes. > > Signed-off-by: Baoquan He <bhe@redhat.com> > --- > include/linux/kasan-enabled.h | 11 +---------- > 1 file changed, 1 insertion(+), 10 deletions(-) > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > index 32f2d19f599f..b5857e15ef14 100644 > --- a/include/linux/kasan-enabled.h > +++ b/include/linux/kasan-enabled.h > @@ -8,30 +8,21 @@ extern bool kasan_arg_disabled; > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > -#ifdef CONFIG_KASAN_HW_TAGS > - > static __always_inline bool kasan_enabled(void) > { > return static_branch_likely(&kasan_flag_enabled); > } I found mm-new build fails when CONFIG_KASAN is unset as below, and 'git bisect' points this patch. LD .tmp_vmlinux1 ld: lib/stackdepot.o:(__jump_table+0x8): undefined reference to `kasan_flag_enabled' Since kasna_flag_enabled is defined in mm/kasan/common.c, I confirmed diff like below fixes this. I think it may not be a correct fix though, since I didn't read this patchset thoroughly. diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h index b5857e15ef14..a53d112b1020 100644 --- a/include/linux/kasan-enabled.h +++ b/include/linux/kasan-enabled.h @@ -8,11 +8,22 @@ extern bool kasan_arg_disabled; DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); +#ifdef CONFIG_KASAN + static __always_inline bool kasan_enabled(void) { return static_branch_likely(&kasan_flag_enabled); } +#else /* CONFIG_KASAN */ + +static inline bool kasan_enabled(void) +{ + return false; +} + +#endif + #ifdef CONFIG_KASAN_HW_TAGS static inline bool kasan_hw_tags_enabled(void) { [...] Thanks, SJ
On 08/05/25 at 10:22pm, SeongJae Park wrote: > Hello Baoqua, > > On Tue, 5 Aug 2025 14:23:33 +0800 Baoquan He <bhe@redhat.com> wrote: > > > Now everything is ready, set kasan=off can disable kasan for all > > three modes. > > > > Signed-off-by: Baoquan He <bhe@redhat.com> > > --- > > include/linux/kasan-enabled.h | 11 +---------- > > 1 file changed, 1 insertion(+), 10 deletions(-) > > > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > > index 32f2d19f599f..b5857e15ef14 100644 > > --- a/include/linux/kasan-enabled.h > > +++ b/include/linux/kasan-enabled.h > > @@ -8,30 +8,21 @@ extern bool kasan_arg_disabled; > > > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > > > -#ifdef CONFIG_KASAN_HW_TAGS > > - > > static __always_inline bool kasan_enabled(void) > > { > > return static_branch_likely(&kasan_flag_enabled); > > } > > I found mm-new build fails when CONFIG_KASAN is unset as below, and 'git > bisect' points this patch. > > LD .tmp_vmlinux1 > ld: lib/stackdepot.o:(__jump_table+0x8): undefined reference to `kasan_flag_enabled' > > Since kasna_flag_enabled is defined in mm/kasan/common.c, I confirmed diff like > below fixes this. I think it may not be a correct fix though, since I didn't > read this patchset thoroughly. Thanks a lot for the reporting and fix. The below code is great to fix the error. I reproduced it and tested with below fix, it works. Since there's other reviewing comments, I will merge this into v2 post. > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > index b5857e15ef14..a53d112b1020 100644 > --- a/include/linux/kasan-enabled.h > +++ b/include/linux/kasan-enabled.h > @@ -8,11 +8,22 @@ extern bool kasan_arg_disabled; > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > +#ifdef CONFIG_KASAN > + > static __always_inline bool kasan_enabled(void) > { > return static_branch_likely(&kasan_flag_enabled); > } > > +#else /* CONFIG_KASAN */ > + > +static inline bool kasan_enabled(void) > +{ > + return false; > +} > + > +#endif > + > #ifdef CONFIG_KASAN_HW_TAGS > static inline bool kasan_hw_tags_enabled(void) > { > > > [...] > > Thanks, > SJ >
On Tue, Aug 05, 2025 at 10:22:31PM -0700, SeongJae Park wrote: > Hello Baoqua, > > On Tue, 5 Aug 2025 14:23:33 +0800 Baoquan He <bhe@redhat.com> wrote: > > > Now everything is ready, set kasan=off can disable kasan for all > > three modes. > > > > Signed-off-by: Baoquan He <bhe@redhat.com> > > --- > > include/linux/kasan-enabled.h | 11 +---------- > > 1 file changed, 1 insertion(+), 10 deletions(-) > > > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > > index 32f2d19f599f..b5857e15ef14 100644 > > --- a/include/linux/kasan-enabled.h > > +++ b/include/linux/kasan-enabled.h > > @@ -8,30 +8,21 @@ extern bool kasan_arg_disabled; > > > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > > > -#ifdef CONFIG_KASAN_HW_TAGS > > - > > static __always_inline bool kasan_enabled(void) > > { > > return static_branch_likely(&kasan_flag_enabled); > > } > > I found mm-new build fails when CONFIG_KASAN is unset as below, and 'git > bisect' points this patch. Yup just hit this + bisected here. > > LD .tmp_vmlinux1 > ld: lib/stackdepot.o:(__jump_table+0x8): undefined reference to `kasan_flag_enabled' > > Since kasna_flag_enabled is defined in mm/kasan/common.c, I confirmed diff like > below fixes this. I think it may not be a correct fix though, since I didn't > read this patchset thoroughly. > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > index b5857e15ef14..a53d112b1020 100644 > --- a/include/linux/kasan-enabled.h > +++ b/include/linux/kasan-enabled.h > @@ -8,11 +8,22 @@ extern bool kasan_arg_disabled; > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > +#ifdef CONFIG_KASAN > + Shouldn't we put this above the static key declaration? Feels like the whole header should be included really. > static __always_inline bool kasan_enabled(void) > { > return static_branch_likely(&kasan_flag_enabled); > } > > +#else /* CONFIG_KASAN */ > + > +static inline bool kasan_enabled(void) > +{ > + return false; > +} > + > +#endif > + > #ifdef CONFIG_KASAN_HW_TAGS > static inline bool kasan_hw_tags_enabled(void) > { > > > [...] > > Thanks, > SJ > Cheers, Lorenzo
On 08/06/25 at 05:26pm, Lorenzo Stoakes wrote: > On Tue, Aug 05, 2025 at 10:22:31PM -0700, SeongJae Park wrote: > > Hello Baoqua, > > > > On Tue, 5 Aug 2025 14:23:33 +0800 Baoquan He <bhe@redhat.com> wrote: > > > > > Now everything is ready, set kasan=off can disable kasan for all > > > three modes. > > > > > > Signed-off-by: Baoquan He <bhe@redhat.com> > > > --- > > > include/linux/kasan-enabled.h | 11 +---------- > > > 1 file changed, 1 insertion(+), 10 deletions(-) > > > > > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > > > index 32f2d19f599f..b5857e15ef14 100644 > > > --- a/include/linux/kasan-enabled.h > > > +++ b/include/linux/kasan-enabled.h > > > @@ -8,30 +8,21 @@ extern bool kasan_arg_disabled; > > > > > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > > > > > -#ifdef CONFIG_KASAN_HW_TAGS > > > - > > > static __always_inline bool kasan_enabled(void) > > > { > > > return static_branch_likely(&kasan_flag_enabled); > > > } > > > > I found mm-new build fails when CONFIG_KASAN is unset as below, and 'git > > bisect' points this patch. > > Yup just hit this + bisected here. Sorry for the trouble and thanks for reporting. > > > > > LD .tmp_vmlinux1 > > ld: lib/stackdepot.o:(__jump_table+0x8): undefined reference to `kasan_flag_enabled' > > > > Since kasna_flag_enabled is defined in mm/kasan/common.c, I confirmed diff like > > below fixes this. I think it may not be a correct fix though, since I didn't > > read this patchset thoroughly. > > > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > > index b5857e15ef14..a53d112b1020 100644 > > --- a/include/linux/kasan-enabled.h > > +++ b/include/linux/kasan-enabled.h > > @@ -8,11 +8,22 @@ extern bool kasan_arg_disabled; > > > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > > > +#ifdef CONFIG_KASAN > > + > > Shouldn't we put this above the static key declaration? > > Feels like the whole header should be included really. You are right, kasan_flag_enabled should be included in CONFIG_KASAN ifdeffery scope. Since CONFIG_KASAN_HW_TAGS depends on CONFIG_KASAN, we may not need include below CONFIG_KASAN_HW_TAGS ifdeffery into CONFIG_KASAN ifdeffery scope. Not sure if this is incorrect. Thanks a lot for checking this. > > > static __always_inline bool kasan_enabled(void) > > { > > return static_branch_likely(&kasan_flag_enabled); > > } > > > > +#else /* CONFIG_KASAN */ > > + > > +static inline bool kasan_enabled(void) > > +{ > > + return false; > > +} > > + > > +#endif > > + > > #ifdef CONFIG_KASAN_HW_TAGS > > static inline bool kasan_hw_tags_enabled(void) > > { > > > > > > [...] > > > > Thanks, > > SJ > > > > Cheers, Lorenzo >
On Fri, Aug 08, 2025 at 09:08:35PM +0800, Baoquan He wrote: > On 08/06/25 at 05:26pm, Lorenzo Stoakes wrote: > > > I found mm-new build fails when CONFIG_KASAN is unset as below, and 'git > > > bisect' points this patch. > > > > Yup just hit this + bisected here. > > Sorry for the trouble and thanks for reporting. No worries! > > > > > > > > > LD .tmp_vmlinux1 > > > ld: lib/stackdepot.o:(__jump_table+0x8): undefined reference to `kasan_flag_enabled' > > > > > > Since kasna_flag_enabled is defined in mm/kasan/common.c, I confirmed diff like > > > below fixes this. I think it may not be a correct fix though, since I didn't > > > read this patchset thoroughly. > > > > > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > > > index b5857e15ef14..a53d112b1020 100644 > > > --- a/include/linux/kasan-enabled.h > > > +++ b/include/linux/kasan-enabled.h > > > @@ -8,11 +8,22 @@ extern bool kasan_arg_disabled; > > > > > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > > > > > +#ifdef CONFIG_KASAN > > > + > > > > Shouldn't we put this above the static key declaration? > > > > Feels like the whole header should be included really. > > You are right, kasan_flag_enabled should be included in CONFIG_KASAN > ifdeffery scope. Firstly I _LOVE_ the term 'ifdeffery scope'. Fantastic :) > > Since CONFIG_KASAN_HW_TAGS depends on CONFIG_KASAN, we may not need > include below CONFIG_KASAN_HW_TAGS ifdeffery into CONFIG_KASAN ifdeffery > scope. Not sure if this is incorrect. Well I don't think CONFIG_KASAN_HW_TAGS is necessarily implied right? So these should remain I think, just nested in CONFIG_KASAN, should be fine. > > Thanks a lot for checking this. No problem! Just ran in to it while doing other stuff in mm-new :) Cheers, Lorenzo
On 08/08/25 at 02:24pm, Lorenzo Stoakes wrote: > On Fri, Aug 08, 2025 at 09:08:35PM +0800, Baoquan He wrote: > > On 08/06/25 at 05:26pm, Lorenzo Stoakes wrote: ...... > > > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > > > > index b5857e15ef14..a53d112b1020 100644 > > > > --- a/include/linux/kasan-enabled.h > > > > +++ b/include/linux/kasan-enabled.h > > > > @@ -8,11 +8,22 @@ extern bool kasan_arg_disabled; > > > > > > > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > > > > > > > +#ifdef CONFIG_KASAN > > > > + > > > > > > Shouldn't we put this above the static key declaration? > > > > > > Feels like the whole header should be included really. > > > > You are right, kasan_flag_enabled should be included in CONFIG_KASAN > > ifdeffery scope. > > Firstly I _LOVE_ the term 'ifdeffery scope'. Fantastic :) Learned from upstream people with expertise on both english and kernel, :-) > > > > > Since CONFIG_KASAN_HW_TAGS depends on CONFIG_KASAN, we may not need > > include below CONFIG_KASAN_HW_TAGS ifdeffery into CONFIG_KASAN ifdeffery > > scope. Not sure if this is incorrect. > > Well I don't think CONFIG_KASAN_HW_TAGS is necessarily implied right? So these > should remain I think, just nested in CONFIG_KASAN, should be fine. After investigation, I keep the CONFIG_KASAN_HW_TAGS ifdeffery scope out of CONFIG_KASAN scope. Otherwise, I need define the dummy kasan_hw_tags_enabled() function twice. I am personally not fan of the style. While if that is preferred in kernel, I can change it. #ifdef CONFIG_KASAN #ifdef CONFIG_KASAN_HW_TAGS ...... #ifdef CONFIG_KASAN_HW_TAGS static inline bool kasan_hw_tags_enabled(void) { return kasan_enabled(); } #else /* CONFIG_KASAN_HW_TAGS */ static inline bool kasan_hw_tags_enabled(void) { return false; } #endif /* CONFIG_KASAN_HW_TAGS */ ..... #else /* CONFIG_KASAN */ static inline bool kasan_hw_tags_enabled(void) { return false; } #endif
On Tue, Aug 12, 2025 at 09:27:02PM +0800, Baoquan He wrote: > > Firstly I _LOVE_ the term 'ifdeffery scope'. Fantastic :) > > Learned from upstream people with expertise on both english and kernel, :-) :) > After investigation, I keep the CONFIG_KASAN_HW_TAGS ifdeffery scope out > of CONFIG_KASAN scope. Otherwise, I need define the dummy > kasan_hw_tags_enabled() function twice. I am personally not fan of the > style. While if that is preferred in kernel, I can change it. > > #ifdef CONFIG_KASAN > > #ifdef CONFIG_KASAN_HW_TAGS > ...... > #ifdef CONFIG_KASAN_HW_TAGS > static inline bool kasan_hw_tags_enabled(void) > { > return kasan_enabled(); > } > #else /* CONFIG_KASAN_HW_TAGS */ > static inline bool kasan_hw_tags_enabled(void) > { > return false; > } > #endif /* CONFIG_KASAN_HW_TAGS */ > ..... > #else /* CONFIG_KASAN */ > static inline bool kasan_hw_tags_enabled(void) > { > return false; > } > #endif > This is fine, as CONFIG_KASAN_HW_TAGS implies CONFIG_KASAN anyway.
On Tue, Aug 5, 2025 at 11:34 AM Baoquan He <bhe@redhat.com> wrote: > > Now everything is ready, set kasan=off can disable kasan for all > three modes. > Hello, I've been working on this already and a different approach with the Kconfig ARCH_DEFER_KASAN has been proposed. Please see v4 thread. https://lore.kernel.org/all/20250805142622.560992-1-snovitoll@gmail.com/ It also covers the printing in a single KASAN codebase, instead of printing "KASAN intiilaized" in arch/* code. Also covers the enabling KASAN via kasan_enable() for all 3 modes. It's up to KASAN maintainers to choose either version. I just need the confirmation now if I should proceed with v5, or your version if it covers all arch and cases should be picked up. Thanks > Signed-off-by: Baoquan He <bhe@redhat.com> > --- > include/linux/kasan-enabled.h | 11 +---------- > 1 file changed, 1 insertion(+), 10 deletions(-) > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > index 32f2d19f599f..b5857e15ef14 100644 > --- a/include/linux/kasan-enabled.h > +++ b/include/linux/kasan-enabled.h > @@ -8,30 +8,21 @@ extern bool kasan_arg_disabled; > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > -#ifdef CONFIG_KASAN_HW_TAGS > - > static __always_inline bool kasan_enabled(void) > { > return static_branch_likely(&kasan_flag_enabled); > } > > +#ifdef CONFIG_KASAN_HW_TAGS > static inline bool kasan_hw_tags_enabled(void) > { > return kasan_enabled(); > } > - > #else /* CONFIG_KASAN_HW_TAGS */ > - > -static inline bool kasan_enabled(void) > -{ > - return IS_ENABLED(CONFIG_KASAN); > -} > - > static inline bool kasan_hw_tags_enabled(void) > { > return false; > } > - > #endif /* CONFIG_KASAN_HW_TAGS */ > > #endif /* LINUX_KASAN_ENABLED_H */ > -- > 2.41.0 > >
On 08/06/25 at 11:24pm, Sabyrzhan Tasbolatov wrote: > On Tue, Aug 5, 2025 at 11:34 AM Baoquan He <bhe@redhat.com> wrote: > > > > Now everything is ready, set kasan=off can disable kasan for all > > three modes. > > > > Hello, > > I've been working on this already and a different approach > with the Kconfig ARCH_DEFER_KASAN has been proposed. Thanks for telling, I don't always watch MM mailing list, so missed your earlier posting. I went through your v5 series, we are doing different work. I am adding kasan=on|off to generic/sw_tags, and have added kasan_enabled() to needed places. In fact, based on this patchset, we can remove kasan_arch_is_ready() more easily since in all places kasan_enabled() has been added there. Before seeing your patches, this is what I planned to do to remove kasan_arch_is_ready(). I will see what can be done better. Maybe I can carry your patch in v2. I will try tomorrow. > > Please see v4 thread. > https://lore.kernel.org/all/20250805142622.560992-1-snovitoll@gmail.com/ > > It also covers the printing in a single KASAN codebase, instead of > printing "KASAN intiilaized" in arch/* code. > Also covers the enabling KASAN via kasan_enable() for all 3 modes. > > It's up to KASAN maintainers to choose either version. > I just need the confirmation now if I should proceed with v5, > or your version if it covers all arch and cases should be picked up. > > Thanks > > > Signed-off-by: Baoquan He <bhe@redhat.com> > > --- > > include/linux/kasan-enabled.h | 11 +---------- > > 1 file changed, 1 insertion(+), 10 deletions(-) > > > > diff --git a/include/linux/kasan-enabled.h b/include/linux/kasan-enabled.h > > index 32f2d19f599f..b5857e15ef14 100644 > > --- a/include/linux/kasan-enabled.h > > +++ b/include/linux/kasan-enabled.h > > @@ -8,30 +8,21 @@ extern bool kasan_arg_disabled; > > > > DECLARE_STATIC_KEY_FALSE(kasan_flag_enabled); > > > > -#ifdef CONFIG_KASAN_HW_TAGS > > - > > static __always_inline bool kasan_enabled(void) > > { > > return static_branch_likely(&kasan_flag_enabled); > > } > > > > +#ifdef CONFIG_KASAN_HW_TAGS > > static inline bool kasan_hw_tags_enabled(void) > > { > > return kasan_enabled(); > > } > > - > > #else /* CONFIG_KASAN_HW_TAGS */ > > - > > -static inline bool kasan_enabled(void) > > -{ > > - return IS_ENABLED(CONFIG_KASAN); > > -} > > - > > static inline bool kasan_hw_tags_enabled(void) > > { > > return false; > > } > > - > > #endif /* CONFIG_KASAN_HW_TAGS */ > > > > #endif /* LINUX_KASAN_ENABLED_H */ > > -- > > 2.41.0 > > > > >
© 2016 - 2025 Red Hat, Inc.