Module Name:    src
Committed By:   martin
Date:           Mon Nov 11 17:11:07 UTC 2019

Modified Files:
        src/sys/compat/common [netbsd-9]: kern_sig_16.c
        src/sys/kern [netbsd-9]: compat_stub.c kern_core.c kern_sig.c
            sys_ptrace_common.c sys_sig.c
        src/sys/sys [netbsd-9]: compat_stub.h signalvar.h

Log Message:
Pull up following revision(s) (requested by pgoyette in ticket #413):

        sys/kern/kern_core.c: revision 1.27 (patch)
        sys/kern/kern_sig.c: revision 1.377 (patch)
        sys/kern/kern_sig.c: revision 1.378 (patch)
        sys/kern/sys_sig.c: revision 1.50
        sys/kern/sys_ptrace_common.c: revision 1.70
        sys/kern/compat_stub.c: revision 1.16
        sys/compat/common/kern_sig_16.c: revision 1.4
        sys/kern/compat_stub.c: revision 1.17
        sys/sys/compat_stub.h: revision 1.20
        sys/sys/signalvar.h: revision 1.98
        sys/sys/compat_stub.h: revision 1.21
        sys/sys/signalvar.h: revision 1.99

Convert the sendsig_sigcontext_16 function pointer to use the new
compat_hook mechanism.
XXX Despite being a kernel<-->module abi change, this should be
XXX pulled up to -9

 -

Convert the coredump_vec modular function pointer to use the new
compat_hook mechanism.
XXX Should be pulled up to -9 despite the kernel <--> module ABI
XXX change.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.3.4.1 src/sys/compat/common/kern_sig_16.c
cvs rdiff -u -r1.15 -r1.15.2.1 src/sys/kern/compat_stub.c
cvs rdiff -u -r1.24 -r1.24.22.1 src/sys/kern/kern_core.c
cvs rdiff -u -r1.364.2.8 -r1.364.2.9 src/sys/kern/kern_sig.c
cvs rdiff -u -r1.58.2.9 -r1.58.2.10 src/sys/kern/sys_ptrace_common.c
cvs rdiff -u -r1.47.4.2 -r1.47.4.3 src/sys/kern/sys_sig.c
cvs rdiff -u -r1.18.2.1 -r1.18.2.2 src/sys/sys/compat_stub.h
cvs rdiff -u -r1.93.2.3 -r1.93.2.4 src/sys/sys/signalvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/compat/common/kern_sig_16.c
diff -u src/sys/compat/common/kern_sig_16.c:1.3 src/sys/compat/common/kern_sig_16.c:1.3.4.1
--- src/sys/compat/common/kern_sig_16.c:1.3	Sun Jan 27 02:08:39 2019
+++ src/sys/compat/common/kern_sig_16.c	Mon Nov 11 17:11:07 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_sig_16.c,v 1.3 2019/01/27 02:08:39 pgoyette Exp $	*/
+/*	$NetBSD: kern_sig_16.c,v 1.3.4.1 2019/11/11 17:11:07 martin Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_sig_16.c,v 1.3 2019/01/27 02:08:39 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_sig_16.c,v 1.3.4.1 2019/11/11 17:11:07 martin Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -84,6 +84,7 @@ __KERNEL_RCSID(0, "$NetBSD: kern_sig_16.
 #include <sys/kauth.h>
 #include <sys/wait.h>
 #include <sys/kmem.h>
+#include <sys/compat_stub.h>
 
 #include <uvm/uvm_object.h>
 #include <uvm/uvm_prot.h>
@@ -155,8 +156,8 @@ kern_sig_16_init(void)
 	emul_netbsd.e_esigcode = esigcode;
 	emul_netbsd.e_sigobject = &emul_netbsd_object;
 	rw_exit(&exec_lock);
-	KASSERT(sendsig_sigcontext_vec == NULL);
-	sendsig_sigcontext_vec = sendsig_sigcontext;
+	MODULE_HOOK_SET(sendsig_sigcontext_16_hook, "sndsig16",
+	   sendsig_sigcontext);
 #endif
 
 	return 0;
@@ -188,7 +189,6 @@ kern_sig_16_fini(void)
 		syscall_establish(NULL, kern_sig_16_syscalls);
 		return EBUSY;
 	}
-	sendsig_sigcontext_vec = NULL;
 
 #if defined(COMPAT_SIGCONTEXT)
 	/*
@@ -204,6 +204,8 @@ kern_sig_16_fini(void)
 	emul_netbsd.e_esigcode = NULL;
 	emul_netbsd.e_sigobject = NULL;
 	rw_exit(&exec_lock);
+
+	MODULE_HOOK_UNSET(sendsig_sigcontext_16_hook);
 #endif
 	return 0;
 }

Index: src/sys/kern/compat_stub.c
diff -u src/sys/kern/compat_stub.c:1.15 src/sys/kern/compat_stub.c:1.15.2.1
--- src/sys/kern/compat_stub.c:1.15	Sat Jul 20 18:23:05 2019
+++ src/sys/kern/compat_stub.c	Mon Nov 11 17:11:07 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.c,v 1.15 2019/07/20 18:23:05 christos Exp $	*/
+/* $NetBSD: compat_stub.c,v 1.15.2.1 2019/11/11 17:11:07 martin Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -274,3 +274,13 @@ struct ifmedia_80_post_hook_t ifmedia_80
  */
 struct netbsd32_machine32_hook_t netbsd32_machine32_hook;
 struct netbsd32_reg_validate_hook_t netbsd32_reg_validate_hook;
+
+/*
+ * Hook for sendsig_sigcontext_16
+ */
+struct sendsig_sigcontext_16_hook_t sendsig_sigcontext_16_hook;
+
+/*
+ * Hook for coredumps
+ */
+struct coredump_hook_t coredump_hook;

Index: src/sys/kern/kern_core.c
diff -u src/sys/kern/kern_core.c:1.24 src/sys/kern/kern_core.c:1.24.22.1
--- src/sys/kern/kern_core.c:1.24	Thu Jul  7 06:55:43 2016
+++ src/sys/kern/kern_core.c	Mon Nov 11 17:11:07 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_core.c,v 1.24 2016/07/07 06:55:43 msaitoh Exp $	*/
+/*	$NetBSD: kern_core.c,v 1.24.22.1 2019/11/11 17:11:07 martin Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1991, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_core.c,v 1.24 2016/07/07 06:55:43 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_core.c,v 1.24.22.1 2019/11/11 17:11:07 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/vnode.h>
@@ -50,6 +50,7 @@ __KERNEL_RCSID(0, "$NetBSD: kern_core.c,
 #include <sys/filedesc.h>
 #include <sys/kauth.h>
 #include <sys/module.h>
+#include <sys/compat_stub.h>
 
 MODULE(MODULE_CLASS_MISC, coredump, NULL);
 
@@ -69,16 +70,17 @@ coredump_modcmd(modcmd_t cmd, void *arg)
 
 	switch (cmd) {
 	case MODULE_CMD_INIT:
-		coredump_vec = coredump;
+		MODULE_HOOK_SET(coredump_hook, "coredump", coredump);
 		return 0;
 	case MODULE_CMD_FINI:
 		/*
-		 * In theory we don't need to patch this, as the various
+		 * In theory we don't need to UNSET this, as the various
 		 * exec formats depend on this module.  If this module has
 		 * no references, and so can be unloaded, no user programs
 		 * can be running and so nothing can call *coredump_vec.
 		 */
-		coredump_vec = (int (*)(struct lwp *, const char *))enosys;
+
+		MODULE_HOOK_UNSET(coredump_hook);
 		return 0;
 	default:
 		return ENOTTY;

Index: src/sys/kern/kern_sig.c
diff -u src/sys/kern/kern_sig.c:1.364.2.8 src/sys/kern/kern_sig.c:1.364.2.9
--- src/sys/kern/kern_sig.c:1.364.2.8	Wed Oct 23 19:25:39 2019
+++ src/sys/kern/kern_sig.c	Mon Nov 11 17:11:07 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_sig.c,v 1.364.2.8 2019/10/23 19:25:39 martin Exp $	*/
+/*	$NetBSD: kern_sig.c,v 1.364.2.9 2019/11/11 17:11:07 martin Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_sig.c,v 1.364.2.8 2019/10/23 19:25:39 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_sig.c,v 1.364.2.9 2019/11/11 17:11:07 martin Exp $");
 
 #include "opt_ptrace.h"
 #include "opt_dtrace.h"
@@ -100,6 +100,7 @@ __KERNEL_RCSID(0, "$NetBSD: kern_sig.c,v
 #include <sys/cpu.h>
 #include <sys/module.h>
 #include <sys/sdt.h>
+#include <sys/compat_stub.h>
 
 #ifdef PAX_SEGVGUARD
 #include <sys/pax.h>
@@ -131,10 +132,6 @@ static void	sigswitch_unlock_and_switch_
 static void	sigacts_poolpage_free(struct pool *, void *);
 static void	*sigacts_poolpage_alloc(struct pool *, int);
 
-void (*sendsig_sigcontext_vec)(const struct ksiginfo *, const sigset_t *);
-int (*coredump_vec)(struct lwp *, const char *) =
-    (int (*)(struct lwp *, const char *))enosys;
-
 /*
  * DTrace SDT provider definitions
  */
@@ -2145,10 +2142,8 @@ sendsig(const struct ksiginfo *ksi, cons
 	case 0:
 	case 1:
 		/* Compat for 1.6 and earlier. */
-		if (sendsig_sigcontext_vec == NULL) {
-			break;
-		}
-		(*sendsig_sigcontext_vec)(ksi, mask);
+		MODULE_HOOK_CALL_VOID(sendsig_sigcontext_16_hook, (ksi, mask),
+		    break);
 		return;
 	case 2:
 	case 3:
@@ -2289,7 +2284,7 @@ sigexit(struct lwp *l, int signo)
 
 	if (docore) {
 		mutex_exit(p->p_lock);
-		error = (*coredump_vec)(l, NULL);
+		MODULE_HOOK_CALL(coredump_hook, (l, NULL), enosys(), error);
 
 		if (kern_logsigexit) {
 			int uid = l->l_cred ?

Index: src/sys/kern/sys_ptrace_common.c
diff -u src/sys/kern/sys_ptrace_common.c:1.58.2.9 src/sys/kern/sys_ptrace_common.c:1.58.2.10
--- src/sys/kern/sys_ptrace_common.c:1.58.2.9	Wed Oct 23 19:25:39 2019
+++ src/sys/kern/sys_ptrace_common.c	Mon Nov 11 17:11:07 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_ptrace_common.c,v 1.58.2.9 2019/10/23 19:25:39 martin Exp $	*/
+/*	$NetBSD: sys_ptrace_common.c,v 1.58.2.10 2019/11/11 17:11:07 martin Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -118,7 +118,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_ptrace_common.c,v 1.58.2.9 2019/10/23 19:25:39 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_ptrace_common.c,v 1.58.2.10 2019/11/11 17:11:07 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ptrace.h"
@@ -148,6 +148,7 @@ __KERNEL_RCSID(0, "$NetBSD: sys_ptrace_c
 #include <sys/module.h>
 #include <sys/condvar.h>
 #include <sys/mutex.h>
+#include <sys/compat_stub.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -958,7 +959,7 @@ ptrace_dumpcore(struct lwp *lt, char *pa
 		path[len] = '\0';
 	}
 	DPRINTF(("%s: lwp=%d\n", __func__, lt->l_lid));
-	error = (*coredump_vec)(lt, path);
+	MODULE_HOOK_CALL(coredump_hook, (lt, path), enosys(), error);
 out:
 	if (path)
 		kmem_free(path, len + 1);

Index: src/sys/kern/sys_sig.c
diff -u src/sys/kern/sys_sig.c:1.47.4.2 src/sys/kern/sys_sig.c:1.47.4.3
--- src/sys/kern/sys_sig.c:1.47.4.2	Sun Nov 10 13:24:50 2019
+++ src/sys/kern/sys_sig.c	Mon Nov 11 17:11:07 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_sig.c,v 1.47.4.2 2019/11/10 13:24:50 martin Exp $	*/
+/*	$NetBSD: sys_sig.c,v 1.47.4.3 2019/11/11 17:11:07 martin Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_sig.c,v 1.47.4.2 2019/11/10 13:24:50 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_sig.c,v 1.47.4.3 2019/11/11 17:11:07 martin Exp $");
 
 #include "opt_dtrace.h"
 
@@ -81,6 +81,7 @@ __KERNEL_RCSID(0, "$NetBSD: sys_sig.c,v 
 #include <sys/kmem.h>
 #include <sys/module.h>
 #include <sys/sdt.h>
+#include <sys/compat_stub.h>
 
 SDT_PROVIDER_DECLARE(proc);
 SDT_PROBE_DEFINE2(proc, kernel, , signal__clear,
@@ -413,11 +414,9 @@ sigaction1(struct lwp *l, int signum, co
 				v0v1valid = true;
 			else if ((p->p_lflag & PL_SIGCOMPAT) == 0) {
 				kernconfig_lock();
-				if (sendsig_sigcontext_vec == NULL) {
-					(void)module_autoload("compat_16",
-					    MODULE_CLASS_ANY);
-				}
-				if (sendsig_sigcontext_vec != NULL) {
+				(void)module_autoload("compat_16",
+				    MODULE_CLASS_ANY);
+				if (sendsig_sigcontext_16_hook.hooked) {
 					/*
 					 * We need to remember if the
 					 * sigcontext method may be useable,

Index: src/sys/sys/compat_stub.h
diff -u src/sys/sys/compat_stub.h:1.18.2.1 src/sys/sys/compat_stub.h:1.18.2.2
--- src/sys/sys/compat_stub.h:1.18.2.1	Mon Oct 21 20:06:17 2019
+++ src/sys/sys/compat_stub.h	Mon Nov 11 17:11:07 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_stub.h,v 1.18.2.1 2019/10/21 20:06:17 martin Exp $	*/
+/*	$NetBSD: compat_stub.h,v 1.18.2.2 2019/11/11 17:11:07 martin Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -35,6 +35,7 @@
 #include <sys/module_hook.h>
 #include <sys/param.h>
 #include <sys/socket.h>
+#include <sys/sigtypes.h>
 
 /*
  * NOTE: If you make changes here, please remember to update the
@@ -357,4 +358,17 @@ struct reg;
 MODULE_HOOK(netbsd32_machine32_hook, const char *, (void));
 MODULE_HOOK(netbsd32_reg_validate_hook, int,
     (struct lwp *, const struct reg *));
+
+/*
+ * Hook for compat_16 sendsig_sigcontext
+ */
+struct ksiginfo;
+MODULE_HOOK(sendsig_sigcontext_16_hook, void,
+    (const struct ksiginfo *, const sigset_t *));
+
+/*
+ * Hook for coredumps
+ */
+MODULE_HOOK(coredump_hook, int, (struct lwp *, const char *));
+
 #endif	/* _SYS_COMPAT_STUB_H */

Index: src/sys/sys/signalvar.h
diff -u src/sys/sys/signalvar.h:1.93.2.3 src/sys/sys/signalvar.h:1.93.2.4
--- src/sys/sys/signalvar.h:1.93.2.3	Mon Oct 21 20:13:09 2019
+++ src/sys/sys/signalvar.h	Mon Nov 11 17:11:07 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: signalvar.h,v 1.93.2.3 2019/10/21 20:13:09 martin Exp $	*/
+/*	$NetBSD: signalvar.h,v 1.93.2.4 2019/11/11 17:11:07 martin Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993
@@ -202,13 +202,6 @@ void	sendsig_siginfo(const struct ksigin
 extern	struct pool ksiginfo_pool;
 
 /*
- * Modularity / compatibility.
- */
-extern void	(*sendsig_sigcontext_vec)(const struct ksiginfo *,
-					  const sigset_t *);
-extern int	(*coredump_vec)(struct lwp *, const char *);
-
-/*
  * firstsig:
  *
  * 	Return the first signal in a signal set.

Reply via email to