forked from pool/systemd
bbba62be60
- Add or port upstream bugfix patches: 0001-Fix-systemd-stdio-bridge-symlink.patch 0002-execute-free-directory-path-if-we-fail-to-remove-it-.patch 0003-Do-not-print-invalid-UTF-8-in-error-messages.patch 0004-man-document-missing-options-of-systemd-run.patch 0005-systemd-run-add-some-extra-safety-checks.patch 0006-journal-assume-that-next-entry-is-after-previous-ent.patch 0007-journal-forget-file-after-encountering-an-error.patch 0008-core-correctly-unregister-PIDs-from-PID-hashtables.patch 0009-logind-fix-reference-to-systemd-user-sessions.servic.patch 0010-man-update-link-to-LSB.patch 0011-man-systemd-bootchart-fix-spacing-in-command.patch 0012-man-add-missing-comma.patch 0013-units-Do-not-unescape-instance-name-in-systemd-backl.patch - Add linker scripts as place holder of the old systemd shared libraries now all included in libsystemd.so (bnc#867128) - Make patch 1006-udev-always-rename-network.patch work again and add it again. - address missing owner functionality in systemd-tmpfiles (fate#314974) 1022-systemd-tmpfiles-ownerkeep.patch - Generate the bash completion files on the fly for the case of not having the package bash-completion around - Add or port upstream bugfix patches: 0001-nspawn-fix-detection-of-missing-proc-self-loginuid.patch 0002-cdrom_id-use-the-old-MMC-fallback.patch 0003-journalctl-refuse-extra-arguments-with-verify-and-si.patch OBS-URL: https://build.opensuse.org/request/show/225408 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/systemd?expand=0&rev=177
43 lines
1.7 KiB
Diff
43 lines
1.7 KiB
Diff
Process 1 (aka init) needs to be started with an empty signal mask. That
|
|
includes the process 1 that's started after the initrd is finished. When the
|
|
initrd is using systemd (as it does with dracut based initrds) then it is
|
|
systemd that calls the real init. Normally this is systemd again, except
|
|
when the user uses for instance "init=/bin/bash" on the kernel command line.
|
|
|
|
---
|
|
main.c | 9 +++++++++
|
|
1 file changed, 9 insertions(+)
|
|
|
|
--- src/core/main.c
|
|
+++ src/core/main.c 2014-02-27 13:54:21.922236495 +0000
|
|
@@ -1780,6 +1780,7 @@ finish:
|
|
if (reexecute) {
|
|
const char **args;
|
|
unsigned i, args_size;
|
|
+ sigset_t ss, o_ss;
|
|
|
|
/* Close and disarm the watchdog, so that the new
|
|
* instance can reinitialize it, but doesn't get
|
|
@@ -1863,6 +1864,11 @@ finish:
|
|
args[i++] = NULL;
|
|
assert(i <= args_size);
|
|
|
|
+ /* reenable any blocked signals, especially important
|
|
+ * if we switch from initial ramdisk to init=... */
|
|
+ sigemptyset(&ss);
|
|
+ sigprocmask(SIG_SETMASK,&ss,&o_ss);
|
|
+
|
|
if (switch_root_init) {
|
|
args[0] = switch_root_init;
|
|
execv(args[0], (char* const*) args);
|
|
@@ -1881,6 +1887,9 @@ finish:
|
|
log_error("Failed to execute /bin/sh, giving up: %m");
|
|
} else
|
|
log_warning("Failed to execute /sbin/init, giving up: %m");
|
|
+
|
|
+ /* back to saved state if reexec failed */
|
|
+ sigprocmask(SIG_SETMASK,&o_ss,NULL);
|
|
}
|
|
|
|
if (arg_serialization) {
|