diff options
| author | maxv <maxv@NetBSD.org> | 2016-05-15 07:17:53 +0000 |
|---|---|---|
| committer | maxv <maxv@NetBSD.org> | 2016-05-15 07:17:53 +0000 |
| commit | 266038ae0711162ffa8f9bb3d60477fb1e52e1e4 (patch) | |
| tree | c75fe84db19733afb8c881158ce651aff4221f4d /sys | |
| parent | 068cb85bfbe17821b8d73662b680ed7d932206ef (diff) | |
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.
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/arch/amd64/amd64/locore.S | 21 | ||||
| -rw-r--r-- | sys/arch/i386/i386/locore.S | 23 |
2 files changed, 21 insertions, 23 deletions
diff --git a/sys/arch/amd64/amd64/locore.S b/sys/arch/amd64/amd64/locore.S index 5c4c6f21df9..081e37572c4 100644 --- a/sys/arch/amd64/amd64/locore.S +++ b/sys/arch/amd64/amd64/locore.S @@ -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 diff --git a/sys/arch/i386/i386/locore.S b/sys/arch/i386/i386/locore.S index 2007af5c595..fce1bf85a33 100644 --- a/sys/arch/i386/i386/locore.S +++ b/sys/arch/i386/i386/locore.S @@ -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 |
