summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-08-05 12:55:01 (GMT)
committerDenys Vlasenko <vda.linux@googlemail.com>2018-08-05 16:11:15 (GMT)
commite9dccab9f4bf3311ae50f19e39e7e499b25edca2 (patch)
treee8233755aee44c94c1b99095a2d3c4db84ddaafa
parent440da97ed79841b55f0b61e4108a336b61642bff (diff)
downloadbusybox-e9dccab9f4bf3311ae50f19e39e7e499b25edca2.tar.gz
busybox-e9dccab9f4bf3311ae50f19e39e7e499b25edca2.tar.bz2
hush: fix fallout from FILE->HFILE conversion
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/hush.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 3407711..c4b1248 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;
}