Module Name:    src
Committed By:   skrll
Date:           Sun Mar 21 07:32:44 UTC 2021

Modified Files:
        src/sys/arch/aarch64/aarch64: aarch64_machdep.c
        src/sys/arch/aarch64/include: asan.h vmparam.h

Log Message:
Adjust the kernel virtual address space so that KASAN will map the kernel
seperately from managed kernel virtual memory and not map the unused space
between the two.


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/arch/aarch64/aarch64/aarch64_machdep.c
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/aarch64/include/asan.h
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/aarch64/include/vmparam.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/aarch64/aarch64/aarch64_machdep.c
diff -u src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.57 src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.58
--- src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.57	Sun Mar 21 07:17:12 2021
+++ src/sys/arch/aarch64/aarch64/aarch64_machdep.c	Sun Mar 21 07:32:44 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: aarch64_machdep.c,v 1.57 2021/03/21 07:17:12 skrll Exp $ */
+/* $NetBSD: aarch64_machdep.c,v 1.58 2021/03/21 07:32:44 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.57 2021/03/21 07:17:12 skrll Exp $");
+__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.58 2021/03/21 07:32:44 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_cpuoptions.h"
@@ -96,6 +96,11 @@ vaddr_t module_start, module_end;
 static struct vm_map module_map_store;
 #endif
 
+#ifdef KASAN
+vaddr_t kasan_kernelstart;
+vaddr_t kasan_kernelsize;
+#endif
+
 /* XXX */
 vaddr_t physical_start;
 vaddr_t physical_end;
@@ -195,6 +200,11 @@ cpu_kernel_vm_init(uint64_t memory_start
 	    kernstart_phys, kernend_phys, kernend_extra);
 	fdt_memory_remove_range(kernstart_phys,
 	     kernend_phys - kernstart_phys + kernend_extra);
+
+#ifdef KASAN
+	kasan_kernelstart = kernstart;
+	kasan_kernelsize = L2_ROUND_BLOCK(kernend) - kernstart;
+#endif
 }
 
 
