@@ -36,6 +36,7 @@ config X86_64
select ARCH_HAS_ELFCORE_COMPAT
select ZONE_DMA32
select EXECMEM if DYNAMIC_FTRACE
+ select ARCH_HAS_KASAN_SW_TAGS_DENSE
config FORCE_DYNAMIC_FTRACE
def_bool y
@@ -190,6 +191,7 @@ config X86
select HAVE_ARCH_JUMP_LABEL_RELATIVE
select HAVE_ARCH_KASAN if X86_64
select HAVE_ARCH_KASAN_VMALLOC if X86_64
+ select HAVE_ARCH_KASAN_SW_TAGS if ADDRESS_MASKING
select HAVE_ARCH_KFENCE
select HAVE_ARCH_KMSAN if X86_64
select HAVE_ARCH_KGDB
@@ -394,6 +396,12 @@ config KASAN_SHADOW_OFFSET
hex
default 0xdffffc0000000000 if KASAN_GENERIC
+config KASAN_SHADOW_SCALE_SHIFT
+ int
+ default 5 if KASAN_SW_TAGS_DENSE
+ default 4 if KASAN_SW_TAGS
+ default 3
+
config HAVE_INTEL_TXT
def_bool y
depends on INTEL_IOMMU && ACPI
@@ -13,6 +13,8 @@
#undef CONFIG_PARAVIRT_SPINLOCKS
#undef CONFIG_KASAN
#undef CONFIG_KASAN_GENERIC
+#undef CONFIG_KASAN_SW_TAGS
+#undef CONFIG_KASAN_SW_TAGS_DENSE
#define __NO_FORTIFY
@@ -6,7 +6,7 @@
#include <linux/kasan-tags.h>
#include <linux/types.h>
-#define KASAN_SHADOW_SCALE_SHIFT 3
+#define KASAN_SHADOW_SCALE_SHIFT CONFIG_KASAN_SHADOW_SCALE_SHIFT
/*
* Compiler uses shadow offset assuming that addresses start
@@ -1121,6 +1121,8 @@ void __init setup_arch(char **cmdline_p)
kasan_init();
+ kasan_init_sw_tags();
+
/*
* Sync back kernel address range.
*
Make CONFIG_KASAN_SW_TAGS available for x86 machines if they have ADDRESS_MASKING enabled (LAM) as that works similarly to Top-Byte Ignore (TBI) that allows the software tag-based mode on arm64 platform. Set scale macro based on KASAN mode: in software tag-based mode 32 bytes of memory map to one shadow byte and 16 in generic mode. Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com> --- arch/x86/Kconfig | 8 ++++++++ arch/x86/boot/compressed/misc.h | 2 ++ arch/x86/include/asm/kasan.h | 2 +- arch/x86/kernel/setup.c | 2 ++ 4 files changed, 13 insertions(+), 1 deletion(-)