init missing SIGTERM from `reboot` called from init script

Tito farmatito at tiscali.it
Wed Jun 13 12:10:33 UTC 2018



On 13/06/2018 10:50, Alexander Dahl wrote:
> Hei hei,
> 
> some long time after discovering problems with `reboot` called within
> an init script, I had the opportunity to investigate the issue
> further, and I'd like to get an idea, if that is a known behaviour or
> bug and if that can be fixed?
> 
> The target BSP is built with ptxdist and uses busybox and busybox init
> with plain old init scripts. Under certain circumstances one of the
> early¹ scripts from /etc/init.d just calls `reboot` and with certain
> busybox versions, no reboot happens, but the script exits and later
> scripts run, which is not wanted in that case and breaks things.
> 
> With ptxdist 2014.11.0 and busybox 1.22.1 everything is fine and works
> as expected. With ptxdist 2015.10.0 and busybox 1.23.2 the above
> described behaviour occurs, so no actual reboot then.
> 
> If I revert changeset 2bba9ad67a917de2624d427c8c107ce3e2d3d085, which
> landed in busybox 1.23.0 later, the reboot succeeds.
> 
> I studied the busybox sourcecode and found changeset
> f5e8b4278822f2413bf7e47466f55cc1a0fcca9a which landed in busybox
> 1.28.0. Backporting that change to 1.23.2 did not fix the not
> rebooting device.
> 
> What I understood from the code: with `reboot -f` busybox directly
> calls the 'reboot' syscall from the kernel, which immediately triggers
> a reboot. With just `reboot` a SIGTERM is sent to PID 1, which is init
> from busybox itself in this case. It seemes init is missing this
> signal somehow.
> 
> Based on the commit message of the 2017 changeset I tried to backport,
> I suppose there are time windows, when init does not see signals which
> should trigger a reboot. Correct?
> 
> The inittab looks like this:
> 
>    console::sysinit:/etc/init.d/rcS
>    console::respawn:/usr/bin/monit -Ic /etc/monitrc
>    console::respawn:/sbin/getty -L 115200 /dev/ttyS0 vt100
>    ::ctrlaltdel:/sbin/reboot
>    ::shutdown:/bin/umount -a -r
> 
> The rcS script comes from ptxdist without modification [1]. The init
> script in question does some operations on UBI volumes and UBIFS
> partitions and copies some data, nothing more, then reboots (it
> should).
> 
> So is that behaviour known or even desired? Should init miss signals
> while sysinit parts from inittab still run? Or is this some kind of
> bug?
> 
> Greets
> Alex
> 
> ¹ only syslogd starts before and kernel modules are loaded
> 
> [1] https://git.pengutronix.de/cgit/ptxdist/tree/projectroot/etc/init.d/rcS?id=ptxdist-2015.10.0
> 
Hi,

a dirty hack could be to run reboot in a loop until
init is ready to catch the signal.

Just my .2 cents.

Ciao,
Tito


More information about the busybox mailing list