[PATCH] sanitize when kernel starts init without any fd opened

Maxime Bizon mbizon at freebox.fr
Mon Jun 11 17:40:15 UTC 2007


Since [17937], the "controlling tty hack" code has been removed from
init.c.

It added an (I think) unwanted side effect.

The kernel may be unable to open a console, and then starts init without
any fd opened. The previous code would end up opening /dev/null and set
std(in|out|err) to it for any inittab line with "terminal" field empty,
but the new code doesn't, and it took me some time to understand why
some daemons were not working.

In case it's a mistake, this (very dirty) patch restore the old
behaviour.


--- busybox-1.6.0/init/init.c.old	2007-06-11 19:28:23.000000000 +0200
+++ busybox-1.6.0/init/init.c	2007-06-11 19:28:29.000000000 +0200
@@ -265,6 +265,7 @@
 {
 	struct serial_struct sr;
 	char *s;
+	int i;
 
 	s = getenv("CONSOLE");
 	if (!s) s = getenv("console");
@@ -290,6 +291,11 @@
 #endif
 	} else if (!s)
 		putenv((char*)"TERM=linux");
+
+	for (i = 0; i < 3; i++) {
+		if (dup2(i, i))
+			dup2(i, device_open(bb_dev_null, O_RDWR));
+	}
 }
 
 static void fixup_argv(int argc, char **argv, const char *new_argv0)


-- 
Maxime




More information about the busybox mailing list