]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix(shutdown): be robust against forced shutdown
authorRenaud Métrich <rmetrich@redhat.com>
Tue, 16 Nov 2021 10:15:52 +0000 (11:15 +0100)
committerJóhann B. Guðmundsson <johannbg@gmail.com>
Tue, 16 Nov 2021 18:29:32 +0000 (18:29 +0000)
When a forced shutdown is issued through sending a burst of Ctrl-Alt-Del
keys, systemd sends SIGTERM to all processes. This ends up killing
dracut-initramfs-restore as well, preventing the script from detecting
that the unpack of the initramfs is incomplete, which later causes a
crash to happen when "shutdown" tries to execute from the unpacked
initramfs.

This fix makes sure dracut-initramfs-restore remains alive to detect
the unpack failed (because cpio was killed by systemd too).

Refs:
 * https://bugzilla.redhat.com/show_bug.cgi?id=2023665

dracut-initramfs-restore.sh

index abe6b1e206abe56c53e13680b94822af3e28120b..d97030a34fc1bafbde8558bf8b4d03f3499efbd9 100644 (file)
@@ -6,6 +6,11 @@ set -e
 [ -e /run/initramfs/bin/sh ] && exit 0
 [ -e /run/initramfs/.need_shutdown ] || exit 0
 
+# SIGTERM signal is received upon forced shutdown: ignore the signal
+# We want to remain alive to be able to trap unpacking errors to avoid
+# switching root to an incompletely unpacked initramfs
+trap 'echo "Received SIGTERM signal, ignoring!" >&2' TERM
+
 KERNEL_VERSION="$(uname -r)"
 
 [[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut