summaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorDenis Vlasenko2008-03-17 13:26:51 +0000
committerDenis Vlasenko2008-03-17 13:26:51 +0000
commitfb274df0797f58cda0b3b6809769707fe21e40e7 (patch)
treea2137605d1e760bfcf025af1911c96a2f6db6e65 /init
parent9c8c03898166dd0ae32094325090d902b8828e8e (diff)
downloadbusybox-fb274df0797f58cda0b3b6809769707fe21e40e7.zip
busybox-fb274df0797f58cda0b3b6809769707fe21e40e7.tar.gz
init: do not use bb_sanitize_stdio(), "/dev/null" may be missing (yet)
Diffstat (limited to 'init')
-rw-r--r--init/init.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/init/init.c b/init/init.c
index 6d4969c..eefb9df 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");