Thread (107 messages) 107 messages, 6 authors, 2020-11-13

Re: [PATCH v9 17/44] kasan, arm64: move initialization message

From: Andrey Konovalov <hidden>
Date: 2020-11-11 18:50:26
Also in: linux-mm, lkml

On Wed, Nov 11, 2020 at 4:04 PM Alexander Potapenko [off-list ref] wrote:
On Tue, Nov 10, 2020 at 11:11 PM Andrey Konovalov [off-list ref] wrote:
quoted
Software tag-based KASAN mode is fully initialized with kasan_init_tags(),
while the generic mode only requires kasan_init(). Move the
initialization message for tag-based mode into kasan_init_tags().

Also fix pr_fmt() usage for KASAN code: generic.c doesn't need it as it
doesn't use any printing functions; tag-based mode should use "kasan:"
instead of KBUILD_MODNAME (which stands for file name).

Signed-off-by: Andrey Konovalov <redacted>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
---
Change-Id: Iddca9764b30ff0fab1922f26ca9d4f39b6f22673
---
 arch/arm64/include/asm/kasan.h |  9 +++------
 arch/arm64/mm/kasan_init.c     | 13 +++++--------
 mm/kasan/generic.c             |  2 --
 mm/kasan/sw_tags.c             |  4 +++-
 4 files changed, 11 insertions(+), 17 deletions(-)
diff --git a/arch/arm64/include/asm/kasan.h b/arch/arm64/include/asm/kasan.h
index f7ea70d02cab..0aaf9044cd6a 100644
--- a/arch/arm64/include/asm/kasan.h
+++ b/arch/arm64/include/asm/kasan.h
@@ -12,14 +12,10 @@
 #define arch_kasan_reset_tag(addr)     __tag_reset(addr)
 #define arch_kasan_get_tag(addr)       __tag_get(addr)

-#ifdef CONFIG_KASAN
-void kasan_init(void);
-#else
-static inline void kasan_init(void) { }
-#endif
-
 #if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)

+void kasan_init(void);
+
 /*
  * KASAN_SHADOW_START: beginning of the kernel virtual addresses.
  * KASAN_SHADOW_END: KASAN_SHADOW_START + 1/N of kernel virtual addresses,
@@ -43,6 +39,7 @@ void kasan_copy_shadow(pgd_t *pgdir);
 asmlinkage void kasan_early_init(void);

 #else
+static inline void kasan_init(void) { }
 static inline void kasan_copy_shadow(pgd_t *pgdir) { }
 #endif
diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c
index 5172799f831f..e35ce04beed1 100644
--- a/arch/arm64/mm/kasan_init.c
+++ b/arch/arm64/mm/kasan_init.c
@@ -278,17 +278,14 @@ static void __init kasan_init_depth(void)
        init_task.kasan_depth = 0;
 }

-#else /* CONFIG_KASAN_GENERIC || CONFIG_KASAN_SW_TAGS) */
-
-static inline void __init kasan_init_shadow(void) { }
-
-static inline void __init kasan_init_depth(void) { }
-
-#endif /* CONFIG_KASAN_GENERIC || CONFIG_KASAN_SW_TAGS */
-
 void __init kasan_init(void)
 {
        kasan_init_shadow();
        kasan_init_depth();
+#if defined(CONFIG_KASAN_GENERIC)
+       /* CONFIG_KASAN_SW_TAGS also requires kasan_init_tags(). */
        pr_info("KernelAddressSanitizer initialized\n");
+#endif
 }
Cannot we have a single kasan_init() function that will call
tool-specific initialization functions and print the message at the
end?
Unfortunately no. For different modes we need different functions that
are called in different places in the kernel. E.g. for generic KASAN
we only need kasan_init() to setup shadow pages; for SW tags we also
need kasan_init_sw_tags() which initializes per-cpu state and
finilizes initialization process.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help