Commit fe713e4b authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] fix incorrect argv[0] for init

From: Erik Andersen <andersen@codepoet.org>

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...
parent f5aaaa3e
......@@ -542,12 +542,16 @@ static void do_pre_smp_initcalls(void)
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)
{
static char * argv_sh[] = { "sh", NULL, };
lock_kernel();
/*
* Tell the world that we're going to be the grim
......@@ -592,10 +596,12 @@ static int init(void * unused)
*/
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.");
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment