From 3b060528a26830ee26aab4e9829ac3a310f06218 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 25 Oct 2010 00:40:32 +0200 Subject: init: do not sleep forever on usage errors Signed-off-by: Denys Vlasenko --- init/init.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'init') 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 -- cgit v1.2.3