Module Name:    src
Committed By:   maxv
Date:           Sun Oct  8 09:06:50 UTC 2017

Modified Files:
        src/sys/arch/amd64/amd64: machdep.c
        src/sys/arch/amd64/conf: GENERIC_KASLR files.amd64
        src/sys/arch/i386/conf: files.i386
        src/sys/arch/x86/x86: pmap.c x86_machdep.c
        src/sys/arch/xen/conf: files.compat

Log Message:
KASLR: add workarounds to compute the bootinfo VAs (use the direct map),
and don't use large pages yet. Both will be fixed later.


To generate a diff of this commit:
cvs rdiff -u -r1.262 -r1.263 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/amd64/conf/GENERIC_KASLR
cvs rdiff -u -r1.93 -r1.94 src/sys/arch/amd64/conf/files.amd64
cvs rdiff -u -r1.387 -r1.388 src/sys/arch/i386/conf/files.i386
cvs rdiff -u -r1.260 -r1.261 src/sys/arch/x86/x86/pmap.c
cvs rdiff -u -r1.96 -r1.97 src/sys/arch/x86/x86/x86_machdep.c
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/xen/conf/files.compat

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/amd64/amd64/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.262 src/sys/arch/amd64/amd64/machdep.c:1.263
--- src/sys/arch/amd64/amd64/machdep.c:1.262	Sat Sep 30 11:43:57 2017
+++ src/sys/arch/amd64/amd64/machdep.c	Sun Oct  8 09:06:50 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.262 2017/09/30 11:43:57 maxv Exp $	*/
+/*	$NetBSD: machdep.c,v 1.263 2017/10/08 09:06:50 maxv Exp $	*/
 
 /*
  * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -110,7 +110,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.262 2017/09/30 11:43:57 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.263 2017/10/08 09:06:50 maxv Exp $");
 
 /* #define XENDEBUG_LOW  */
 
@@ -122,6 +122,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 
 #include "opt_mtrr.h"
 #include "opt_realmem.h"
 #include "opt_xen.h"
+#include "opt_kaslr.h"
 #ifndef XEN
 #include "opt_physmem.h"
 #endif
