diff options
-rw-r--r-- | init/init.c | 18 |
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"); |