[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 09/14] linux-user: Only register handlers for core_dump_signal by
|
From: |
Richard Henderson |
|
Subject: |
[PULL 09/14] linux-user: Only register handlers for core_dump_signal by default |
|
Date: |
Wed, 18 Oct 2023 16:31:29 -0700 |
The set of fatal signals is really immaterial. If one arrives,
and is unhandled, then the qemu process dies and the parent gets
the correct signal.
It is only for those signals which we would like to perform a
guest core dump instead of a host core dump that we need to catch.
Acked-by: Helge Deller <deller@gmx.de>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
linux-user/signal.c | 43 ++++++++++++++-----------------------------
1 file changed, 14 insertions(+), 29 deletions(-)
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 9fadc51347..aab05f8eec 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -488,26 +488,6 @@ void target_to_host_siginfo(siginfo_t *info, const
target_siginfo_t *tinfo)
info->si_value.sival_ptr = (void *)(long)sival_ptr;
}
-static int fatal_signal (int sig)
-{
- switch (sig) {
- case TARGET_SIGCHLD:
- case TARGET_SIGURG:
- case TARGET_SIGWINCH:
- /* Ignored by default. */
- return 0;
- case TARGET_SIGCONT:
- case TARGET_SIGSTOP:
- case TARGET_SIGTSTP:
- case TARGET_SIGTTIN:
- case TARGET_SIGTTOU:
- /* Job control signals. */
- return 0;
- default:
- return 1;
- }
-}
-
/* returns 1 if given signal should dump core if not handled */
static int core_dump_signal(int sig)
{
@@ -602,8 +582,9 @@ void signal_init(void)
SIGSEGV and SIGBUS, to detect exceptions. We can not just
trap all signals because it affects syscall interrupt
behavior. But do trap all default-fatal signals. */
- if (fatal_signal (i))
+ if (core_dump_signal(i)) {
sigaction(host_sig, &act, NULL);
+ }
}
}
@@ -997,7 +978,6 @@ int do_sigaction(int sig, const struct target_sigaction
*act,
struct target_sigaction *oact, abi_ulong ka_restorer)
{
struct target_sigaction *k;
- struct sigaction act1;
int host_sig;
int ret = 0;
@@ -1057,22 +1037,27 @@ int do_sigaction(int sig, const struct target_sigaction
*act,
return 0;
}
if (host_sig != SIGSEGV && host_sig != SIGBUS) {
+ struct sigaction act1;
+
sigfillset(&act1.sa_mask);
act1.sa_flags = SA_SIGINFO;
- if (k->sa_flags & TARGET_SA_RESTART)
- act1.sa_flags |= SA_RESTART;
- /* NOTE: it is important to update the host kernel signal
- ignore state to avoid getting unexpected interrupted
- syscalls */
if (k->_sa_handler == TARGET_SIG_IGN) {
+ /*
+ * It is important to update the host kernel signal ignore
+ * state to avoid getting unexpected interrupted syscalls.
+ */
act1.sa_sigaction = (void *)SIG_IGN;
} else if (k->_sa_handler == TARGET_SIG_DFL) {
- if (fatal_signal (sig))
+ if (core_dump_signal(sig)) {
act1.sa_sigaction = host_signal_handler;
- else
+ } else {
act1.sa_sigaction = (void *)SIG_DFL;
+ }
} else {
act1.sa_sigaction = host_signal_handler;
+ if (k->sa_flags & TARGET_SA_RESTART) {
+ act1.sa_flags |= SA_RESTART;
+ }
}
ret = sigaction(host_sig, &act1, NULL);
}
--
2.34.1
- [PULL 00/14] linux-user patch queue, Richard Henderson, 2023/10/18
- [PULL 01/14] linux-user: Fixes for zero_bss, Richard Henderson, 2023/10/18
- [PULL 02/14] linux-user/mips: fix abort on integer overflow, Richard Henderson, 2023/10/18
- [PULL 03/14] linux-user/sh4: Fix crashes on signal delivery, Richard Henderson, 2023/10/18
- [PULL 04/14] linux-user/elfload: Enable LSX/LASX in HWCAP for LoongArch, Richard Henderson, 2023/10/18
- [PULL 07/14] linux-user: Exit not abort in die_with_backtrace, Richard Henderson, 2023/10/18
- [PULL 08/14] linux-user: Detect and report host crashes, Richard Henderson, 2023/10/18
- [PULL 09/14] linux-user: Only register handlers for core_dump_signal by default,
Richard Henderson <=
- [PULL 05/14] linux-user: Propagate failure in mmap_reserve_or_unmap back to target_munmap, Richard Henderson, 2023/10/18
- [PULL 06/14] linux-user: Split out die_with_signal, Richard Henderson, 2023/10/18
- [PULL 10/14] linux-user: Map unsupported signals to an out-of-bounds value, Richard Henderson, 2023/10/18
- [PULL 11/14] linux-user: Simplify signal_init, Richard Henderson, 2023/10/18
- [PULL 13/14] linux-user: Detect and report host SIGILL, SIGFPE, SIGTRAP, Richard Henderson, 2023/10/18
- [PULL 14/14] linux-user: Remap guest SIGABRT, Richard Henderson, 2023/10/18
- [PULL 12/14] linux-user: Split out host_sig{segv,bus}_handler, Richard Henderson, 2023/10/18
- Re: [PULL 00/14] linux-user patch queue, Stefan Hajnoczi, 2023/10/20