@@ -245,8 +255,10 @@ initarm_common(vaddr_t kvm_base, vsize_t
 
 	kernstart = trunc_page((vaddr_t)__kernel_text);
 	kernend = round_page((vaddr_t)_end);
+
 	kernstart_l2 = L2_TRUNC_BLOCK(kernstart);
 	kernend_l2 = L2_ROUND_BLOCK(kernend);
+
 	kernelvmstart = kernend_l2;
 
 #ifdef MODULAR
@@ -266,6 +278,10 @@ initarm_common(vaddr_t kvm_base, vsize_t
 	kernelvmstart = module_end;
 #endif /* MODULAR */
 
+	KASSERT(kernelvmstart < VM_KERNEL_VM_BASE);
+
+	kernelvmstart = VM_KERNEL_VM_BASE;
+
 	paddr_t kernstart_phys __unused = KERN_VTOPHYS(kernstart);
 	paddr_t kernend_phys __unused = KERN_VTOPHYS(kernend);
 
@@ -307,12 +323,13 @@ initarm_common(vaddr_t kvm_base, vsize_t
 	    "kernel_start_l2       = 0x%016lx\n"
 	    "kernel_start          = 0x%016lx\n"
 	    "kernel_end            = 0x%016lx\n"
+	    "(extra)               = 0x%016lx\n"
 	    "kernel_end_l2         = 0x%016lx\n"
 #ifdef MODULAR
 	    "module_start          = 0x%016lx\n"
 	    "module_end            = 0x%016lx\n"
 #endif
-	    "(kernel va area)\n"
+	    "(kernel va area)      = 0x%016lx\n"
 	    "(devmap va area)      = 0x%016lx\n"
 	    "VM_MAX_KERNEL_ADDRESS = 0x%016lx\n"
 	    "------------------------------------------\n",
@@ -328,11 +345,13 @@ initarm_common(vaddr_t kvm_base, vsize_t
 	    kernstart_l2,
 	    kernstart,
 	    kernend,
+	    kernend_extra,
 	    kernend_l2,
 #ifdef MODULAR
 	    module_start,
 	    module_end,
 #endif
+	    VM_KERNEL_VM_BASE,
 	    VM_KERNEL_IO_ADDRESS,
 	    VM_MAX_KERNEL_ADDRESS);
 

Index: src/sys/arch/aarch64/include/asan.h
diff -u src/sys/arch/aarch64/include/asan.h:1.16 src/sys/arch/aarch64/include/asan.h:1.17
--- src/sys/arch/aarch64/include/asan.h:1.16	Fri Dec 11 18:03:33 2020
+++ src/sys/arch/aarch64/include/asan.h	Sun Mar 21 07:32:44 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: asan.h,v 1.16 2020/12/11 18:03:33 skrll Exp $	*/
+/*	$NetBSD: asan.h,v 1.17 2021/03/21 07:32:44 skrll Exp $	*/
 
 /*
  * Copyright (c) 2018-2020 Maxime Villard, m00nbsd.net
@@ -206,10 +206,14 @@ kasan_md_init(void)
 
 	CTASSERT((__MD_SHADOW_SIZE / L0_SIZE) == 64);
 
+	extern vaddr_t kasan_kernelstart;
+	extern vaddr_t kasan_kernelsize;
+
+	kasan_shadow_map((void *)kasan_kernelstart, kasan_kernelsize);
+
 	/* The VAs we've created until now. */
 	vaddr_t eva = pmap_growkernel(VM_KERNEL_VM_BASE);
-	kasan_shadow_map((void *)VM_MIN_KERNEL_ADDRESS,
-	    eva - VM_MIN_KERNEL_ADDRESS);
+	kasan_shadow_map((void *)VM_KERNEL_VM_BASE, eva - VM_KERNEL_VM_BASE);
 }
 
 static inline bool

Index: src/sys/arch/aarch64/include/vmparam.h
diff -u src/sys/arch/aarch64/include/vmparam.h:1.17 src/sys/arch/aarch64/include/vmparam.h:1.18
--- src/sys/arch/aarch64/include/vmparam.h:1.17	Tue Nov 10 07:51:19 2020
+++ src/sys/arch/aarch64/include/vmparam.h	Sun Mar 21 07:32:44 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: vmparam.h,v 1.17 2020/11/10 07:51:19 skrll Exp $ */
+/* $NetBSD: vmparam.h,v 1.18 2021/03/21 07:32:44 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -133,6 +133,7 @@
  *   0xffff_8000_0000_0000  -    1G  EFI_RUNTIME
  *   0xffff_8000_4000_0000  -   64T  (not used)
  *   0xffff_c000_0000_0000  -   64T  KERNEL VM Space (including text/data/bss)
+ *  (0xffff_c000_4000_0000     -1GB) KERNEL VM start of KVM
  *   0xffff_ffff_f000_0000  -  254M  KERNEL_IO for pmap_devmap
  *   0xffff_ffff_ffe0_0000  -    2M  RESERVED
  */
@@ -146,9 +147,8 @@
 #define VM_KERNEL_IO_ADDRESS	0xfffffffff0000000L
 #define VM_KERNEL_IO_SIZE	(VM_MAX_KERNEL_ADDRESS - VM_KERNEL_IO_ADDRESS)
 
-#define VM_KERNEL_VM_BASE	VM_MIN_KERNEL_ADDRESS
-#define VM_KERNEL_VM_SIZE	(VM_MAX_KERNEL_ADDRESS - VM_KERNEL_VM_BASE)
-
+#define VM_KERNEL_VM_BASE	(0xffffc00040000000L)
+#define VM_KERNEL_VM_SIZE	(VM_KERNEL_IO_ADDRESS - VM_KERNEL_VM_BASE)
 /*
  * Reserved space for EFI runtime services
  */

Reply via email to