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.