[git commit] hush: fix fallout from FILE->HFILE conversion

Denys Vlasenko vda.linux at googlemail.com
Sun Aug 5 16:11:15 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=e9dccab9f4bf3311ae50f19e39e7e499b25edca2
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/hush.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index 3407711cd..c4b124825 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -1683,9 +1683,15 @@ static void close_all_HFILE_list(void)
 		 * It is disastrous if we share memory with a vforked parent.
 		 * I'm not sure we never come here after vfork.
 		 * Therefore just close fd, nothing more.
+		 *
+		 * ">" instead of ">=": we don't close fd#0,
+		 * interactive shell uses hfopen(NULL) as stdin input
+		 * which has fl->fd == 0, but fd#0 gets redirected in pipes.
+		 * If we'd close it here, then e.g. interactive "set | sort"
+		 * with NOFORKed sort, would have sort's input fd closed.
 		 */
-		/*hfclose(fl); - unsafe */
-		if (fl->fd >= 0)
+		if (fl->fd > 0)
+			/*hfclose(fl); - unsafe */
 			close(fl->fd);
 		fl = fl->next_hfile;
 	}


More information about the busybox-cvs mailing list