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]
Message-Id: <200609040052.15870.alon.barlev@gmail.com>
Date:	Mon, 4 Sep 2006 00:52:14 +0300
From:	Alon Bar-Lev <alon.barlev@...il.com>
To:	Andi Kleen <ak@...e.de>
Cc:	Matt Domsch <Matt_Domsch@...l.com>, Andrew Morton <akpm@...l.org>,
	linux-kernel@...r.kernel.org, johninsd@....rr.com,
	davej@...emonkey.org.uk, Riley@...liams.name,
	trini@...nel.crashing.org, davem@...emloft.net, ecd@...inaid.de,
	jj@...site.ms.mff.cuni.cz, anton@...ba.org, wli@...omorphy.com,
	lethal@...ux-sh.org, rc@....org.uk, spyro@....com, rth@...ddle.net,
	avr32@...el.com, hskinnemoen@...el.com, starvik@...s.com,
	ralf@...ux-mips.org, matthew@....cx, grundler@...isc-linux.org,
	geert@...ux-m68k.org, zippel@...ux-m68k.org, paulus@...ba.org,
	schwidefsky@...ibm.com, heiko.carstens@...ibm.com,
	uclinux-v850@....nec.co.jp, chris@...kel.net
Subject: [PATCH 01/26] Dynamic kernel command-line - common


1. Rename saved_command_line into boot_command_line, mark
   as init disposable.
2. Add dynamic allocated saved_command_line.
3. Add dynamic allocated static_command_line.
4. During startup copy:
   boot_command_line into saved_command_line.
   arch command_line into static_command_line.
5. Parse static_command_line and not
   arch command_line, so arch command_line may
   be freed.

Signed-off-by: Alon Bar-Lev <alon.barlev@...il.com>

---

diff -urNp linux-2.6.18-rc5-mm1.org/include/linux/init.h 
linux-2.6.18-rc5-mm1/include/linux/init.h
--- linux-2.6.18-rc5-mm1.org/include/linux/init.h	2006-09-03 
18:57:16.000000000 +0300
+++ linux-2.6.18-rc5-mm1/include/linux/init.h	2006-09-03 
20:30:12.000000000 +0300
@@ -67,7 +67,8 @@ extern initcall_t __con_initcall_start[]
 extern initcall_t __security_initcall_start[], 
__security_initcall_end[];
 
 /* Defined in init/main.c */
-extern char saved_command_line[];
+extern char __initdata boot_command_line[];
+extern char *saved_command_line;
 extern unsigned int reset_devices;
 
 /* used by init/main.c */
@@ -145,7 +146,7 @@ struct obs_kernel_param {
 #define early_param(str, fn)					\
 	__setup_param(str, fn, fn, 1)
 
-/* Relies on saved_command_line being set */
+/* Relies on boot_command_line being set */
 void __init parse_early_param(void);
 #endif /* __ASSEMBLY__ */
 
diff -urNp linux-2.6.18-rc5-mm1.org/init/main.c 
linux-2.6.18-rc5-mm1/init/main.c
--- linux-2.6.18-rc5-mm1.org/init/main.c	2006-09-03 
18:57:18.000000000 +0300
+++ linux-2.6.18-rc5-mm1/init/main.c	2006-09-03 
23:27:30.000000000 +0300
@@ -116,8 +116,12 @@ extern void time_init(void);
 void (*late_time_init)(void);
 extern void softirq_init(void);
 
-/* Untouched command line (eg. for /proc) saved by 
arch-specific code. */
-char saved_command_line[COMMAND_LINE_SIZE];
+/* Untouched command line saved by arch-specific code. */
+char __initdata boot_command_line[COMMAND_LINE_SIZE];
+/* Untouched saved command line (eg. for /proc) */
+char *saved_command_line;
+/* Command line for parameter parsing */
+static char *static_command_line;
 
 static char *execute_command;
 static char *ramdisk_execute_command;
@@ -400,6 +404,20 @@ static void __init smp_init(void)
 #endif
 
 /*
+ * We need to store the untouched command line for future 
reference.
+ * We also need to store the touched command line since the 
parameter
+ * parsing is performed in place, and we should allow a 
component to
+ * store reference of name/value for future reference.
+ */
+static void __init setup_command_line(char *command_line)
+{
+	saved_command_line = alloc_bootmem(strlen 
(boot_command_line)+1);
+	static_command_line = alloc_bootmem(strlen 
(command_line)+1);
+	strcpy (saved_command_line, boot_command_line);
+	strcpy (static_command_line, command_line);
+}
+
+/*
  * We need to finalize in a non-__init function or else 
race conditions
  * between the root thread and the init thread may cause 
start_kernel to
  * be reaped by free_initmem before the root thread has 
proceeded to
@@ -453,7 +471,7 @@ void __init parse_early_param(void)
 		return;
 
 	/* All fall through to do_early_param. */
-	strlcpy(tmp_cmdline, saved_command_line, 
COMMAND_LINE_SIZE);
+	strlcpy(tmp_cmdline, boot_command_line, 
COMMAND_LINE_SIZE);
 	parse_args("early options", tmp_cmdline, NULL, 0, 
do_early_param);
 	done = 1;
 }
@@ -503,6 +521,7 @@ asmlinkage void __init start_kernel(void
 	printk(KERN_NOTICE);
 	printk(linux_banner);
 	setup_arch(&command_line);
+	setup_command_line(command_line);
 	setup_per_cpu_areas();
 	smp_prepare_boot_cpu();	/* arch-specific boot-cpu hooks */
 
@@ -519,9 +538,9 @@ asmlinkage void __init start_kernel(void
 	preempt_disable();
 	build_all_zonelists();
 	page_alloc_init();
-	printk(KERN_NOTICE "Kernel command line: %s\n", 
saved_command_line);
+	printk(KERN_NOTICE "Kernel command line: %s\n", 
boot_command_line);
 	parse_early_param();
-	parse_args("Booting kernel", command_line, 
__start___param,
+	parse_args("Booting kernel", static_command_line, 
__start___param,
 		   __stop___param - __start___param,
 		   &unknown_bootoption);
 	sort_main_extable();

-- 
VGER BF report: H 0.00112924
-
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