fix 2.6.x incorrect argv[0] for init
PATCH 1/1 fix 2.6.x incorrect argv[0] for init
In both 2.4.x and in 2.6.x, when someone specifies "init=" to select an alternative binary to run instead of /sbin/init, argv[0] is not set correctly. This is a problem for programs such as busybox that multiplex applications based on the value of argv[0]. For example, even if you specify init=/bin/sh" on the kernel command line, busybox will still receive "/sbin/init" as argv[0], and will therefore run init rather than /bin/sh...
This patch fixes it. Please apply,
-Erik
--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--
init/main.c renamed from init/main.c.orig +13 -5
@@ -542,6 +542,12 @@spawn_ksoftirqd (); } +static void run_init_process (char *init_filename) +{ + argv_init[0 ] = init_filename; +execve (init_filename, argv_init, envp_init); +} +extern void prepare_namespace (void );static int init (void * unused)
@@ -592,10 +598,12 @@*/ if (execute_command) -execve (execute_command,argv_init,envp_init); -execve ("/sbin/init" ,argv_init,envp_init); -execve ("/etc/init" ,argv_init,envp_init); -execve ("/bin/init" ,argv_init,envp_init); -execve ("/bin/sh" ,argv_sh,envp_init); +run_init_process (execute_command); + +run_init_process ("/sbin/init" ); +run_init_process ("/etc/init" ); +run_init_process ("/bin/init" ); +run_init_process ("/bin/sh" ); +panic ("No init found. Try passing init= option to kernel." ); }