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