Module Name: src Committed By: pgoyette Date: Mon Oct 15 22:06:16 UTC 2018
Modified Files: src/sys/compat/common [pgoyette-compat]: compat_sysv_50_mod.c compat_sysv_mod.h src/sys/kern [pgoyette-compat]: compat_stub.c sysv_ipc.c src/sys/sys [pgoyette-compat]: compat_stub.h Log Message: Convert the final non-MP-safe "vectored" compat routine to use the MP-safe mechanism. To generate a diff of this commit: cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/compat/common/compat_sysv_50_mod.c \ src/sys/compat/common/compat_sysv_mod.h cvs rdiff -u -r1.1.2.31 -r1.1.2.32 src/sys/kern/compat_stub.c cvs rdiff -u -r1.32.16.5 -r1.32.16.6 src/sys/kern/sysv_ipc.c cvs rdiff -u -r1.1.2.43 -r1.1.2.44 src/sys/sys/compat_stub.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/compat_sysv_50_mod.c diff -u src/sys/compat/common/compat_sysv_50_mod.c:1.1.2.1 src/sys/compat/common/compat_sysv_50_mod.c:1.1.2.2 --- src/sys/compat/common/compat_sysv_50_mod.c:1.1.2.1 Tue Apr 17 23:06:11 2018 +++ src/sys/compat/common/compat_sysv_50_mod.c Mon Oct 15 22:06:16 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_sysv_50_mod.c,v 1.1.2.1 2018/04/17 23:06:11 pgoyette Exp $ */ +/* $NetBSD: compat_sysv_50_mod.c,v 1.1.2.2 2018/10/15 22:06:16 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_sysv_50_mod.c,v 1.1.2.1 2018/04/17 23:06:11 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_sysv_50_mod.c,v 1.1.2.2 2018/10/15 22:06:16 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -43,6 +43,7 @@ __KERNEL_RCSID(0, "$NetBSD: compat_sysv_ #include <sys/syscallargs.h> #include <sys/syscallvar.h> #include <sys/sysctl.h> +#include <sys/compat_stub.h> #include <compat/common/compat_sysv_mod.h> @@ -63,11 +64,12 @@ static const struct syscall_package comp { 0, 0, NULL } }; +MODULE_SET_HOOK(sysvipc50_sysctl_hook, "sysv50", sysctl_kern_sysvipc50); +MODULE_UNSET_HOOK(sysvipc50_sysctl_hook); + static int compat_sysv_50_modcmd(modcmd_t cmd, void *arg) { - static int (*orig_sysvipc50_sysctl)(SYSCTLFN_PROTO); - int error = 0; switch (cmd) { @@ -76,16 +78,15 @@ compat_sysv_50_modcmd(modcmd_t cmd, void if (error != 0) { break; } - orig_sysvipc50_sysctl = vec_sysvipc50_sysctl; - vec_sysvipc50_sysctl = sysctl_kern_sysvipc50; + sysvipc50_sysctl_hook_set(); break; case MODULE_CMD_FINI: - vec_sysvipc50_sysctl = orig_sysvipc50_sysctl; error = syscall_disestablish(NULL, compat_sysv_50_syscalls); if (error != 0) { break; } + sysvipc50_sysctl_hook_unset(); break; default: Index: src/sys/compat/common/compat_sysv_mod.h diff -u src/sys/compat/common/compat_sysv_mod.h:1.1.2.1 src/sys/compat/common/compat_sysv_mod.h:1.1.2.2 --- src/sys/compat/common/compat_sysv_mod.h:1.1.2.1 Tue Apr 17 21:59:27 2018 +++ src/sys/compat/common/compat_sysv_mod.h Mon Oct 15 22:06:16 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_sysv_mod.h,v 1.1.2.1 2018/04/17 21:59:27 pgoyette Exp $ */ +/* $NetBSD: compat_sysv_mod.h,v 1.1.2.2 2018/10/15 22:06:16 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -34,8 +34,6 @@ #include <sys/sysctl.h> -extern int (*vec_sysvipc50_sysctl)(SYSCTLFN_PROTO); - int sysctl_kern_sysvipc50(SYSCTLFN_PROTO); #endif /* _COMPAT_COMMON_SYSV_IPC_MOD_H_ */ Index: src/sys/kern/compat_stub.c diff -u src/sys/kern/compat_stub.c:1.1.2.31 src/sys/kern/compat_stub.c:1.1.2.32 --- src/sys/kern/compat_stub.c:1.1.2.31 Mon Oct 15 11:57:05 2018 +++ src/sys/kern/compat_stub.c Mon Oct 15 22:06:16 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_stub.c,v 1.1.2.31 2018/10/15 11:57:05 pgoyette Exp $ */ +/* $NetBSD: compat_stub.c,v 1.1.2.32 2018/10/15 22:06:16 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -203,3 +203,8 @@ struct compat_10_openat_hook_t compat_10 */ struct compat_70_unp_hook_t compat_70_unp_hook; +/* + * Hook for sysvipc50_sysctl + */ +struct sysvipc50_sysctl_hook_t sysvipc50_sysctl_hook; + Index: src/sys/kern/sysv_ipc.c diff -u src/sys/kern/sysv_ipc.c:1.32.16.5 src/sys/kern/sysv_ipc.c:1.32.16.6 --- src/sys/kern/sysv_ipc.c:1.32.16.5 Thu Sep 6 06:56:42 2018 +++ src/sys/kern/sysv_ipc.c Mon Oct 15 22:06:16 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: sysv_ipc.c,v 1.32.16.5 2018/09/06 06:56:42 pgoyette Exp $ */ +/* $NetBSD: sysv_ipc.c,v 1.32.16.6 2018/10/15 22:06:16 pgoyette Exp $ */ /*- * Copyright (c) 1998, 2007 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v 1.32.16.5 2018/09/06 06:56:42 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v 1.32.16.6 2018/10/15 22:06:16 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_sysv.h" @@ -61,11 +61,10 @@ __KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v #include <sys/stat.h> #include <sys/sysctl.h> #include <sys/kauth.h> +#include <sys/compat_stub.h> #include <compat/common/compat_sysv_mod.h> /* for sysctl routine vector */ -int (*vec_sysvipc50_sysctl)(SYSCTLFN_PROTO); - /* * Values in support of System V compatible shared memory. XXX * (originally located in sys/conf/param.c) @@ -342,17 +341,16 @@ sysvipcinit(void) sysvipc_listener_cb, NULL); } -/* Vector the old 50 sysctl stuff */ - -static int stub_sysvipc50_sysctl(SYSCTLFN_PROTO); -int (*vec_sysvipc50_sysctl)(SYSCTLFN_PROTO) = stub_sysvipc50_sysctl; - static int stub_sysvipc50_sysctl(SYSCTLFN_ARGS) { return EPASSTHROUGH; } +MODULE_CALL_HOOK_DECL(sysvipc50_sysctl_hook, f, (SYSCTLFN_PROTO)); +MODULE_CALL_HOOK(sysvipc50_sysctl_hook, f, (SYSCTLFN_ARGS), + (SYSCTLFN_CALL(rnode)), stub_sysvipc50_sysctl(SYSCTLFN_CALL(rnode))); + static int sysctl_kern_sysvipc(SYSCTLFN_ARGS) { @@ -379,7 +377,7 @@ sysctl_kern_sysvipc(SYSCTLFN_ARGS) * to the non-compat sysctl code. */ - error = (*vec_sysvipc50_sysctl)(SYSCTLFN_CALL(rnode)); + error = sysvipc50_sysctl_hook_f_call(SYSCTLFN_CALL(rnode)); if (error != EPASSTHROUGH) return error; Index: src/sys/sys/compat_stub.h diff -u src/sys/sys/compat_stub.h:1.1.2.43 src/sys/sys/compat_stub.h:1.1.2.44 --- src/sys/sys/compat_stub.h:1.1.2.43 Mon Oct 15 11:57:05 2018 +++ src/sys/sys/compat_stub.h Mon Oct 15 22:06:16 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_stub.h,v 1.1.2.43 2018/10/15 11:57:05 pgoyette Exp $ */ +/* $NetBSD: compat_stub.h,v 1.1.2.44 2018/10/15 22:06:16 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -257,4 +257,10 @@ MODULE_HOOK(compat_10_openat_hook, (stru struct mbuf; MODULE_HOOK(compat_70_unp_hook, (struct mbuf **, struct lwp *, struct mbuf *)); +/* + * Hook for sysvipc50 sysctl + */ +#include <sys/sysctl.h> +MODULE_HOOK(sysvipc50_sysctl_hook, (SYSCTLFN_PROTO)); + #endif /* _SYS_COMPAT_STUB_H */