openwrt/package/utils
Mark Mentovai 1310e4f1ae failsafe: fix console failsafe shell
When running a failsafe shell on a console, job control was unavailable,
and ^C did not function correctly.

This change invokes console failsafe shells via `setsid`, making them
session leaders and allowing them to claim controlling terminals, which
makes job control function properly. To support this, the busybox
`setsid` utility is enabled. This has a minimal 149-byte size impact on
a test x86_64 squashfs rootfs image.

^C was ignored in subprocesses of failsafe shells: it was not possible
to ^C out of a program that would not exit on its own, such as many
typical `ping` invocations. As job control was unavailable, it was not
possible to suspend these subprocesses either, causing a hung program to
tie up a console indefinitely, unless another means to signal the
program was available. This was caused by SIGINT being placed at
disposition SIG_IGN by the shell running preinit, which it did because
the console shell was executed asynchronously with &. That disposition
was inherited by the console shell and its subprocesses, generally
causing ^C to have no effect.

As there is no way in busybox `ash` to reset the disposition of a signal
already ignored at shell entry, and no apparent way to avoid SIGINT
being placed at SIG_IGN when & is used in preinit, an alternative
construct is needed. Now, `start-stop-daemon` is used to start (-S) the
console failsafe shell in the background (-b). This approach does not
alter SIGINT, allowing the console shell to be started with that
signal's handling intact, and normal ^C processing to occur.

busybox `ash` has some behaviors conditional on SHLVL, and while the
console shells ought to run at SHLVL=1, they were not by virtue of being
started by the shell-based preinit system. Additionally, a variety of
detritus was present in the console shell's environment, carried over
from preinit. These conditions are corrected by running the console
shell via `env -i` to clear the environment and establish a minimum and
correct set of environment variables for operation, in the same manner
as `login`. HOME is not explicitly set, because it's addressed in
/etc/profile. For non-failsafe console shells when
system.@system[0].ttylogin = 0, `login -f root` achieves a similar
effect. (`login` already started non-failsafe console shells when
ttylogin = 1 and behaved correctly. This brings the ttylogin = 0 case to
parity.) Note that even `login -f` is somewhat undesirable for failsafe
shells because it requires a viable /etc/passwd, hence the `env -i`
construct in that case.

The TERM environment variable from the preinit environment, with value
"linux", would rarely be correct for serial consoles. Now, the preinit
TERM value is preserved (or set to "linux" if unset) only when the
console is /dev/console or /dev/tty[0-9]*. Otherwise, it will be set to
a safe default appropriate for serial consoles, "vt102", as used for
serial consoles by busybox init. This "linux"/"vt102" TERM setting is
also duplicated for non-failsafe console shells.

This also indicates failsafe mode by showing "- failsafe -" on all
consoles (not just the last-defined one). It sets a hostname of
"OpenWrt-failsafe" in failsafe mode which is rendered in the shell's
prompt as a reminder of the mode during interactive failsafe use.
Previously, no hostname was set, which resulted in the kernel-default
hostname, "(none)", appearing in failsafe shell prompts.

