Module Name: src
Committed By: maxv
Date: Sat Jul 9 06:58:06 UTC 2016
Modified Files:
src/sys/arch/amd64/amd64: locore.S
src/sys/arch/i386/i386: locore.S
Log Message:
The CPU considers a given va as executable if none of its levels have
the NOX bit. With the top level recursive slot, however, several levels
are recursively omitted, which implies that each entry that is not the
child of NOX-ed parents actually appears somewhere in the virtual space
as executable via this slot, even if it is followed by an underlying
entry that has the NOX bit.
This recursive slot is only used to edit the page tree itself. Make it
non-executable.
To generate a diff of this commit:
cvs rdiff -u -r1.105 -r1.106 src/sys/arch/amd64/amd64/locore.S
cvs rdiff -u -r1.134 -r1.135 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.105 src/sys/arch/amd64/amd64/locore.S:1.106
--- src/sys/arch/amd64/amd64/locore.S:1.105 Fri Jul 8 09:15:38 2016
+++ src/sys/arch/amd64/amd64/locore.S Sat Jul 9 06:58:06 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.105 2016/07/08 09:15:38 maxv Exp $ */
+/* $NetBSD: locore.S,v 1.106 2016/07/09 06:58:06 maxv Exp $ */
/*
* Copyright-o-rama!
@@ -777,12 +777,12 @@ no_NOX:
movl $NKL4_KIMG_ENTRIES,%ecx
fillkpt
- /* Install recursive top level PDE */
+ /* Install recursive top level PDE (one entry) */
leal (PROC0_PML4_OFF + PDIR_SLOT_PTE * PDE_SIZE)(%esi),%ebx
leal (PROC0_PML4_OFF)(%esi),%eax
orl $(PG_V|PG_KW),%eax
- movl %eax,(%ebx)
- movl $0,(PDE_SIZE-4)(%ebx)
+ movl $1,%ecx
+ fillkpt_nox
/*
* Startup checklist:
Index: src/sys/arch/i386/i386/locore.S
diff -u src/sys/arch/i386/i386/locore.S:1.134 src/sys/arch/i386/i386/locore.S:1.135
--- src/sys/arch/i386/i386/locore.S:1.134 Fri Jul 8 09:15:38 2016
+++ src/sys/arch/i386/i386/locore.S Sat Jul 9 06:58:06 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.134 2016/07/08 09:15:38 maxv Exp $ */
+/* $NetBSD: locore.S,v 1.135 2016/07/09 06:58:06 maxv Exp $ */
/*
* Copyright-o-rama!
@@ -128,7 +128,7 @@
*/
#include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.134 2016/07/08 09:15:38 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.135 2016/07/09 06:58:06 maxv Exp $");
#include "opt_compat_oldboot.h"
#include "opt_copy_symtab.h"
@@ -776,12 +776,12 @@ no_NOX:
movl RELOC(nkptp)+1*4,%ecx
fillkpt
- /* Install a PDE recursively mapping page directory as a page table! */
+ /* Install recursive top level PDE */
leal (PROC0_PDIR_OFF + PDIR_SLOT_PTE * PDE_SIZE)(%esi),%ebx
leal (PROC0_PDIR_OFF)(%esi),%eax
orl $(PG_V|PG_KW),%eax
movl $PDP_SIZE,%ecx
- fillkpt
+ fillkpt_nox
#ifdef PAE
/*