[PATCH] kasan: Add CONFIG_KASAN_WHITELIST_ONLY mode

From: Joey Jiao
Date: Thu Sep 28 2023 - 00:16:46 EST


Fow low memory device, full enabled kasan just not work.
Set KASAN_SANITIZE to n when CONFIG_KASAN_WHITELIST_ONLY=y.
So we can enable kasan for single file or module.

Signed-off-by: Joey Jiao <quic_jiangenj@xxxxxxxxxxx>
---
lib/Kconfig.kasan | 8 ++++++++
scripts/Makefile.lib | 3 +++
2 files changed, 11 insertions(+)

diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan
index fdca89c05745..1cec4e204831 100644
--- a/lib/Kconfig.kasan
+++ b/lib/Kconfig.kasan
@@ -153,6 +153,14 @@ config KASAN_INLINE

endchoice

+config KASAN_WHITELIST_ONLY
+ bool "Whitelist only KASAN"
+ depends on KASAN && !KASAN_HW_TAGS
+ default n
+ help
+ Say Y here to only enable KASAN for module or files which has explicitly
+ set KASAN_SANITIZE:=y which is helpful especially for memory limited devices.
+
config KASAN_STACK
bool "Stack instrumentation (unsafe)" if CC_IS_CLANG && !COMPILE_TEST
depends on KASAN_GENERIC || KASAN_SW_TAGS
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 68d0134bdbf9..e8d608ea369c 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -158,6 +158,9 @@ endif
#
ifeq ($(CONFIG_KASAN),y)
ifneq ($(CONFIG_KASAN_HW_TAGS),y)
+ifeq ($(CONFIG_KASAN_WHITELIST_ONLY),y)
+KASAN_SANITIZE ?= n
+endif
_c_flags += $(if $(patsubst n%,, \
$(KASAN_SANITIZE_$(basetarget).o)$(KASAN_SANITIZE)y), \
$(CFLAGS_KASAN), $(CFLAGS_KASAN_NOSANITIZE))
--
2.38.1