teknoraver / rpms / systemd

Forked from rpms/systemd 2 months ago
Clone

Blame 0012-core-clean-up-signal-reset-logic-when-reexec.patch

Zbigniew Jędrzejewski-Szmek 5509c0
From 1d4d5cd68c250af3b232fa049bd2cde171272ee9 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 5509c0
From: Lennart Poettering <lennart@poettering.net>
Zbigniew Jędrzejewski-Szmek 5509c0
Date: Fri, 20 Jun 2014 16:58:21 +0200
Zbigniew Jędrzejewski-Szmek 5509c0
Subject: [PATCH] core: clean-up signal reset logic when reexec
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
There's no need to save the old sigmask, if we are going to die. Let's
Zbigniew Jędrzejewski-Szmek 5509c0
simplify this. Also, reset all the signal handlers, so that we don't
Zbigniew Jędrzejewski-Szmek 5509c0
leave SIG_IGN set for some of them across reexec.
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
(cherry picked from commit 9bfcda9528636914aef3e0ab91191bb81654c83d)
Zbigniew Jędrzejewski-Szmek 5509c0
---
Zbigniew Jędrzejewski-Szmek 5509c0
 src/core/main.c | 10 +++++-----
Zbigniew Jędrzejewski-Szmek 5509c0
 1 file changed, 5 insertions(+), 5 deletions(-)
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
diff --git a/src/core/main.c b/src/core/main.c
Zbigniew Jędrzejewski-Szmek 5509c0
index e87b8cc8..c9472929 100644
Zbigniew Jędrzejewski-Szmek 5509c0
--- a/src/core/main.c
Zbigniew Jędrzejewski-Szmek 5509c0
+++ b/src/core/main.c
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -1831,7 +1831,7 @@ finish:
Zbigniew Jędrzejewski-Szmek 5509c0
         if (reexecute) {
Zbigniew Jędrzejewski-Szmek 5509c0
                 const char **args;
Zbigniew Jędrzejewski-Szmek 5509c0
                 unsigned i, args_size;
Zbigniew Jędrzejewski-Szmek 5509c0
-                sigset_t ss, o_ss;
Zbigniew Jędrzejewski-Szmek 5509c0
+                sigset_t ss;
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                 /* Close and disarm the watchdog, so that the new
Zbigniew Jędrzejewski-Szmek 5509c0
                  * instance can reinitialize it, but doesn't get
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -1917,8 +1917,10 @@ finish:
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                 /* reenable any blocked signals, especially important
Zbigniew Jędrzejewski-Szmek 5509c0
                  * if we switch from initial ramdisk to init=... */
Zbigniew Jędrzejewski-Szmek 5509c0
-                sigemptyset(&ss);
Zbigniew Jędrzejewski-Szmek 5509c0
-                sigprocmask(SIG_SETMASK, &ss, &o_ss);
Zbigniew Jędrzejewski-Szmek 5509c0
+                reset_all_signal_handlers();
Zbigniew Jędrzejewski-Szmek 5509c0
+
Zbigniew Jędrzejewski-Szmek 5509c0
+                assert_se(sigemptyset(&ss) == 0);
Zbigniew Jędrzejewski-Szmek 5509c0
+                assert_se(sigprocmask(SIG_SETMASK, &ss, NULL) == 0);
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                 if (switch_root_init) {
Zbigniew Jędrzejewski-Szmek 5509c0
                         args[0] = switch_root_init;
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -1938,8 +1940,6 @@ finish:
Zbigniew Jędrzejewski-Szmek 5509c0
                         log_error("Failed to execute /bin/sh, giving up: %m");
Zbigniew Jędrzejewski-Szmek 5509c0
                 } else
Zbigniew Jędrzejewski-Szmek 5509c0
                         log_warning("Failed to execute /sbin/init, giving up: %m");
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
-                sigprocmask(SIG_SETMASK, &o_ss, NULL);
Zbigniew Jędrzejewski-Szmek 5509c0
         }
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
         if (arg_serialization) {