Module Name:    src
Committed By:   pgoyette
Date:           Sun Nov 10 14:20:50 UTC 2019

Modified Files:
        src/sys/kern: compat_stub.c kern_core.c kern_sig.c sys_ptrace_common.c
        src/sys/sys: compat_stub.h signalvar.h

Log Message:
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.16 -r1.17 src/sys/kern/compat_stub.c
cvs rdiff -u -r1.26 -r1.27 src/sys/kern/kern_core.c
cvs rdiff -u -r1.377 -r1.378 src/sys/kern/kern_sig.c
cvs rdiff -u -r1.69 -r1.70 src/sys/kern/sys_ptrace_common.c
cvs rdiff -u -r1.20 -r1.21 src/sys/sys/compat_stub.h
cvs rdiff -u -r1.98 -r1.99 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/kern/compat_stub.c
diff -u src/sys/kern/compat_stub.c:1.16 src/sys/kern/compat_stub.c:1.17
--- src/sys/kern/compat_stub.c:1.16	Sun Nov 10 13:28:06 2019
+++ src/sys/kern/compat_stub.c	Sun Nov 10 14:20:50 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.c,v 1.16 2019/11/10 13:28:06 pgoyette Exp $	*/
+/* $NetBSD: compat_stub.c,v 1.17 2019/11/10 14:20:50 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -279,3 +279,8 @@ struct netbsd32_reg_validate_hook_t netb
  * 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.26 src/sys/kern/kern_core.c:1.27
--- src/sys/kern/kern_core.c:1.26	Wed Oct 16 18:29:49 2019
+++ src/sys/kern/kern_core.c	Sun Nov 10 14:20:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_core.c,v 1.26 2019/10/16 18:29:49 christos Exp $	*/
+/*	$NetBSD: kern_core.c,v 1.27 2019/11/10 14:20:50 pgoyette 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.26 2019/10/16 18:29:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_core.c,v 1.27 2019/11/10 14:20:50 pgoyette 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,17 +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 = __FPTRCAST(
-		    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.377 src/sys/kern/kern_sig.c:1.378
--- src/sys/kern/kern_sig.c:1.377	Sun Nov 10 13:28:06 2019
+++ src/sys/kern/kern_sig.c	Sun Nov 10 14:20:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_sig.c,v 1.377 2019/11/10 13:28:06 pgoyette Exp $	*/
+/*	$NetBSD: kern_sig.c,v 1.378 2019/11/10 14:20:50 pgoyette 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.377 2019/11/10 13:28:06 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_sig.c,v 1.378 2019/11/10 14:20:50 pgoyette Exp $");
 
 #include "opt_ptrace.h"
 #include "opt_dtrace.h"
@@ -132,9 +132,6 @@ static void	sigswitch_unlock_and_switch_
 static void	sigacts_poolpage_free(struct pool *, void *);
 static void	*sigacts_poolpage_alloc(struct pool *, int);
 
-int (*coredump_vec)(struct lwp *, const char *) =
-    __FPTRCAST(int (*)(struct lwp *, const char *), enosys);
-
 /*
  * DTrace SDT provider definitions
  */
@@ -2289,7 +2286,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.69 src/sys/kern/sys_ptrace_common.c:1.70
--- src/sys/kern/sys_ptrace_common.c:1.69	Wed Oct 16 18:29:49 2019
+++ src/sys/kern/sys_ptrace_common.c	Sun Nov 10 14:20:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_ptrace_common.c,v 1.69 2019/10/16 18:29:49 christos Exp $	*/
+/*	$NetBSD: sys_ptrace_common.c,v 1.70 2019/11/10 14:20:50 pgoyette 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.69 2019/10/16 18:29:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_ptrace_common.c,v 1.70 2019/11/10 14:20:50 pgoyette 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/sys/compat_stub.h
diff -u src/sys/sys/compat_stub.h:1.20 src/sys/sys/compat_stub.h:1.21
--- src/sys/sys/compat_stub.h:1.20	Sun Nov 10 13:28:06 2019
+++ src/sys/sys/compat_stub.h	Sun Nov 10 14:20:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_stub.h,v 1.20 2019/11/10 13:28:06 pgoyette Exp $	*/
+/*	$NetBSD: compat_stub.h,v 1.21 2019/11/10 14:20:50 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -366,4 +366,9 @@ 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.98 src/sys/sys/signalvar.h:1.99
--- src/sys/sys/signalvar.h:1.98	Sun Nov 10 13:28:06 2019
+++ src/sys/sys/signalvar.h	Sun Nov 10 14:20:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: signalvar.h,v 1.98 2019/11/10 13:28:06 pgoyette Exp $	*/
+/*	$NetBSD: signalvar.h,v 1.99 2019/11/10 14:20:50 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993
@@ -202,11 +202,6 @@ void	sendsig_siginfo(const struct ksigin
 extern	struct pool ksiginfo_pool;
 
 /*
- * Modularity / compatibility.
- */
-extern int	(*coredump_vec)(struct lwp *, const char *);
-
-/*
  * firstsig:
  *
  * 	Return the first signal in a signal set.

Reply via email to