@@ -1472,8 +1473,13 @@ init_x86_64_ksyms(void)
 #ifndef XEN
 	symtab = lookup_bootinfo(BTINFO_SYMTAB);
 	if (symtab) {
+#ifdef KASLR
+		tssym = PMAP_DIRECT_MAP((paddr_t)symtab->ssym);
+		tesym = PMAP_DIRECT_MAP((paddr_t)symtab->esym);
+#else
 		tssym = (vaddr_t)symtab->ssym + KERNBASE;
 		tesym = (vaddr_t)symtab->esym + KERNBASE;
+#endif
 		ksyms_addsyms_elf(symtab->nsym, (void *)tssym, (void *)tesym);
 	} else
 		ksyms_addsyms_elf(*(long *)(void *)&end,

Index: src/sys/arch/amd64/conf/GENERIC_KASLR
diff -u src/sys/arch/amd64/conf/GENERIC_KASLR:1.1 src/sys/arch/amd64/conf/GENERIC_KASLR:1.2
--- src/sys/arch/amd64/conf/GENERIC_KASLR:1.1	Sat Oct  7 10:16:47 2017
+++ src/sys/arch/amd64/conf/GENERIC_KASLR	Sun Oct  8 09:06:50 2017
@@ -1,5 +1,6 @@
-# $NetBSD: GENERIC_KASLR,v 1.1 2017/10/07 10:16:47 maxv Exp $
+# $NetBSD: GENERIC_KASLR,v 1.2 2017/10/08 09:06:50 maxv Exp $
 
 include "arch/amd64/conf/GENERIC"
 
 makeoptions 	KASLR=1		# Kernel ASLR
+options 	KASLR

Index: src/sys/arch/amd64/conf/files.amd64
diff -u src/sys/arch/amd64/conf/files.amd64:1.93 src/sys/arch/amd64/conf/files.amd64:1.94
--- src/sys/arch/amd64/conf/files.amd64:1.93	Sun Oct  8 08:26:01 2017
+++ src/sys/arch/amd64/conf/files.amd64	Sun Oct  8 09:06:50 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: files.amd64,v 1.93 2017/10/08 08:26:01 maxv Exp $
+#	$NetBSD: files.amd64,v 1.94 2017/10/08 09:06:50 maxv Exp $
 #
 # new style config file for amd64 architecture
 #
@@ -26,6 +26,7 @@ defparam opt_physmem.h	PHYSMEM_MAX_ADDR 
 
 defflag			PMC
 defflag			USER_LDT
+defflag			KASLR
 defflag eisa.h EISA
 
 # Start code

Index: src/sys/arch/i386/conf/files.i386
diff -u src/sys/arch/i386/conf/files.i386:1.387 src/sys/arch/i386/conf/files.i386:1.388
--- src/sys/arch/i386/conf/files.i386:1.387	Tue Aug 15 08:51:38 2017
+++ src/sys/arch/i386/conf/files.i386	Sun Oct  8 09:06:50 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: files.i386,v 1.387 2017/08/15 08:51:38 maxv Exp $
+#	$NetBSD: files.i386,v 1.388 2017/10/08 09:06:50 maxv Exp $
 #
 # new style config file for i386 architecture
 #
@@ -19,6 +19,7 @@ defparam		CPURESET_DELAY
 obsolete defflag	XBOX
 
 defflag			PMC
+defflag			KASLR
 
 # User-settable LDT (used by WINE)
 defflag			USER_LDT

Index: src/sys/arch/x86/x86/pmap.c
diff -u src/sys/arch/x86/x86/pmap.c:1.260 src/sys/arch/x86/x86/pmap.c:1.261
--- src/sys/arch/x86/x86/pmap.c:1.260	Sat Sep 30 12:35:48 2017
+++ src/sys/arch/x86/x86/pmap.c	Sun Oct  8 09:06:50 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.260 2017/09/30 12:35:48 maxv Exp $	*/
+/*	$NetBSD: pmap.c,v 1.261 2017/10/08 09:06:50 maxv Exp $	*/
 
 /*
  * Copyright (c) 2008, 2010, 2016, 2017 The NetBSD Foundation, Inc.
@@ -51,7 +51,6 @@
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
  */
 
 /*
@@ -171,12 +170,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.260 2017/09/30 12:35:48 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.261 2017/10/08 09:06:50 maxv Exp $");
 
 #include "opt_user_ldt.h"
 #include "opt_lockdebug.h"
 #include "opt_multiprocessor.h"
 #include "opt_xen.h"
+#include "opt_kaslr.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1605,6 +1605,11 @@ pmap_remap_largepages(void)
 	vaddr_t kva, kva_end;
 	paddr_t pa;
 
+#ifdef KASLR
+	/* XXX no large pages yet, soon */
+	return;
+#endif
+
 	/* Remap the kernel text using large pages. */
 	kva = rounddown(bootspace.text.va, NBPD_L2);
 	kva_end = rounddown(bootspace.text.va +

Index: src/sys/arch/x86/x86/x86_machdep.c
diff -u src/sys/arch/x86/x86/x86_machdep.c:1.96 src/sys/arch/x86/x86/x86_machdep.c:1.97
--- src/sys/arch/x86/x86/x86_machdep.c:1.96	Mon Oct  2 19:23:16 2017
+++ src/sys/arch/x86/x86/x86_machdep.c	Sun Oct  8 09:06:50 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: x86_machdep.c,v 1.96 2017/10/02 19:23:16 maxv Exp $	*/
+/*	$NetBSD: x86_machdep.c,v 1.97 2017/10/08 09:06:50 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007 YAMAMOTO Takashi,
@@ -31,11 +31,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.96 2017/10/02 19:23:16 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.97 2017/10/08 09:06:50 maxv Exp $");
 
 #include "opt_modular.h"
 #include "opt_physmem.h"
 #include "opt_splash.h"
+#include "opt_kaslr.h"
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -229,7 +230,11 @@ module_init_md(void)
 			    bi->path, bi->len, bi->base);
 			KASSERT(trunc_page(bi->base) == bi->base);
 			module_prime(bi->path,
+#ifdef KASLR
+			    (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base),
+#else
 			    (void *)((uintptr_t)bi->base + KERNBASE),
+#endif
 			    bi->len);
 			break;
 		case BI_MODULE_IMAGE:
@@ -238,7 +243,12 @@ module_init_md(void)
 			    bi->path, bi->len, bi->base);
 			KASSERT(trunc_page(bi->base) == bi->base);
 			splash_setimage(
-			    (void *)((uintptr_t)bi->base + KERNBASE), bi->len);
+#ifdef KASLR
+			    (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base),
+#else
+			    (void *)((uintptr_t)bi->base + KERNBASE),
+#endif
+			    bi->len);
 #endif
 			break;
 		case BI_MODULE_RND:
@@ -246,7 +256,11 @@ module_init_md(void)
 				     bi->path, bi->len, bi->base);
 			KASSERT(trunc_page(bi->base) == bi->base);
 			rnd_seed(
+#ifdef KASLR
+			    (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base),
+#else
 			    (void *)((uintptr_t)bi->base + KERNBASE),
+#endif
 			     bi->len);
 			break;
 		case BI_MODULE_FS:
@@ -254,7 +268,12 @@ module_init_md(void)
 			    bi->path, bi->len, bi->base);
 			KASSERT(trunc_page(bi->base) == bi->base);
 #if defined(MEMORY_DISK_HOOKS) && defined(MEMORY_DISK_DYNAMIC)
-			md_root_setconf((void *)((uintptr_t)bi->base + KERNBASE),
+			md_root_setconf(
+#ifdef KASLR
+			    (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base),
+#else
+			    (void *)((uintptr_t)bi->base + KERNBASE),
+#endif
 			    bi->len);
 #endif
 			break;	

Index: src/sys/arch/xen/conf/files.compat
diff -u src/sys/arch/xen/conf/files.compat:1.28 src/sys/arch/xen/conf/files.compat:1.29
--- src/sys/arch/xen/conf/files.compat:1.28	Sat Aug 12 07:21:57 2017
+++ src/sys/arch/xen/conf/files.compat	Sun Oct  8 09:06:50 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: files.compat,v 1.28 2017/08/12 07:21:57 maxv Exp $
+#	$NetBSD: files.compat,v 1.29 2017/10/08 09:06:50 maxv Exp $
 #	NetBSD: files.x86,v 1.10 2003/10/08 17:30:00 bouyer Exp 
 
 # options for MP configuration through the MP spec
@@ -6,7 +6,7 @@
 #defflag opt_mpacpi.h MPACPI MPACPI_SCANPCI
 
 # MTRR support
-defflag                 MTRR
+defflag				MTRR
 
 defflag opt_xen.h		XEN PAE
 
@@ -25,7 +25,8 @@ defflag	bioscall.h		XXXBIOSCALL
 defflag	opt_pcibios.h		XXXOPT_PCIBIOS
 defflag	opt_pcifixup.h		XXXOPT_PCIFIXUP
 
-defflag opt_pmc.h			XXXPMC
+defflag opt_pmc.h		XXXPMC
+defflag opt_kaslr.h		XXXKASLR
 
 # User-settable LDT (used by WINE)
 defflag	opt_user_ldt.h			XXXUSER_LDT

Reply via email to