qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC 2/2] qemu-thread: Don't block SEGV, ILL and FPE


From: Roman Bolshakov
Subject: [Qemu-devel] [RFC 2/2] qemu-thread: Don't block SEGV, ILL and FPE
Date: Mon, 17 Dec 2018 23:26:02 +0300

If any of these signals happen on macOS, they are not delivered to other
threads and signalfd_compat receives nothing. Indeed, POSIX reference
and sigprocmask(2) note that an attempt to block the signals results in
undefined behaviour. SEGV and FPE can't also be received by signalfd(2)
on Linux.

An ability to retrieve SIGBUS via signalfd(2) is used by QEMU for
memory preallocation therefore we can't unblock it without consequences.
But it's important to leave a remark that the signal is lost on macOS.

Signed-off-by: Roman Bolshakov <address@hidden>
---
 util/qemu-thread-posix.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
index c6934bd22c..1bf5e65dea 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -524,6 +524,11 @@ void qemu_thread_create(QemuThread *thread, const char 
*name,
 
     /* Leave signal handling to the iothread.  */
     sigfillset(&set);
+    /* Blocking the signals can result in undefined behaviour. */
+    sigdelset(&set, SIGSEGV);
+    sigdelset(&set, SIGFPE);
+    sigdelset(&set, SIGILL);
+    /* TODO avoid SIGBUS loss on macOS */
     pthread_sigmask(SIG_SETMASK, &set, &oldset);
 
     qemu_thread_args = g_new0(QemuThreadArgs, 1);
-- 
2.19.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]