[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