Package: kexec-tools
Version: 1:2.0.7-5
Severity: grave
Tags: patch

Rebooting via kexec is currently broken when using the default init system of 
Jessie (systemd) and may result in filesystem corruption or other unwanted 
effects of improperly shutdown services. This bug does not apply when using the 
SysV init system.

Reboots (e.g. via 'reboot', 'systemctl kexec' or 'systemctl reboot') will cause 
the LSB SysV scripts of kexec-tools (/etc/init.d/kexec-load and 
/etc/init.d/kexec) to be stopped BEFORE reaching the systemd kexec target (and 
other systemd targets), which means that other LSB init scripts and/or systemd 
services will be in a race condition with the LSB kexec script and the 
filesystems may not be properly unmounted beforce /etc/init.d/kexec calls 
/sbin/kexec -e.
As an effect of this, after rebooting via kexec, one may often observe orphaned 
inodes or other filesystem incosistencies, especially on a busy machine with 
heavy IO.

There also seems to be logical error in the /etc/init.d/kexec-load LSB script, 
because the kexec image will only get loaded when the systemd target is reboot 
- when the target is kexec, the image won't be loaded and thus a normal reboot 
will occur.

The following patch for the source package should fix this and make rebooting 
via 'systemctl kexec' possible (when /etc/default/kexec has LOAD_KEXEC 
enabled), 'reboot' or 'systemctl reboot' will result in normal reboots.


--- debian/kexec.init.d.org     2014-07-25 19:03:25.000000000 +0200
+++ debian/kexec.init.d 2015-05-19 14:26:40.680256999 +0200
@@ -36,7 +36,10 @@
        exit 3
        ;;
   stop)
-       do_stop
+       # Only execute, when running with SysV, systemd has its own kexec target
+       if [ ! -d /run/systemd/system ] ; then
+               do_stop
+       fi
        ;;
   *)
        echo "Usage: $0 start|stop" >&2
--- debian/kexec-load.init.d.org        2014-11-24 05:02:10.000000000 +0100
+++ debian/kexec-load.init.d    2015-05-19 14:27:43.431537728 +0200
@@ -102,9 +102,9 @@
        ;;
   stop)
        # If running systemd, we want kexec reboot only if current
-       # command is reboot
+       # target is kexec
        if [ -d /run/systemd/system ]; then
-               systemctl list-jobs systemd-reboot.service | grep -q 
systemd-reboot.service
+               systemctl list-jobs systemd-kexec.service | grep -q 
systemd-kexec.service
                if [ $? -ne 0 ]; then
                        exit 0
                fi


-- System Information:
Debian Release: 8.0
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.16.0-4-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages kexec-tools depends on:
ii  debconf [debconf-2.0]  1.5.56
ii  libc6                  2.19-18

kexec-tools recommends no packages.

kexec-tools suggests no packages.

-- debconf information:
* kexec-tools/load_kexec: true
  kexec-tools/use_grub_config: false


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to