SHA256
1
0
forked from pool/systemd
systemd/0008-Reset-signal-mask-on-re-exec-to-init.patch
Stephan Kulow 9fc3254595 Accepting request 238853 from Base:System
- Update of patch 0001-detect-s390-virt.patch (bnc#880438)

- Shut up stupid check scripts crying for not mentioned systemd-mini-rpmlintrc

- Add upstream patchs
  0001-core-use-correct-format-string-for-UIDs.patch
  0002-core-transaction-fix-cycle-break-attempts-outside-tr.patch
  0003-fsck-consider-a-fsck-implementation-linked-to-bin-tr.patch

- Add upstream patch
  0001-units-order-network-online.target-after-network.targ.patch
  to make sure that etwork-online.target follows network.target 

- rules: re-enable dev_id conditionally in persistent rules
  (bnc#884403 and bnc#882714).
  Add 1040-re-enable-dev_id-conditionally-in-persistent-rules.patch 

- Add upstream patches
  0001-vconsole-also-copy-character-maps-not-just-fonts-fro.patch
  0002-core-make-sure-Environment-fields-passed-in-for-tran.patch
  0003-core-You-can-not-put-the-cached-result-of-use_smack-.patch
  0004-cryptsetup-don-t-add-unit-dependency-on-dev-null-dev.patch
  0005-man-fix-path-in-crypttab-5.patch

- Add upstream patch
  1039-udevadm-settle-fixed-return-code-for-empty-queue.patch it
  fixes udevadm settle exit code which may had roken dracut scripts
  (bnc#884271 comment#18)

- Temporary disable patch 1022 (bnc#884271 and bnc#882714).

OBS-URL: https://build.opensuse.org/request/show/238853
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/systemd?expand=0&rev=190
2014-06-30 19:43:27 +00:00

52 lines
1.9 KiB
Diff

From 5a85ca1cb622fda4a39c8a6f00dccea7f8a1e82a Mon Sep 17 00:00:00 2001
From: Ruediger Oertel <ro@suse.de>
Date: Fri, 13 Jun 2014 16:41:06 +0200
Subject: [PATCH] Reset signal-mask on re-exec to init=..
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.
---
src/core/main.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git src/core/main.c src/core/main.c
index 3aac5d1..3e57f07 100644
--- src/core/main.c
+++ src/core/main.c
@@ -1843,6 +1843,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
@@ -1926,6 +1927,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);
@@ -1944,6 +1950,8 @@ finish:
log_error("Failed to execute /bin/sh, giving up: %m");
} else
log_warning("Failed to execute /sbin/init, giving up: %m");
+
+ sigprocmask(SIG_SETMASK, &o_ss, NULL);
}
if (arg_serialization) {
--
1.7.9.2