Introduce CONFIG_ARCH_DEFER_KASAN to identify architectures that need
to defer KASAN initialization until shadow memory is properly set up.
Some architectures (like PowerPC with radix MMU) need to set up their
shadow memory mappings before KASAN can be safely enabled, while others
(like s390, x86, arm) can enable KASAN much earlier or even from the
beginning.
This option allows us to:
1. Use static keys only where needed (avoiding overhead)
2. Use compile-time constants for arch that don't need runtime checks
3. Maintain optimal performance for both scenarios
Architectures that need deferred KASAN should select this option.
Architectures that can enable KASAN early will get compile-time
optimizations instead of runtime checks.
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217049
Signed-off-by: Sabyrzhan Tasbolatov <snovitoll@gmail.com>
---
Changes in v3:
- Introduced CONFIG_ARCH_DEFER_KASAN to control static key usage
---
lib/Kconfig.kasan | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan
index f82889a830f..38456560c85 100644
--- a/lib/Kconfig.kasan
+++ b/lib/Kconfig.kasan
@@ -19,6 +19,14 @@ config ARCH_DISABLE_KASAN_INLINE
Disables both inline and stack instrumentation. Selected by
architectures that do not support these instrumentation types.
+config ARCH_DEFER_KASAN
+ bool
+ help
+ Architectures should select this if they need to defer KASAN
+ initialization until shadow memory is properly set up. This
+ enables runtime control via static keys. Otherwise, KASAN uses
+ compile-time constants for better performance.
+
config CC_HAS_KASAN_GENERIC
def_bool $(cc-option, -fsanitize=kernel-address)
--
2.34.1
On 7/17/25 4:27 PM, Sabyrzhan Tasbolatov wrote: > Introduce CONFIG_ARCH_DEFER_KASAN to identify architectures that need > to defer KASAN initialization until shadow memory is properly set up. > > Some architectures (like PowerPC with radix MMU) need to set up their > shadow memory mappings before KASAN can be safely enabled, while others > (like s390, x86, arm) can enable KASAN much earlier or even from the > beginning. > > This option allows us to: > 1. Use static keys only where needed (avoiding overhead) > 2. Use compile-time constants for arch that don't need runtime checks > 3. Maintain optimal performance for both scenarios > > Architectures that need deferred KASAN should select this option. > Architectures that can enable KASAN early will get compile-time > optimizations instead of runtime checks. > > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217049 > Signed-off-by: Sabyrzhan Tasbolatov <snovitoll@gmail.com> > --- > Changes in v3: > - Introduced CONFIG_ARCH_DEFER_KASAN to control static key usage > --- > lib/Kconfig.kasan | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan > index f82889a830f..38456560c85 100644 > --- a/lib/Kconfig.kasan > +++ b/lib/Kconfig.kasan > @@ -19,6 +19,14 @@ config ARCH_DISABLE_KASAN_INLINE > Disables both inline and stack instrumentation. Selected by > architectures that do not support these instrumentation types. > > +config ARCH_DEFER_KASAN > + bool > + help > + Architectures should select this if they need to defer KASAN > + initialization until shadow memory is properly set up. This > + enables runtime control via static keys. Otherwise, KASAN uses > + compile-time constants for better performance. > + > config CC_HAS_KASAN_GENERIC > def_bool $(cc-option, -fsanitize=kernel-address) > This needs to be merged with the next patch where this option at least has some users.
On Thu, Jul 17, 2025 at 07:27:21PM +0500, Sabyrzhan Tasbolatov wrote: > Introduce CONFIG_ARCH_DEFER_KASAN to identify architectures that need > to defer KASAN initialization until shadow memory is properly set up. > > Some architectures (like PowerPC with radix MMU) need to set up their > shadow memory mappings before KASAN can be safely enabled, while others > (like s390, x86, arm) can enable KASAN much earlier or even from the > beginning. > > This option allows us to: > 1. Use static keys only where needed (avoiding overhead) > 2. Use compile-time constants for arch that don't need runtime checks > 3. Maintain optimal performance for both scenarios > > Architectures that need deferred KASAN should select this option. > Architectures that can enable KASAN early will get compile-time > optimizations instead of runtime checks. > > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217049 > Signed-off-by: Sabyrzhan Tasbolatov <snovitoll@gmail.com> > --- > Changes in v3: > - Introduced CONFIG_ARCH_DEFER_KASAN to control static key usage > --- > lib/Kconfig.kasan | 8 ++++++++ > 1 file changed, 8 insertions(+) Acked-by: Alexander Gordeev <agordeev@linux.ibm.com> # s390
On Thu, 17 Jul 2025 19:27:21 +0500 Sabyrzhan Tasbolatov <snovitoll@gmail.com> wrote: > Introduce CONFIG_ARCH_DEFER_KASAN to identify architectures that need > to defer KASAN initialization until shadow memory is properly set up. > > Some architectures (like PowerPC with radix MMU) need to set up their > shadow memory mappings before KASAN can be safely enabled, while others > (like s390, x86, arm) can enable KASAN much earlier or even from the > beginning. > > This option allows us to: > 1. Use static keys only where needed (avoiding overhead) > 2. Use compile-time constants for arch that don't need runtime checks > 3. Maintain optimal performance for both scenarios > > Architectures that need deferred KASAN should select this option. > Architectures that can enable KASAN early will get compile-time > optimizations instead of runtime checks. Looks nice and appears quite mature. I'm reluctant to add it to mm.git during -rc6, especially given the lack of formal review and ack tags. But but but, that's what the mm-new branch is for. I guess I'll add it to get some additional exposure, but whether I'll advance it into mm-unstable/linux-next for this cycle is unclear. What do you (and others) think?
On 7/18/25 12:10 AM, Andrew Morton wrote: > On Thu, 17 Jul 2025 19:27:21 +0500 Sabyrzhan Tasbolatov <snovitoll@gmail.com> wrote: > >> Introduce CONFIG_ARCH_DEFER_KASAN to identify architectures that need >> to defer KASAN initialization until shadow memory is properly set up. >> >> Some architectures (like PowerPC with radix MMU) need to set up their >> shadow memory mappings before KASAN can be safely enabled, while others >> (like s390, x86, arm) can enable KASAN much earlier or even from the >> beginning. >> >> This option allows us to: >> 1. Use static keys only where needed (avoiding overhead) >> 2. Use compile-time constants for arch that don't need runtime checks >> 3. Maintain optimal performance for both scenarios >> >> Architectures that need deferred KASAN should select this option. >> Architectures that can enable KASAN early will get compile-time >> optimizations instead of runtime checks. > > Looks nice and appears quite mature. I'm reluctant to add it to mm.git > during -rc6, especially given the lack of formal review and ack tags. > > But but but, that's what the mm-new branch is for. I guess I'll add it > to get some additional exposure, but whether I'll advance it into > mm-unstable/linux-next for this cycle is unclear. > > What do you (and others) think? After looking a bit, it breaks UM and probably LoongArch too. I'd say it needs more work and not ready even for mm-new.
On Tue, 22 Jul 2025 01:18:52 +0200 Andrey Ryabinin <ryabinin.a.a@gmail.com> wrote: > >> Architectures that need deferred KASAN should select this option. > >> Architectures that can enable KASAN early will get compile-time > >> optimizations instead of runtime checks. > > > > Looks nice and appears quite mature. I'm reluctant to add it to mm.git > > during -rc6, especially given the lack of formal review and ack tags. > > > > But but but, that's what the mm-new branch is for. I guess I'll add it > > to get some additional exposure, but whether I'll advance it into > > mm-unstable/linux-next for this cycle is unclear. > > > > What do you (and others) think? > > After looking a bit, it breaks UM and probably LoongArch too. > I'd say it needs more work and not ready even for mm-new. OK, thanks. I'll drop the v3 series.
On Fri, Jul 18, 2025 at 3:10 AM Andrew Morton <akpm@linux-foundation.org> wrote: > > On Thu, 17 Jul 2025 19:27:21 +0500 Sabyrzhan Tasbolatov <snovitoll@gmail.com> wrote: > > > Introduce CONFIG_ARCH_DEFER_KASAN to identify architectures that need > > to defer KASAN initialization until shadow memory is properly set up. > > > > Some architectures (like PowerPC with radix MMU) need to set up their > > shadow memory mappings before KASAN can be safely enabled, while others > > (like s390, x86, arm) can enable KASAN much earlier or even from the > > beginning. > > > > This option allows us to: > > 1. Use static keys only where needed (avoiding overhead) > > 2. Use compile-time constants for arch that don't need runtime checks > > 3. Maintain optimal performance for both scenarios > > > > Architectures that need deferred KASAN should select this option. > > Architectures that can enable KASAN early will get compile-time > > optimizations instead of runtime checks. > > Looks nice and appears quite mature. I'm reluctant to add it to mm.git > during -rc6, especially given the lack of formal review and ack tags. > > But but but, that's what the mm-new branch is for. I guess I'll add it > to get some additional exposure, but whether I'll advance it into > mm-unstable/linux-next for this cycle is unclear. > > What do you (and others) think? Thanks for the positive feedback! Adding it to mm-new for additional exposure would be great. Given the complexity of this cross-architecture change, I think of taking the conservative approach of: 1. mm-new branch for exposure and review collection 2. Advancing to mm-unstable/linux-next only after we get proper acks from KASAN maintainers/reviewers, at least. The series has been thoroughly tested by me - compiled all affected arch and ran QEMU on arm64, x86 with KUnits. + Forgot to add in CC Johannes Berg, Peter Zijlstra who commented in v1. https://lore.kernel.org/all/20250625095224.118679-1-snovitoll@gmail.com/
© 2016 - 2025 Red Hat, Inc.