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.