aboutsummaryrefslogtreecommitdiff
path: root/init/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'init/init.c')
-rw-r--r--init/init.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/init/init.c b/init/init.c
index 6d4969c4b..eefb9df55 100644
--- a/init/init.c
+++ b/init/init.c
@@ -219,8 +219,22 @@ static void console_init(void)
}
messageD(L_LOG, "console='%s'", s);
} else {
- /* Make sure fd 0,1,2 are not closed */
- bb_sanitize_stdio();
+ /* Make sure fd 0,1,2 are not closed
+ * (so that they won't be used by future opens) */
+
+ /* bb_sanitize_stdio(); - WRONG.
+ * Fail if "/dev/null" doesnt exist, and for init
+ * this is a real possibility! Open code it instead. */
+
+ int fd = open(bb_dev_null, O_RDWR);
+ if (fd < 0) {
+ /* Give me _ANY_ open descriptor! */
+ fd = xopen("/", O_RDONLY); /* we don't believe this can fail */
+ }
+ while ((unsigned)fd < 2)
+ fd = dup(fd);
+ if (fd > 2)
+ close (fd);
}
s = getenv("TERM");