From 939df36e552ea9012b7b0d0d15080f894ebaaaff Mon Sep 17 00:00:00 2001 From: chs Date: Sun, 24 Aug 2003 17:52:28 +0000 Subject: add support for non-executable mappings (where the hardware allows this) and make the stack and heap non-executable by default. the changes fall into two basic catagories: - pmap and trap-handler changes. these are all MD: = alpha: we already track per-page execute permission with the (software) PG_EXEC bit, so just have the trap handler pay attention to it. = i386: use a new GDT segment for %cs for processes that have no executable mappings above a certain threshold (currently the bottom of the stack). track per-page execute permission with the last unused PTE bit. = powerpc/ibm4xx: just use the hardware exec bit. = powerpc/oea: we already track per-page exec bits, but the hardware only implements non-exec mappings at the segment level. so track the number of executable mappings in each segment and turn on the no-exec segment bit iff the count is 0. adjust the trap handler to deal. = sparc (sun4m): fix our use of the hardware protection bits. fix the trap handler to recognize text faults. = sparc64: split the existing unified TSB into data and instruction TSBs, and only load TTEs into the appropriate TSB(s) for the permissions. fix the trap handler to check for execute permission. = not yet implemented: amd64, hppa, sh5 - changes in all the emulations that put a signal trampoline on the stack. instead, we now put the trampoline into a uvm_aobj and map that into the process separately. originally from openbsd, adapted for netbsd by me. --- sys/compat/linux/common/linux_exec.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'sys/compat/linux/common/linux_exec.c') diff --git a/sys/compat/linux/common/linux_exec.c b/sys/compat/linux/common/linux_exec.c index b61cb0f0b0e..8525d570fb3 100644 --- a/sys/compat/linux/common/linux_exec.c +++ b/sys/compat/linux/common/linux_exec.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux_exec.c,v 1.64 2003/06/29 22:29:26 fvdl Exp $ */ +/* $NetBSD: linux_exec.c,v 1.65 2003/08/24 17:52:43 chs Exp $ */ /*- * Copyright (c) 1994, 1995, 1998, 2000 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: linux_exec.c,v 1.64 2003/06/29 22:29:26 fvdl Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_exec.c,v 1.65 2003/08/24 17:52:43 chs Exp $"); #include #include @@ -111,6 +111,9 @@ linux_sys_execve(l, v, retval) /* * Emulation switch. */ + +struct uvm_object *emul_linux_object; + const struct emul emul_linux = { "linux", "/emul/linux", @@ -126,6 +129,7 @@ const struct emul emul_linux = { linux_trapsignal, linux_sigcode, linux_esigcode, + &emul_linux_object, linux_setregs, linux_e_proc_exec, linux_e_proc_fork, -- cgit