Module Name:    src
Committed By:   maxv
Date:           Sun May 15 07:17:53 UTC 2016

Modified Files:
        src/sys/arch/amd64/amd64: locore.S
        src/sys/arch/i386/i386: locore.S

Log Message:
Split the PRELOADED_MODULES+BOOTSTRAP_TABLES chunk into two separate
chunks mapped independently with RWX and RW, on both amd64 and i386.

This way the BOOTSTRAP TABLES are non-executable.


To generate a diff of this commit:
cvs rdiff -u -r1.91 -r1.92 src/sys/arch/amd64/amd64/locore.S
cvs rdiff -u -r1.123 -r1.124 src/sys/arch/i386/i386/locore.S

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/locore.S
diff -u src/sys/arch/amd64/amd64/locore.S:1.91 src/sys/arch/amd64/amd64/locore.S:1.92
--- src/sys/arch/amd64/amd64/locore.S:1.91	Sun May 15 07:01:36 2016
+++ src/sys/arch/amd64/amd64/locore.S	Sun May 15 07:17:53 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.91 2016/05/15 07:01:36 maxv Exp $	*/
+/*	$NetBSD: locore.S,v 1.92 2016/05/15 07:17:53 maxv Exp $	*/
 
 /*
  * Copyright-o-rama!
@@ -654,22 +654,21 @@ no_NOX:
 	orl	$(PG_V|PG_KW),%eax
 	fillkpt_nox
 
-	/*
-	 * We actually have to be careful here. The memory layout is as
-	 * follows:
-	 *    +----------+---------------------+------------------+
-	 *    | DATA+BSS < [PRELOADED MODULES] | BOOTSTRAP TABLES >
-	 *    +----------+---------------------+------------------+
-	 * We just map everything from < to > with RWX rights.
-	 */
+	/* Map [SYMS]+[PRELOADED MODULES] RWX. */
 	movl	$RELOC(__kernel_end),%eax
 	movl	%esi,%ecx		/* start of BOOTSTRAP TABLES */
-	addl	$TABLESIZE,%ecx		/* end of BOOTSTRAP TABLES */
-	subl	%eax,%ecx		/* subtract end of kernel image */
+	subl	%eax,%ecx
 	shrl	$PGSHIFT,%ecx
 	orl	$(PG_V|PG_KW),%eax
 	fillkpt
 
+	/* Map the BOOTSTRAP TABLES RW. */
+	movl	%esi,%eax		/* start of BOOTSTRAP TABLES */
+	movl	$TABLESIZE,%ecx		/* length of BOOTSTRAP TABLES */
+	shrl	$PGSHIFT,%ecx
+	orl	$(PG_V|PG_KW),%eax
+	fillkpt_nox
+
 	/* We are on (4). Map ISA I/O mem (later atdevbase) RWX. */
 	movl	$(IOM_BEGIN|PG_V|PG_KW/*|PG_N*/),%eax
 	movl	$(IOM_SIZE>>PGSHIFT),%ecx

Index: src/sys/arch/i386/i386/locore.S
diff -u src/sys/arch/i386/i386/locore.S:1.123 src/sys/arch/i386/i386/locore.S:1.124
--- src/sys/arch/i386/i386/locore.S:1.123	Sun May 15 07:01:36 2016
+++ src/sys/arch/i386/i386/locore.S	Sun May 15 07:17:53 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.123 2016/05/15 07:01:36 maxv Exp $	*/
+/*	$NetBSD: locore.S,v 1.124 2016/05/15 07:17:53 maxv Exp $	*/
 
 /*
  * Copyright-o-rama!
@@ -128,7 +128,7 @@
  */
 
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.123 2016/05/15 07:01:36 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.124 2016/05/15 07:17:53 maxv Exp $");
 
 #include "opt_compat_oldboot.h"
 #include "opt_copy_symtab.h"
@@ -718,22 +718,21 @@ no_NOX:
 	orl	$(PG_V|PG_KW),%eax
 	fillkpt_nox
 
-	/*
-	 * We actually have to be careful here. The memory layout is as
-	 * follows:
-	 *    +----------+---------------------+------------------+
-	 *    | DATA+BSS < [PRELOADED MODULES] | BOOTSTRAP TABLES >
-	 *    +----------+---------------------+------------------+
-	 * We just map everything from < to > with RWX rights.
-	 */
+	/* Map [SYMS]+[PRELOADED MODULES] RWX. */
 	movl	$RELOC(__kernel_end),%eax
 	movl	%esi,%ecx		/* start of BOOTSTRAP TABLES */
-	addl	RELOC(tablesize),%ecx	/* end of BOOTSTRAP TABLES */
-	subl	%eax,%ecx		/* subtract end of kernel image */
+	subl	%eax,%ecx
 	shrl	$PGSHIFT,%ecx
 	orl	$(PG_V|PG_KW),%eax
 	fillkpt
 
+	/* Map the BOOTSTRAP TABLES RW. */
+	movl	%esi,%eax		/* start of BOOTSTRAP TABLES */
+	movl	RELOC(tablesize),%ecx	/* length of BOOTSTRAP TABLES */
+	shrl	$PGSHIFT,%ecx
+	orl	$(PG_V|PG_KW),%eax
+	fillkpt_nox
+
 	/* We are on (4). Map ISA I/O mem (later atdevbase) RWX. */
 	movl	$(IOM_BEGIN|PG_V|PG_KW/*|PG_N*/),%eax
 	movl	$(IOM_SIZE>>PGSHIFT),%ecx

Reply via email to