[PATCH] Adding sw and hw tag-based KASAN support
Xin Zhen
xinz.06 at gmail.com
Wed Jul 5 02:27:03 PDT 2023
Hi all,
Currently KASAN is supported but only the generic one. SW-tag and HW-tag based KASAN have less impact on memory footprint or performance, and are worth supporting.
The following patch adds a choice menu in the menuconfig, allowing SW-tag or HW-tag to be selected.
commit a1db3ed8ad00a136f815a48e07962c96d777b38d
Author: Zhen XIN <zhen.xin at nokia-sbell.com>
Date: Tue Jul 4 09:44:01 2023 +0000
build: Add option KERNEL_KASAN_SW_TAGS and HW_TAGS
Add choice menu for software and hardware Tag-Based KASAN, in addition to the generic one.
Signed-off-by: Zhen XIN <zhen.xin at nokia-sbell.com>
diff --git a/config/Config-kernel.in b/config/Config-kernel.in
index 7de0d17b5e..00276bffb4 100644
--- a/config/Config-kernel.in
+++ b/config/Config-kernel.in
@@ -184,16 +184,73 @@ config KERNEL_KASAN_VMALLOC
will have no effect.
if KERNEL_KASAN
- config KERNEL_KASAN_GENERIC
- def_bool y
+choice
+ prompt "KASAN mode"
+ depends on KERNEL_KASAN
+ default KERNEL_KASAN_GENERIC
+ help
+ KASAN has three modes:
+
+ 1. Generic KASAN (supported by many architectures, enabled with
+ CONFIG_KASAN_GENERIC, similar to userspace ASan),
+ 2. Software Tag-Based KASAN (arm64 only, based on software memory
+ tagging, enabled with CONFIG_KASAN_SW_TAGS, similar to userspace
+ HWASan), and
+ 3. Hardware Tag-Based KASAN (arm64 only, based on hardware memory
+ tagging, enabled with CONFIG_KASAN_HW_TAGS).
+
+config KERNEL_KASAN_GENERIC
+ bool "Generic KASAN"
+ select KERNEL_SLUB_DEBUG
+ help
+ Enables Generic KASAN.
+
+ Consumes about 1/8th of available memory at kernel start and adds an
+ overhead of ~50% for dynamic allocations.
+ The performance slowdown is ~x3.
+
+config KERNEL_KASAN_SW_TAGS
+ bool "Software Tag-Based KASAN"
+ depends on aarch64
+ select KERNEL_SLUB_DEBUG
+ help
+ Enables Software Tag-Based KASAN.
+
+ Supported only on arm64 CPUs and relies on Top Byte Ignore.
+
+ Consumes about 1/16th of available memory at kernel start and
+ add an overhead of ~20% for dynamic allocations.
+
+ May potentially introduce problems related to pointer casting and
+ comparison, as it embeds a tag into the top byte of each pointer.
+
+config KERNEL_KASAN_HW_TAGS
+ bool "Hardware Tag-Based KASAN"
+ depends on aarch64
+ select KERNEL_SLUB_DEBUG
+ select KERNEL_ARM64_MTE
+ help
+ Enables Hardware Tag-Based KASAN.
+
+ Supported only on arm64 CPUs starting from ARMv8.5 and relies on
+ Memory Tagging Extension and Top Byte Ignore.
+
+ Consumes about 1/32nd of available memory.
+
+ May potentially introduce problems related to pointer casting and
+ comparison, as it embeds a tag into the top byte of each pointer.
+
+endchoice
+
+ config KERNEL_ARM64_MTE
+ def_bool n
- config KERNEL_KASAN_SW_TAGS
- def_bool n
endif
choice
prompt "Instrumentation type"
depends on KERNEL_KASAN
+ depends on !KERNEL_KASAN_HW_TAGS
default KERNEL_KASAN_OUTLINE
config KERNEL_KASAN_OUTLINE
More information about the openwrt-devel
mailing list