diff options
author | Sören Tempel <soeren+git@soeren-tempel.net> | 2021-08-31 05:42:19 +0200 |
---|---|---|
committer | Sören Tempel <soeren+git@soeren-tempel.net> | 2021-08-31 05:42:19 +0200 |
commit | 0cbb86d7b4966adf28044a973c13fa21361a7624 (patch) | |
tree | 8ecc7734e3769a3c16972cff5e7bc379051c3940 | |
parent | ee452daac2db77d4a3446052416e626f21e18a2b (diff) |
main/busybox: backport fix for ash process substitutions
This patch is from the busybox ML and not yet merged upstream [1].
However, given the simplicity of this patch I think it is fine to apply
it anyhow for now. Especially considering that the fixed error
potentially breaks a few shell scripts.
Fixes #12960
[1]: http://lists.busybox.net/pipermail/busybox/2021-August/089128.html
-rw-r--r-- | main/busybox/0001-ash-regressions-in-process-substitution.patch | 80 | ||||
-rw-r--r-- | main/busybox/APKBUILD | 9 |
2 files changed, 86 insertions, 3 deletions
diff --git a/main/busybox/0001-ash-regressions-in-process-substitution.patch b/main/busybox/0001-ash-regressions-in-process-substitution.patch new file mode 100644 index 00000000000..98fdba7917d --- /dev/null +++ b/main/busybox/0001-ash-regressions-in-process-substitution.patch @@ -0,0 +1,80 @@ +From dab3c63da581f0d3d58e3ea1a620474eb5dad0ee Mon Sep 17 00:00:00 2001 +From: Ron Yorston <rmy@pobox.com> +Date: Mon, 30 Aug 2021 20:31:42 +0100 +Subject: [PATCH] ash: regressions in process substitution + +Stacy Harper reports that this script: + + test() { . /tmp/bb_test; } + echo "export TEST=foo" >/tmp/bb_test + test 2>/dev/null + echo "$TEST" + +correctly prints 'foo' in BusyBox 1.33 but hangs in 1.34. + +Bisection suggested the problem was caused by commit a1b0d3856 (ash: add +process substitution in bash-compatibility mode). Removing the call to +unwindredir() in cmdloop() introduced in that commit makes the script +work again. + +Additionally, these examples of process substitution: + + while true; do cat <(echo hi); done + f() { while true; do cat <(echo hi); done } + f + +result in running out of file descriptors. This is a regression from +v5 of the process substitution patch caused by changes to evalcommand() +not being transferred to v6. + +function old new delta +static.pushredir - 99 +99 +evalcommand 1729 1750 +21 +exitreset 69 86 +17 +cmdloop 372 365 -7 +unwindredir 28 - -28 +pushredir 112 - -112 +------------------------------------------------------------------------------ +(add/remove: 1/2 grow/shrink: 2/1 up/down: 137/-147) Total: -10 bytes + +Signed-off-by: Ron Yorston <rmy@pobox.com> +--- + shell/ash.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/shell/ash.c b/shell/ash.c +index b5947147a..53c140930 100644 +--- a/shell/ash.c ++++ b/shell/ash.c +@@ -10278,6 +10278,9 @@ evalcommand(union node *cmd, int flags) + + /* First expand the arguments. */ + TRACE(("evalcommand(0x%lx, %d) called\n", (long)cmd, flags)); ++#if BASH_PROCESS_SUBST ++ redir_stop = redirlist; ++#endif + file_stop = g_parsefile; + back_exitstatus = 0; + +@@ -10356,7 +10359,11 @@ evalcommand(union node *cmd, int flags) + lastarg = nargv[-1]; + + expredir(cmd->ncmd.redirect); ++#if !BASH_PROCESS_SUBST + redir_stop = pushredir(cmd->ncmd.redirect); ++#else ++ pushredir(cmd->ncmd.redirect); ++#endif + preverrout_fd = 2; + if (BASH_XTRACEFD && xflag) { + /* NB: bash closes fd == $BASH_XTRACEFD when it is changed. +@@ -13476,9 +13483,6 @@ cmdloop(int top) + #if JOBS + if (doing_jobctl) + showjobs(SHOW_CHANGED|SHOW_STDERR); +-#endif +-#if BASH_PROCESS_SUBST +- unwindredir(NULL); + #endif + inter = 0; + if (iflag && top) { diff --git a/main/busybox/APKBUILD b/main/busybox/APKBUILD index 243efce27bd..01902f30ac1 100644 --- a/main/busybox/APKBUILD +++ b/main/busybox/APKBUILD @@ -4,7 +4,7 @@ # Maintainer: Natanael Copa <ncopa@alpinelinux.org> pkgname=busybox pkgver=1.34.0 -pkgrel=1 +pkgrel=2 pkgdesc="Size optimized toolbox of many common UNIX utilities" url="https://busybox.net/" arch="all" @@ -21,10 +21,12 @@ options="suid !check" replaces="busybox-initscripts" # move of default.script triggers="busybox.trigger=/bin:/usr/bin:/sbin:/usr/sbin:/lib/modules/*" source="https://busybox.net/downloads/busybox-$pkgver.tar.bz2 + 0001-rev-correct-output-for-long-input-lines.patch + 0001-ash-regressions-in-process-substitution.patch + 0001-nologin-Install-applet-to-sbin-instead-of-usr-sbin.patch 0001-adduser-default-to-sbin-nologin-as-shell-for-system-.patch 0001-properly-fix-wget-https-support.patch - 0001-rev-correct-output-for-long-input-lines.patch 0002-fsck-resolve-LABEL-.-UUID-.-spec-to-device.patch 0003-ash-exec-busybox.static.patch 0004-app-location-for-cpio-vi-and-lspci.patch @@ -229,10 +231,11 @@ ifupdown() { sha512sums=" c57231e6d5dea8f2f5429673e9ea392a0f4b752731ec1f4903da8ca786914cda3065d80deeb28fb27d77848c892d587adf3b3150218d27cd87c5ece43de1b35a busybox-1.34.0.tar.bz2 +054e766429887e610c4a17846f495b7099bb419217f5fcc0dce0ed62b8740c2d4ee53b12a609b1830c26ac2af1eca9beb6140063b7d2665939f99f8664dfcc05 0001-rev-correct-output-for-long-input-lines.patch +61ee8a497ab53ef2cac88eb51929fb0b483930eabb8d015b5fea30eb21257b314b2fe9ec871d6c8b4208964eb1d8329c8db7039297e31618cf555dde65c2db8a 0001-ash-regressions-in-process-substitution.patch ead3403578c071c2216de17ab0543984c1f1509c12c062f03af49141547c3ea21356f3e8f0f0695550f05a41a1379dd73fc3cc18dcd78addbb411f247351e353 0001-nologin-Install-applet-to-sbin-instead-of-usr-sbin.patch a2787a3ecaf6746dadef62166e8ee6ecaa166147e5ad8b917c5838536057c875bab5f9cf40c3e05eba74d575484ac662929ac3799d58432d3a99ac46f364f302 0001-adduser-default-to-sbin-nologin-as-shell-for-system-.patch 1efe1c4894ae983fed5ac848125f8603f157b9d91c952c53f4192b48d3e50967e05559851148397b583f34fb02d480393547904b4635e4248248be567ab268ea 0001-properly-fix-wget-https-support.patch -054e766429887e610c4a17846f495b7099bb419217f5fcc0dce0ed62b8740c2d4ee53b12a609b1830c26ac2af1eca9beb6140063b7d2665939f99f8664dfcc05 0001-rev-correct-output-for-long-input-lines.patch d8694293edc8cd55cecafeb902f03c01af318e13966f399365cf792b840793891ac086bb67ef83e7a5a2e01b246497a6c6511cb6a856834f6672dee4bca76896 0002-fsck-resolve-LABEL-.-UUID-.-spec-to-device.patch 8c34dd5ce9a6e84279fa6494cbae0b254778976f341af1d0ccc2a3afb405fb22d374e9623ea83d1500da77c7463db2ed5218d2c9f49350a21114bd0bb17fd87d 0003-ash-exec-busybox.static.patch a8fc2ccced4054f5eff6ea00389906a543a1716202b19ab71fda1de0e6860c8377ed3c306ffb9efabe9fb16779a306da6770b871229f6bd1d725a84fdaa03fef 0004-app-location-for-cpio-vi-and-lspci.patch |