summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2010-10-25 00:40:32 +0200
committerDenys Vlasenko2010-10-25 00:40:32 +0200
commit3b060528a26830ee26aab4e9829ac3a310f06218 (patch)
tree45d56a63d960fdd4dddea167812b6c2f11d679f9
parent03a5fe378e50cb7a43c4c367c6c0e18e6f156597 (diff)
downloadbusybox-3b060528a26830ee26aab4e9829ac3a310f06218.zip
busybox-3b060528a26830ee26aab4e9829ac3a310f06218.tar.gz
init: do not sleep forever on usage errors
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--init/init.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/init/init.c b/init/init.c
index 1234807..a7bbd5e 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