Signed-off-by: Mark Mentovai <mark@mentovai.com>
Link: https://github.com/openwrt/openwrt/pull/16113
Signed-off-by: Robert Marko <robimarko@gmail.com>
2024-08-19 18:55:00 +02:00
..
adb packages: assign PKG_CPE_ID for all missing packages 2023-09-19 20:21:13 +02:00
audit audit: fix compile error on some systems 2024-05-13 10:12:06 +02:00
bcm27xx-utils bcm27xx-utils: update to latest version 2024-05-10 09:17:52 +02:00
bcm4908img bcm4908img: detect Linksys images 2021-10-02 20:26:42 +02:00
bsdiff bsdiff: Add patches for CVEs 2023-10-09 23:42:37 +02:00
busybox failsafe: fix console failsafe shell 2024-08-19 18:55:00 +02:00
bzip2 bzip2: add linker option LDFLAGS 2019-10-19 12:49:11 +02:00
checkpolicy checkpolicy: update to 3.5 2023-05-18 10:14:13 +02:00
ct-bugcheck ct-bugcheck: report to https://openwrt.org by default 2019-08-18 15:23:25 +00:00
debugcc treewide: package: update missed hashes after switch to ZSTD 2024-04-07 14:56:04 +02:00
dns320l-mcu dns320l-mcu: Mark as nonshared to build in step 1 2024-07-30 21:42:33 +02:00
dtc dtc: fix compilation with both libraries 2024-03-29 23:42:22 +01:00
e2fsprogs e2fsprogs: remove HostBuild 2024-06-28 11:25:58 +02:00
f2fs-tools f2fs-tools: Add missing 'f2fslabel' symlink 2024-07-03 11:14:42 +02:00
fbtest packages/utils: fbtest fix Makefile 2020-05-28 11:22:22 +02:00
firmware-utils firmware-utils: Mark as nonshared to build in step 1 2024-07-30 21:42:33 +02:00
fitblk fitblk: move shell functions to common file 2024-07-18 11:48:53 +01:00
fritz-tools fritz-tools: fix segfault in caldata-extract 2023-03-02 17:04:28 +01:00
jboot-tools firmware: add JBOOT based devices config extractor 2018-03-18 22:22:38 +01:00
jsonfilter treewide: update PKG_MIRROR_HASH to zst 2024-04-06 11:24:18 +02:00
lua lua: fix CVE-2014-5461 2024-02-17 01:55:21 +01:00
lua5.3 lua5.3: backport CVE fix 2024-02-17 01:55:49 +01:00
mdadm mdadm: update to 4.3 2024-06-06 22:02:21 +02:00
mtd-utils utils: mtd-utils: update to 2.2.0 2024-06-26 09:23:27 +02:00
nvram bcm53xx: Linksys EA9200 nvram and 02_network fixes 2023-10-22 11:11:43 +02:00
omnia-mcutool utils: omnia-mcutool: Bump to 0.3-rc3 2024-08-06 10:49:21 +02:00
osafeloader packages: mark packages depending on a target as nonshared 2017-01-24 09:45:05 +01:00
policycoreutils policycoreutils: update to 3.5 2023-05-18 10:14:13 +02:00
px5g-mbedtls px5g-mbedtls: add subjectAltName and extendedKeyUsage to SSL certs 2024-08-13 21:07:13 +02:00
px5g-wolfssl px5g-wolfssl: Fix permission of private key 2023-11-07 21:55:55 +01:00
ravpower-mcu treewide: update PKG_MIRROR_HASH to zst 2024-04-06 11:24:18 +02:00
secilc package/utils/secilc: drop PKG_CPE_ID 2024-06-02 20:49:48 +02:00
spidev_test sdk: add spidev-test to the bundle of userspace sources 2022-07-17 14:19:21 +02:00
ucode ucode: update to Git HEAD (2024-07-11) 2024-07-12 16:38:42 +02:00
ucode-mod-bpf ucode-mod-bpf: add new package for a ucode libbpf binding 2023-01-09 11:35:20 +01:00
uencrypt uencrypt: Fix mbedtls 3.6 compatibility 2024-04-28 21:42:18 +02:00
ugps treewide: update PKG_MIRROR_HASH to zst 2024-04-06 11:24:18 +02:00
usbgadget package: new package for usb gadget setup 2023-12-28 13:10:32 +08:00
usbmode usbmode: add Huawei E5785 2024-05-23 22:49:25 +02:00
util-linux util-linux: update to v2.40.2 2024-07-27 18:59:42 +02:00
yafut yafut: update to fix basename() issue 2024-06-11 14:27:47 +02:00
zyxel-bootconfig mediatek: add support for ZyXEL NWA50AX Pro 2023-07-21 20:28:13 +02:00