aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
Diffstat (limited to 'init')
-rw-r--r--init/main.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/init/main.c b/init/main.c
index 0ec25157deef..e8ae1fef0908 100644
--- a/init/main.c
+++ b/init/main.c
@@ -253,6 +253,27 @@ static int __init repair_env_string(char *param, char *val, const char *unused)
253 return 0; 253 return 0;
254} 254}
255 255
256/* Anything after -- gets handed straight to init. */
257static int __init set_init_arg(char *param, char *val, const char *unused)
258{
259 unsigned int i;
260
261 if (panic_later)
262 return 0;
263
264 repair_env_string(param, val, unused);
265
266 for (i = 0; argv_init[i]; i++) {
267 if (i == MAX_INIT_ARGS) {
268 panic_later = "init";
269 panic_param = param;
270 return 0;
271 }
272 }
273 argv_init[i] = param;
274 return 0;
275}
276
256/* 277/*
257 * Unknown boot options get handed to init, unless they look like 278 * Unknown boot options get handed to init, unless they look like
258 * unused parameters (modprobe will find them in /proc/cmdline). 279 * unused parameters (modprobe will find them in /proc/cmdline).
@@ -479,7 +500,7 @@ static void __init mm_init(void)
479 500
480asmlinkage __visible void __init start_kernel(void) 501asmlinkage __visible void __init start_kernel(void)
481{ 502{
482 char * command_line; 503 char * command_line, *after_dashes;
483 extern const struct kernel_param __start___param[], __stop___param[]; 504 extern const struct kernel_param __start___param[], __stop___param[];
484 505
485 /* 506 /*
@@ -519,9 +540,13 @@ asmlinkage __visible void __init start_kernel(void)
519 540
520 pr_notice("Kernel command line: %s\n", boot_command_line); 541 pr_notice("Kernel command line: %s\n", boot_command_line);
521 parse_early_param(); 542 parse_early_param();
522 parse_args("Booting kernel", static_command_line, __start___param, 543 after_dashes = parse_args("Booting kernel",
523 __stop___param - __start___param, 544 static_command_line, __start___param,
524 -1, -1, &unknown_bootoption); 545 __stop___param - __start___param,
546 -1, -1, &unknown_bootoption);
547 if (after_dashes)
548 parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
549 set_init_arg);
525 550
526 jump_label_init(); 551 jump_label_init();
527 552