Module Name: src
Committed By: christos
Date: Sun May 22 14:26:10 UTC 2016
Modified Files:
src/sys/kern: exec_elf.c exec_subr.c init_main.c kern_exec.c kern_pax.c
src/sys/sys: pax.h
src/sys/uvm: uvm_mmap.c
Log Message:
reduce #ifdef mess caused by PaX
To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 src/sys/kern/exec_elf.c
cvs rdiff -u -r1.75 -r1.76 src/sys/kern/exec_subr.c
cvs rdiff -u -r1.479 -r1.480 src/sys/kern/init_main.c
cvs rdiff -u -r1.429 -r1.430 src/sys/kern/kern_exec.c
cvs rdiff -u -r1.48 -r1.49 src/sys/kern/kern_pax.c
cvs rdiff -u -r1.20 -r1.21 src/sys/sys/pax.h
cvs rdiff -u -r1.156 -r1.157 src/sys/uvm/uvm_mmap.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/exec_elf.c
diff -u src/sys/kern/exec_elf.c:1.83 src/sys/kern/exec_elf.c:1.84
--- src/sys/kern/exec_elf.c:1.83 Sat May 7 21:28:09 2016
+++ src/sys/kern/exec_elf.c Sun May 22 10:26:09 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: exec_elf.c,v 1.83 2016/05/08 01:28:09 christos Exp $ */
+/* $NetBSD: exec_elf.c,v 1.84 2016/05/22 14:26:09 christos Exp $ */
/*-
* Copyright (c) 1994, 2000, 2005, 2015 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: exec_elf.c,v 1.83 2016/05/08 01:28:09 christos Exp $");
+__KERNEL_RCSID(1, "$NetBSD: exec_elf.c,v 1.84 2016/05/22 14:26:09 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_pax.h"
@@ -124,9 +124,6 @@ elf_placedynexec(struct exec_package *ep
if (ph[i].p_type == PT_LOAD && ph[i].p_align > align)
align = ph[i].p_align;
-#ifndef PAX_ASLR
-# define pax_aslr_exec_offset(epp, align) MAX(align, PAGE_SIZE)
-#endif
offset = (Elf_Addr)pax_aslr_exec_offset(epp, align);
offset += epp->ep_vm_minaddr;
@@ -929,13 +926,9 @@ netbsd_elf_signature(struct lwp *l, stru
ELF_NOTE_PAX_NAMESZ) == 0) {
uint32_t flags;
memcpy(&flags, ndesc, sizeof(flags));
-#if defined(PAX_MPROTECT) || defined(PAX_SEGVGUARD) || defined(PAX_ASLR)
/* Convert the flags and insert them into
* the exec package. */
pax_setup_elf_flags(epp, flags);
-#else
- (void)flags; /* UNUSED */
-#endif /* PAX_MPROTECT || PAX_SEGVGUARD || PAX_ASLR */
break;
}
BADNOTE("PaX tag");
Index: src/sys/kern/exec_subr.c
diff -u src/sys/kern/exec_subr.c:1.75 src/sys/kern/exec_subr.c:1.76
--- src/sys/kern/exec_subr.c:1.75 Fri May 13 13:33:43 2016
+++ src/sys/kern/exec_subr.c Sun May 22 10:26:09 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: exec_subr.c,v 1.75 2016/05/13 17:33:43 christos Exp $ */
+/* $NetBSD: exec_subr.c,v 1.76 2016/05/22 14:26:09 christos Exp $ */
/*
* Copyright (c) 1993, 1994, 1996 Christopher G. Demetriou
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.75 2016/05/13 17:33:43 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.76 2016/05/22 14:26:09 christos Exp $");
#include "opt_pax.h"
@@ -394,9 +394,7 @@ exec_setup_stack(struct lwp *l, struct e
DPRINTF(("ep_minsaddr=%#jx max_stack_size=%#jx\n",
(uintmax_t)epp->ep_minsaddr, (uintmax_t)max_stack_size));
-#ifdef PAX_ASLR
pax_aslr_stack(epp, &max_stack_size);
-#endif /* PAX_ASLR */
DPRINTF(("[RLIMIT_STACK].lim_cur=%#jx max_stack_size=%#jx\n",
(uintmax_t)l->l_proc->p_rlimit[RLIMIT_STACK].rlim_cur,
Index: src/sys/kern/init_main.c
diff -u src/sys/kern/init_main.c:1.479 src/sys/kern/init_main.c:1.480
--- src/sys/kern/init_main.c:1.479 Mon Mar 28 12:45:44 2016
+++ src/sys/kern/init_main.c Sun May 22 10:26:09 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: init_main.c,v 1.479 2016/03/28 16:45:44 macallan Exp $ */
+/* $NetBSD: init_main.c,v 1.480 2016/05/22 14:26:09 christos Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.479 2016/03/28 16:45:44 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.480 2016/05/22 14:26:09 christos Exp $");
#include "opt_ddb.h"
#include "opt_inet.h"
@@ -198,9 +198,7 @@ extern void *_binary_splash_image_end;
#include <sys/syscall.h>
#include <sys/syscallargs.h>
-#if defined(PAX_MPROTECT) || defined(PAX_SEGVGUARD) || defined(PAX_ASLR)
#include <sys/pax.h>
-#endif /* PAX_MPROTECT || PAX_SEGVGUARD || PAX_ASLR */
#include <secmodel/secmodel.h>
@@ -527,9 +525,7 @@ main(void)
veriexec_init();
#endif /* NVERIEXEC > 0 */
-#if defined(PAX_MPROTECT) || defined(PAX_SEGVGUARD) || defined(PAX_ASLR)
pax_init();
-#endif /* PAX_MPROTECT || PAX_SEGVGUARD || PAX_ASLR */
#ifdef IPSEC
/* Attach network crypto subsystem */
Index: src/sys/kern/kern_exec.c
diff -u src/sys/kern/kern_exec.c:1.429 src/sys/kern/kern_exec.c:1.430
--- src/sys/kern/kern_exec.c:1.429 Tue May 10 22:18:27 2016
+++ src/sys/kern/kern_exec.c Sun May 22 10:26:09 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_exec.c,v 1.429 2016/05/11 02:18:27 ozaki-r Exp $ */
+/* $NetBSD: kern_exec.c,v 1.430 2016/05/22 14:26:09 christos Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.429 2016/05/11 02:18:27 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.430 2016/05/22 14:26:09 christos Exp $");
#include "opt_exec.h"
#include "opt_execfmt.h"
@@ -761,12 +761,6 @@ execve_loadvm(struct lwp *l, const char
* Calculate the new stack size.
*/
-#ifdef PAX_ASLR
-#define ASLR_GAP(epp) pax_aslr_stack_gap(epp)
-#else
-#define ASLR_GAP(epp) 0
-#endif
-
#ifdef __MACHINE_STACK_GROWS_UP
/*
* copyargs() fills argc/argv/envp from the lower address even on
@@ -782,7 +776,7 @@ execve_loadvm(struct lwp *l, const char
data->ed_argslen = calcargs(data, argenvstrlen);
- const size_t len = calcstack(data, ASLR_GAP(epp) + RTLD_GAP);
+ const size_t len = calcstack(data, pax_aslr_stack_gap(epp) + RTLD_GAP);
if (len > epp->ep_ssize) {
/* in effect, compare to initial limit */
@@ -1164,9 +1158,7 @@ execve_runproc(struct lwp *l, struct exe
vm->vm_maxsaddr = (void *)epp->ep_maxsaddr;
vm->vm_minsaddr = (void *)epp->ep_minsaddr;
-#ifdef PAX_ASLR
pax_aslr_init_vm(l, vm, epp);
-#endif /* PAX_ASLR */
/* Now map address space. */
error = execve_dovmcmds(l, data);
Index: src/sys/kern/kern_pax.c
diff -u src/sys/kern/kern_pax.c:1.48 src/sys/kern/kern_pax.c:1.49
--- src/sys/kern/kern_pax.c:1.48 Sat May 21 21:09:09 2016
+++ src/sys/kern/kern_pax.c Sun May 22 10:26:09 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_pax.c,v 1.48 2016/05/22 01:09:09 christos Exp $ */
+/* $NetBSD: kern_pax.c,v 1.49 2016/05/22 14:26:09 christos Exp $ */
/*
* Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_pax.c,v 1.48 2016/05/22 01:09:09 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_pax.c,v 1.49 2016/05/22 14:26:09 christos Exp $");
#include "opt_pax.h"
@@ -451,13 +451,13 @@ pax_aslr_elf_flags_active(uint32_t flags
return true;
}
-bool
+static bool
pax_aslr_epp_active(struct exec_package *epp)
{
return pax_flags_active(epp->ep_pax_flags, P_PAX_ASLR);
}
-bool
+static bool
pax_aslr_active(struct lwp *l)
{
return pax_flags_active(l->l_proc->p_pax, P_PAX_ASLR);
Index: src/sys/sys/pax.h
diff -u src/sys/sys/pax.h:1.20 src/sys/sys/pax.h:1.21
--- src/sys/sys/pax.h:1.20 Sat May 7 21:28:09 2016
+++ src/sys/sys/pax.h Sun May 22 10:26:10 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: pax.h,v 1.20 2016/05/08 01:28:09 christos Exp $ */
+/* $NetBSD: pax.h,v 1.21 2016/05/22 14:26:10 christos Exp $ */
/*-
* Copyright (c) 2006 Elad Efrat <[email protected]>
@@ -52,8 +52,14 @@ struct vmspace;
extern int pax_aslr_debug;
#endif
+#if defined(PAX_MPROTECT) || defined(PAX_SEGVGUARD) || defined(PAX_ASLR)
void pax_init(void);
void pax_setup_elf_flags(struct exec_package *, uint32_t);
+#else
+# define pax_init()
+# define pax_setup_elf_flags(e, flags) __USE(flags)
+#endif
+
void pax_mprotect_adjust(
#ifdef PAX_MPROTECT_DEBUG
const char *, size_t,
@@ -75,12 +81,18 @@ int pax_segvguard(struct lwp *, struct v
#define PAX_ASLR_DELTA(delta, lsb, len) \
(((delta) & ((1UL << (len)) - 1)) << (lsb))
-bool pax_aslr_epp_active(struct exec_package *);
-bool pax_aslr_active(struct lwp *);
+#ifdef PAX_ASLR
void pax_aslr_init_vm(struct lwp *, struct vmspace *, struct exec_package *);
void pax_aslr_stack(struct exec_package *, u_long *);
uint32_t pax_aslr_stack_gap(struct exec_package *);
vaddr_t pax_aslr_exec_offset(struct exec_package *, vaddr_t);
void pax_aslr_mmap(struct lwp *, vaddr_t *, vaddr_t, int);
+#else
+# define pax_aslr_init_vm(l, v, e)
+# define pax_aslr_stack(e, o)
+# define pax_aslr_stack_gap(e) 0
+# define pax_aslr_exec_offset(e, a) MAX(a, PAGE_SIZE)
+# define pax_aslr_mmap(l, a, b, c)
+#endif
#endif /* !_SYS_PAX_H_ */
Index: src/sys/uvm/uvm_mmap.c
diff -u src/sys/uvm/uvm_mmap.c:1.156 src/sys/uvm/uvm_mmap.c:1.157
--- src/sys/uvm/uvm_mmap.c:1.156 Thu Apr 7 08:07:36 2016
+++ src/sys/uvm/uvm_mmap.c Sun May 22 10:26:09 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_mmap.c,v 1.156 2016/04/07 12:07:36 christos Exp $ */
+/* $NetBSD: uvm_mmap.c,v 1.157 2016/05/22 14:26:09 christos Exp $ */
/*
* Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.156 2016/04/07 12:07:36 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.157 2016/05/22 14:26:09 christos Exp $");
#include "opt_compat_netbsd.h"
#include "opt_pax.h"
@@ -417,9 +417,7 @@ sys_mmap(struct lwp *l, const struct sys
PAX_MPROTECT_ADJUST(l, &prot, &maxprot);
-#ifdef PAX_ASLR
pax_aslr_mmap(l, &addr, orig_addr, flags);
-#endif /* PAX_ASLR */
/*
* now let kernel internal function uvm_mmap do the work.