lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 25 Dec 2008 22:50:44 +1030
From:	Rusty Russell <rusty@...tcorp.com.au>
To:	Ingo Molnar <mingo@...e.hu>
Cc:	Yinghai Lu <yinghai@...nel.org>, Hugh Dickins <hugh@...itas.com>,
	Stephen Rothwell <sfr@...b.auug.org.au>,
	Andrew Morton <akpm@...ux-foundation.org>,
	linux-kernel@...r.kernel.org, "Luck, Tony" <tony.luck@...el.com>
Subject: [RFC PATCH] param: start_kernel_with_args()

This is a cute corollary of the cleanup patches.  IA64 could particularly
benefit I think.

Impact: cleanup, new API

This gives a nicer entry point for archs to start_kernel; they don't
have to use boot_command_line (though they can if they want).

A nice side effect is that archs which use this entry point don't have
a COMMAND_LINE_SIZE limit any more (and if you don't define it,
boot_command_line does not exist).

Signed-off-by: Rusty Russell <rusty@...tcorp.com.au>

diff --git a/include/linux/start_kernel.h b/include/linux/start_kernel.h
--- a/include/linux/start_kernel.h
+++ b/include/linux/start_kernel.h
@@ -7,6 +7,13 @@
 /* Define the prototype for start_kernel here, rather than cluttering
    up something else. */
 
+/*
+ * Command-line pointer must be writable, must be NUL-terminated, but
+ * has no length limit and may be __initdata.
+ */
+extern asmlinkage void __init start_kernel_with_args(char *cmdline);
+
+/* Old entry point: calls arch_get_boot_command_line(). */
 extern asmlinkage void __init start_kernel(void);
 
 #endif /* _LINUX_START_KERNEL_H */
diff --git a/init/main.c b/init/main.c
--- a/init/main.c
+++ b/init/main.c
@@ -119,8 +119,11 @@ void (*late_time_init)(void);
 void (*late_time_init)(void);
 extern void softirq_init(void);
 
+#ifdef COMMAND_LINE_SIZE
 /* Untouched command line saved by arch-specific code. */
 char __initdata boot_command_line[COMMAND_LINE_SIZE];
+#endif
+
 /* Untouched saved command line (eg. for /proc) */
 char *saved_command_line;
 
@@ -522,15 +525,22 @@ void __init __weak thread_info_cache_ini
 {
 }
 
+#ifdef COMMAND_LINE_SIZE
 asmlinkage void __init start_kernel(void)
+{
+	arch_get_boot_command_line();
+	start_kernel_with_args(boot_command_line);
+}
+#endif
+
+asmlinkage void __init start_kernel_with_args(char *cmdline)
 {
 	char *static_command_line;
 
 	printk(KERN_NOTICE);
 	printk(linux_banner);
 
-	arch_get_boot_command_line();
-	parse_args("Core and early params", boot_command_line,
+	parse_args("Core and early params", cmdline,
 		   __start___core_param,
 		   __stop___core_param - __start___core_param,
 		   do_early_param, true);
@@ -579,10 +589,10 @@ asmlinkage void __init start_kernel(void
 	preempt_disable();
 	build_all_zonelists();
 	page_alloc_init();
-	printk(KERN_NOTICE "Kernel command line: %s\n", boot_command_line);
+	printk(KERN_NOTICE "Kernel command line: %s\n", cmdline);
 	/* param parsing can keep pointers to the commandline. */
-	static_command_line = alloc_bootmem(strlen(boot_command_line)+1);
-	strcpy(static_command_line, boot_command_line);
+	static_command_line = alloc_bootmem(strlen(cmdline)+1);
+	strcpy(static_command_line, cmdline);
 	parse_args("Booting kernel", static_command_line, __start___param,
 		   __stop___param - __start___param,
 		   &unknown_bootoption, false);
@@ -684,7 +694,7 @@ asmlinkage void __init start_kernel(void
 
 	ftrace_init();
 
-	saved_command_line = kstrdup(boot_command_line, GFP_KERNEL);
+	saved_command_line = kstrdup(cmdline, GFP_KERNEL);
 
 	/* Do the rest non-__init'ed, we're now alive */
 	rest_init();
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