Module Name: src Committed By: mlelstv Date: Mon Apr 29 14:56:01 UTC 2024
Modified Files: src/sys/compat/netbsd32: netbsd32_signal.c Log Message: In netbsd32___sigaction_sigtramp continue to use the compat module when already locked for this process. Needs pullup to netbsd-10. To generate a diff of this commit: cvs rdiff -u -r1.53 -r1.54 src/sys/compat/netbsd32/netbsd32_signal.c 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/netbsd32/netbsd32_signal.c diff -u src/sys/compat/netbsd32/netbsd32_signal.c:1.53 src/sys/compat/netbsd32/netbsd32_signal.c:1.54 --- src/sys/compat/netbsd32/netbsd32_signal.c:1.53 Sat Nov 6 20:42:56 2021 +++ src/sys/compat/netbsd32/netbsd32_signal.c Mon Apr 29 14:56:01 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_signal.c,v 1.53 2021/11/06 20:42:56 thorpej Exp $ */ +/* $NetBSD: netbsd32_signal.c,v 1.54 2024/04/29 14:56:01 mlelstv Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_signal.c,v 1.53 2021/11/06 20:42:56 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_signal.c,v 1.54 2024/04/29 14:56:01 mlelstv Exp $"); #if defined(_KERNEL_OPT) #include "opt_ktrace.h" @@ -184,7 +184,7 @@ netbsd32___sigaction_sigtramp(struct lwp */ #ifdef __HAVE_STRUCT_SIGCONTEXT struct proc *p = l->l_proc; - bool sigcontext_valid = false; + bool sigcontext_valid; /* * We need to ensure the compat_netbsd32_16 module @@ -196,9 +196,7 @@ netbsd32___sigaction_sigtramp(struct lwp kernconfig_lock(); (void)module_autoload("compat_netbsd32_16", MODULE_CLASS_ANY); - if (netbsd32_sendsig_sigcontext_16_hook.hooked) { - sigcontext_valid = true; - } + sigcontext_valid = netbsd32_sendsig_sigcontext_16_hook.hooked; mutex_enter(&proc_lock); /* * Prevent unload of compat module while @@ -207,6 +205,11 @@ netbsd32___sigaction_sigtramp(struct lwp p->p_lflag |= PL_SIGCOMPAT; mutex_exit(&proc_lock); kernconfig_unlock(); + } else { + /* + * Module is already loaded and locked in memory + */ + sigcontext_valid = netbsd32_sendsig_sigcontext_16_hook.hooked; } if (!sigcontext_valid) { return EINVAL;