diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-10-25 02:40:32 +0400 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-10-25 02:40:32 +0400 |
commit | 3b060528a26830ee26aab4e9829ac3a310f06218 (patch) | |
tree | 45d56a63d960fdd4dddea167812b6c2f11d679f9 /init/init.c | |
parent | 03a5fe378e50cb7a43c4c367c6c0e18e6f156597 (diff) |
init: do not sleep forever on usage errors
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'init/init.c')
-rw-r--r-- | init/init.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/init/init.c b/init/init.c index 12348078d..a7bbd5e64 100644 --- a/init/init.c +++ b/init/init.c @@ -660,7 +660,9 @@ static struct init_action *mark_terminated(pid_t pid) return a; } } - update_utmp(pid, DEAD_PROCESS, /*tty_name:*/ NULL, /*username:*/ NULL, /*hostname:*/ NULL); + update_utmp(pid, DEAD_PROCESS, /*tty_name:*/ NULL, + /*username:*/ NULL, + /*hostname:*/ NULL); } return NULL; } @@ -1086,8 +1088,6 @@ static int check_delayed_sigs(void) int init_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int init_main(int argc UNUSED_PARAM, char **argv) { - die_sleep = 30 * 24*60*60; /* if xmalloc would ever die... */ - if (argv[1] && strcmp(argv[1], "-q") == 0) { return kill(1, SIGHUP); } @@ -1106,6 +1106,15 @@ int init_main(int argc UNUSED_PARAM, char **argv) #endif } + /* If, say, xmalloc would ever die, we don't want to oops kernel + * by exiting. + * NB: we set die_sleep *after* PID 1 check and bb_show_usage. + * Otherwise, for example, "init u" ("please rexec yourself" + * command for sysvinit) will show help text (which isn't too bad), + * *and sleep forever* (which is bad!) + */ + die_sleep = 30 * 24*60*60; + /* Figure out where the default console should be */ console_init(); set_sane_term(); @@ -1173,7 +1182,7 @@ int init_main(int argc UNUSED_PARAM, char **argv) /* SELinux in enforcing mode but load_policy failed */ message(L_CONSOLE, "can't load SELinux Policy. " "Machine is in enforcing mode. Halting now."); - exit(EXIT_FAILURE); + return EXIT_FAILURE; } } #endif |