Thread (13 messages) 13 messages, 3 authors, 2025-08-10

Re: [PATCH v5 1/2] kasan: introduce ARCH_DEFER_KASAN and unify static key across modes

From: Christophe Leroy <hidden>
Date: 2025-08-08 17:20:35
Also in: linux-arm-kernel, linux-mm, linux-riscv, linux-s390, linux-um, lkml, loongarch


Le 08/08/2025 à 17:33, Sabyrzhan Tasbolatov a écrit :
On Fri, Aug 8, 2025 at 10:03 AM Christophe Leroy
[off-list ref] wrote:
quoted


Le 07/08/2025 à 21:40, Sabyrzhan Tasbolatov a écrit :
quoted
Introduce CONFIG_ARCH_DEFER_KASAN to identify architectures [1] that need
to defer KASAN initialization until shadow memory is properly set up,
and unify the static key infrastructure across all KASAN modes.
That probably desserves more details, maybe copy in informations from
the top of cover letter.

I think there should also be some exeplanations about
kasan_arch_is_ready() becoming kasan_enabled(), and also why
kasan_arch_is_ready() completely disappear from mm/kasan/common.c
without being replaced by kasan_enabled().
quoted
[1] PowerPC, UML, LoongArch selects ARCH_DEFER_KASAN.

Closes: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.kernel.org%2Fshow_bug.cgi%3Fid%3D217049&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7Cfe4f5a759ad6452b047408ddd691024a%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638902640503259176%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=UM4uvQihJdeWwcC6DIiJXbn4wGsrijjRcHc55uCMErI%3D&reserved=0
Signed-off-by: Sabyrzhan Tasbolatov <redacted>
---
Changes in v5:
- Unified patches where arch (powerpc, UML, loongarch) selects
    ARCH_DEFER_KASAN in the first patch not to break
    bisectability
- Removed kasan_arch_is_ready completely as there is no user
- Removed __wrappers in v4, left only those where it's necessary
    due to different implementations

Changes in v4:
- Fixed HW_TAGS static key functionality (was broken in v3)
- Merged configuration and implementation for atomicity
---
   arch/loongarch/Kconfig                 |  1 +
   arch/loongarch/include/asm/kasan.h     |  7 ------
   arch/loongarch/mm/kasan_init.c         |  8 +++----
   arch/powerpc/Kconfig                   |  1 +
   arch/powerpc/include/asm/kasan.h       | 12 ----------
   arch/powerpc/mm/kasan/init_32.c        |  2 +-
   arch/powerpc/mm/kasan/init_book3e_64.c |  2 +-
   arch/powerpc/mm/kasan/init_book3s_64.c |  6 +----
   arch/um/Kconfig                        |  1 +
   arch/um/include/asm/kasan.h            |  5 ++--
   arch/um/kernel/mem.c                   | 10 ++++++--
   include/linux/kasan-enabled.h          | 32 ++++++++++++++++++--------
   include/linux/kasan.h                  |  6 +++++
   lib/Kconfig.kasan                      |  8 +++++++
   mm/kasan/common.c                      | 17 ++++++++++----
   mm/kasan/generic.c                     | 19 +++++++++++----
   mm/kasan/hw_tags.c                     |  9 +-------
   mm/kasan/kasan.h                       |  8 ++++++-
   mm/kasan/shadow.c                      | 12 +++++-----
   mm/kasan/sw_tags.c                     |  1 +
   mm/kasan/tags.c                        |  2 +-
   21 files changed, 100 insertions(+), 69 deletions(-)
diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index f0abc38c40a..cd64b2bc12d 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -9,6 +9,7 @@ config LOONGARCH
       select ACPI_PPTT if ACPI
       select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI
       select ARCH_BINFMT_ELF_STATE
+     select ARCH_DEFER_KASAN if KASAN
Instead of adding 'if KASAN' in all users, you could do in two steps:

Add a symbol ARCH_NEEDS_DEFER_KASAN.

+config ARCH_NEEDS_DEFER_KASAN
+       bool

And then:

+config ARCH_DEFER_KASAN
+       def_bool
+       depends on KASAN
+       depends on ARCH_DEFER_KASAN
+       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.
Actually, I don't see the benefits from this option. Sorry, have just
revisited this again.
With the new symbol, arch (PowerPC, UML, LoongArch) still needs select
2 options:

select ARCH_NEEDS_DEFER_KASAN
select ARCH_DEFER_KASAN
Sorry, my mistake, ARCH_DEFER_KASAN has to be 'def_bool y'. Missing the 
'y'. That way it is automatically set to 'y' as long as KASAN and 
ARCH_NEEDS_DEFER_KASAN are selected. Should be:

config ARCH_DEFER_KASAN
	def_bool y
	depends on KASAN
	depends on ARCH_NEEDS_DEFER_KASAN

and the oneline with `if` condition is cleaner.
select ARCH_DEFER_KASAN if KASAN
I don't think so because it requires all architectures to add 'if KASAN' 
which is not convenient.

Christophe
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help