Module Name:    src
Committed By:   riastradh
Date:           Tue Nov 21 14:35:36 UTC 2023

Modified Files:
        src/sys/kern: exec_subr.c
        src/sys/sys: pax.h
        src/sys/uvm: uvm_mmap.c

Log Message:
pax(9): Rework header file more coherently to nix some needless #ifs.

Cleans up some of the fallout from PR kern/57711 fixes.

Could do a little more to nix PAX_SEGVGUARD conditionals but maybe
not worth it.


To generate a diff of this commit:
cvs rdiff -u -r1.87 -r1.88 src/sys/kern/exec_subr.c
cvs rdiff -u -r1.27 -r1.28 src/sys/sys/pax.h
cvs rdiff -u -r1.184 -r1.185 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_subr.c
diff -u src/sys/kern/exec_subr.c:1.87 src/sys/kern/exec_subr.c:1.88
--- src/sys/kern/exec_subr.c:1.87	Tue Nov 21 12:12:26 2023
+++ src/sys/kern/exec_subr.c	Tue Nov 21 14:35:36 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec_subr.c,v 1.87 2023/11/21 12:12:26 martin Exp $	*/
+/*	$NetBSD: exec_subr.c,v 1.88 2023/11/21 14:35:36 riastradh 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.87 2023/11/21 12:12:26 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.88 2023/11/21 14:35:36 riastradh Exp $");
 
 #include "opt_pax.h"
 
@@ -162,7 +162,7 @@ static int
 vmcmd_get_prot(struct lwp *l, const struct exec_vmcmd *cmd, vm_prot_t *prot,
     vm_prot_t *maxprot)
 {
-	vm_prot_t extraprot __unused = PROT_MPROTECT_EXTRACT(cmd->ev_prot);
+	vm_prot_t extraprot = PROT_MPROTECT_EXTRACT(cmd->ev_prot);
 
 	*prot = cmd->ev_prot & UVM_PROT_ALL;
 	*maxprot = PAX_MPROTECT_MAXPROTECT(l, *prot, extraprot, UVM_PROT_ALL);

Index: src/sys/sys/pax.h
diff -u src/sys/sys/pax.h:1.27 src/sys/sys/pax.h:1.28
--- src/sys/sys/pax.h:1.27	Thu Jan 23 10:21:14 2020
+++ src/sys/sys/pax.h	Tue Nov 21 14:35:36 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: pax.h,v 1.27 2020/01/23 10:21:14 ad Exp $ */
+/* $NetBSD: pax.h,v 1.28 2023/11/21 14:35:36 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2006 Elad Efrat <e...@netbsd.org>
@@ -53,53 +53,80 @@ struct vmspace;
 extern int pax_aslr_debug;
 #endif
 
-void	pax_segvguard_cleanup(struct vnode *);
-
 #if defined(PAX_MPROTECT) || defined(PAX_SEGVGUARD) || defined(PAX_ASLR)
 void pax_init(void);
 void pax_set_flags(struct exec_package *, struct proc *);
 void pax_setup_elf_flags(struct exec_package *, uint32_t);
 #else
-# define pax_init()
-# define pax_set_flags(e, p)
-# define pax_setup_elf_flags(e, flags) __USE(flags)
+static inline void
+pax_init(void)
+{
+}
+static inline void
+pax_set_flags(struct exec_package *epp, struct proc *p)
+{
+}
+static inline void
+pax_setup_elf_flags(struct exec_package *epp, uint32_t flags)
+{
+}
 #endif
 
+#ifdef PAX_MPROTECT
+
 vm_prot_t pax_mprotect_maxprotect(
-#ifdef PAX_MPROTECT_DEBUG
+# ifdef PAX_MPROTECT_DEBUG
     const char *, size_t,
-#endif
+# endif
     struct lwp *, vm_prot_t, vm_prot_t, vm_prot_t);
 int pax_mprotect_validate(
-#ifdef PAX_MPROTECT_DEBUG
+# ifdef PAX_MPROTECT_DEBUG
     const char *, size_t,
-#endif
+# endif
     struct lwp *, vm_prot_t);
+int pax_mprotect_prot(struct lwp *);
 
-#ifndef PAX_MPROTECT
-# define PAX_MPROTECT_MAXPROTECT(l, active, extra, max) (max)
-# define PAX_MPROTECT_VALIDATE(l, prot) (0)
-# define pax_mprotect_prot(l)	0
 #else
-# ifdef PAX_MPROTECT_DEBUG
-#  define PAX_MPROTECT_MAXPROTECT(l, active, extra, max) \
-    pax_mprotect_maxprotect(__FILE__, __LINE__, (l), (active), (extra), (max))
-#  define PAX_MPROTECT_VALIDATE(l, prot) \
-    pax_mprotect_validate(__FILE__, __LINE__, (l), (prot))
-# else
-#  define PAX_MPROTECT_MAXPROTECT(l, active, extra, max) \
-    pax_mprotect_maxprotect((l), (active), (extra), (max))
-#  define PAX_MPROTECT_VALIDATE(l, prot) \
-    pax_mprotect_validate((l), (prot))
-# endif
-int pax_mprotect_prot(struct lwp *);
+
+static inline vm_prot_t
+pax_mprotect_maxprotect(struct lwp *l, vm_prot_t prot, vm_prot_t extra,
+    vm_prot_t max)
+{
+	return max;
+}
+static inline vm_prot_t
+pax_mprotect_validate(struct lwp *l, vm_prot_t prot)
+{
+	return 0;
+}
+static inline int
+pax_mprotect_prot(struct lwp *l)
+{
+	return 0;
+}
+
+#endif
+
+#if defined(PAX_MPROTECT) && defined(PAX_MPROTECT_DEBUG)
+# define PAX_MPROTECT_MAXPROTECT(l, active, extra, max) \
+   pax_mprotect_maxprotect(__FILE__, __LINE__, (l), (active), (extra), (max))
+# define PAX_MPROTECT_VALIDATE(l, prot) \
+   pax_mprotect_validate(__FILE__, __LINE__, (l), (prot))
+#else
+# define PAX_MPROTECT_MAXPROTECT(l, active, extra, max) \
+   pax_mprotect_maxprotect((l), (active), (extra), (max))
+# define PAX_MPROTECT_VALIDATE(l, prot) \
+   pax_mprotect_validate((l), (prot))
 #endif
+
+#ifdef PAX_SEGVGUARD
 int pax_segvguard(struct lwp *, struct vnode *, const char *, bool);
+void pax_segvguard_cleanup(struct vnode *);
+#endif
 
+#ifdef PAX_ASLR
 #define	PAX_ASLR_DELTA(delta, lsb, len)	\
     (((delta) & ((1UL << (len)) - 1)) << (lsb))
-
-#ifdef PAX_ASLR
 void pax_aslr_init_vm(struct lwp *, struct vmspace *, struct exec_package *);
 void pax_aslr_stack(struct exec_package *, vsize_t *);
 uint32_t pax_aslr_stack_gap(struct exec_package *);
@@ -107,12 +134,33 @@ vaddr_t pax_aslr_exec_offset(struct exec
 voff_t pax_aslr_rtld_offset(struct exec_package *, vaddr_t, int);
 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_rtld_offset(e, a, u) 0
-# define pax_aslr_mmap(l, a, b, c)
+static inline void
+pax_aslr_init_vm(struct lwp *l, struct vmspace *vm, struct exec_package *epp)
+{
+}
+static inline void
+pax_aslr_stack(struct exec_package *epp, vsize_t *max_stack_size)
+{
+}
+static inline uint32_t
+pax_aslr_stack_gap(struct exec_package *epp)
+{
+	return 0;
+}
+static inline vaddr_t
+pax_aslr_exec_offset(struct exec_package *epp, vaddr_t align)
+{
+	return MAX(align, PAGE_SIZE);
+}
+static inline voff_t
+pax_aslr_rtld_offset(struct exec_package *epp, vaddr_t align, int use_topdown)
+{
+	return 0;
+}
+static inline void
+pax_aslr_mmap(struct lwp *l, vaddr_t *addr, vaddr_t orig_addr, int flags)
+{
+}
 #endif
 
 #endif /* !_SYS_PAX_H_ */

