kasan: fix panic issue when open kasan with vmap stack [1/1]
authorTao Zeng <tao.zeng@amlogic.com>
Mon, 24 Jun 2019 10:39:48 +0000 (18:39 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Mon, 24 Jun 2019 11:53:54 +0000 (04:53 -0700)
PD#SWPL-10141

Problem:
When open kasan with vmap stack on ARM32 platform, there
will be a panic issue which pc is running out of range:
[ 56.726530@2] PC is at 0x50
[ 56.729301@2] LR is at 0x0

Solution:
Close kasan when open vmap stack on ARM32

Verify:
TL1

Change-Id: Id82eb27543e8eade86b281cde9e160b8bf4e7878
Signed-off-by: Tao Zeng <tao.zeng@amlogic.com>
arch/arm/include/asm/memory.h
arch/arm/kernel/Makefile
drivers/amlogic/memory_ext/Kconfig

index 60c66ab..d118b5e 100644 (file)
 
 #ifdef CONFIG_MMU
 
-#ifdef CONFIG_AMLOGIC_VMAP
-/*
- * TASK_SIZE - the maximum size of a user space task.
- * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
- */
 #ifdef CONFIG_AMLOGIC_KASAN32
 /*
  * if open AMLOGIC_KASAN32, PAGE_OFFSET is set to 0xD0000000
  * can be 0xC0000000 and total 256mb space for vmalloc
  */
 #define VMALLOC_START          (UL(CONFIG_PAGE_OFFSET) - UL(SZ_256M))
-#define TASK_SIZE              (VMALLOC_START - UL(SZ_128M))
 #define KMEM_END               (0xffa00000UL)
+#define TASK_SIZE              (VMALLOC_START - UL(SZ_128M))
 #else /* CONFIG_AMLOGIC_KASAN32 */
-#define TASK_SIZE              (UL(CONFIG_PAGE_OFFSET) - UL(SZ_64M))
-#endif
-#else
 /*
  * TASK_SIZE - the maximum size of a user space task.
  * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
  */
+#ifdef CONFIG_AMLOGIC_VMAP
+#define TASK_SIZE              (UL(CONFIG_PAGE_OFFSET) - UL(SZ_64M))
+#else
 #define TASK_SIZE              (UL(CONFIG_PAGE_OFFSET) - UL(SZ_16M))
 #endif /* CONFIG_AMLOGIC_VMAP */
+#endif
 #define TASK_UNMAPPED_BASE     ALIGN(TASK_SIZE / 3, SZ_16M)
 
 /*
  */
 #define TASK_SIZE_26           (UL(1) << 26)
 
-#ifdef CONFIG_AMLOGIC_VMAP
-#ifndef CONFIG_THUMB2_KERNEL
 #ifdef CONFIG_AMLOGIC_KASAN32
 #define MODULES_VADDR          (PAGE_OFFSET - SZ_16M + SZ_4M + SZ_2M)
-#else
+#elif defined(CONFIG_AMLOGIC_VMAP)
 #define MODULES_VADDR          (PAGE_OFFSET - SZ_64M)
-#endif /* CONFIG_AMLOGIC_KASAN32 */
 #else
-#define MODULES_VADDR          (PAGE_OFFSET - SZ_8M)
-#endif
-#else  /* CONFIG_AMLOGIC_VMAP */
 /*
  * The module space lives between the addresses given by TASK_SIZE
  * and PAGE_OFFSET - it must be within 32MB of the kernel text.
index ad325a8..2fc2cd0 100644 (file)
@@ -96,3 +96,6 @@ endif
 obj-$(CONFIG_HAVE_ARM_SMCCC)   += smccc-call.o
 
 extra-y := $(head-y) vmlinux.lds
+
+KASAN_SANITIZE_process.o := n
+KASAN_SANITIZE_unwind.o := n
index 0da0422..ec29a6d 100644 (file)
@@ -55,6 +55,7 @@ config AMLOGIC_KASAN32
 config AMLOGIC_VMAP
        bool "Amlogic kernel stack"
        depends on AMLOGIC_MEMORY_EXTEND
+       depends on ARM64 || !KASAN
        default y
        help
                This config is used to enable amlogic kernel stack