[git commit master 1/1] init: do not sleep forever on usage errors

Denys Vlasenko vda.linux at googlemail.com
Sun Oct 24 22:40:32 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=3b060528a26830ee26aab4e9829ac3a310f06218
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 init/init.c |   17 +++++++++++++----
 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
-- 
1.7.1



More information about the busybox-cvs mailing list