Messages in this thread Patch in this message | | | Date | Tue, 9 Sep 2003 16:32:18 -0600 | From | Erik Andersen <> | Subject | [PATCH] fix 2.4.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--
--- orig/init/main.c 2003-08-30 10:50:15.000000000 -0600 +++ linux-2.4.22/init/main.c 2003-08-30 10:50:15.000000000 -0600 @@ -545,6 +545,12 @@ #endif } +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) @@ -587,10 +593,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_init,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."); } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |