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 <e...@netbsd.org> @@ -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.