Index: src/sys/uvm/uvm_mmap.c
diff -u src/sys/uvm/uvm_mmap.c:1.184 src/sys/uvm/uvm_mmap.c:1.185
--- src/sys/uvm/uvm_mmap.c:1.184	Thu Jul  7 11:29:18 2022
+++ src/sys/uvm/uvm_mmap.c	Tue Nov 21 14:35:36 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_mmap.c,v 1.184 2022/07/07 11:29:18 rin Exp $	*/
+/*	$NetBSD: uvm_mmap.c,v 1.185 2023/11/21 14:35:36 riastradh 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.184 2022/07/07 11:29:18 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.185 2023/11/21 14:35:36 riastradh Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_pax.h"
@@ -282,9 +282,7 @@ sys_mmap(struct lwp *l, const struct sys
 	struct file *fp = NULL;
 	struct uvm_object *uobj;
 	int error;
-#ifdef PAX_ASLR
 	vaddr_t orig_addr;
-#endif /* PAX_ASLR */
 
 	/*
 	 * first, extract syscall args from the uap.
@@ -298,9 +296,7 @@ sys_mmap(struct lwp *l, const struct sys
 	fd = SCARG(uap, fd);
 	pos = SCARG(uap, pos);
 
-#ifdef PAX_ASLR
 	orig_addr = addr;
-#endif /* PAX_ASLR */
 
 	if ((flags & (MAP_SHARED|MAP_PRIVATE)) == (MAP_SHARED|MAP_PRIVATE))
 		return EINVAL;

Reply via email to