[OpenBIOS] [commit] r1126 - trunk/openbios-devel/arch/sparc64

repository service svn at openbios.org
Fri Apr 19 09:05:34 CEST 2013


Author: mcayland
Date: Fri Apr 19 09:05:33 2013
New Revision: 1126
URL: http://tracker.coreboot.org/trac/openbios/changeset/1126

Log:
SPARC64: Remove limit on kernel command line length caused by using a static buffer

Instead use malloc() so that we can dynamically allocate the string ourselves. As
reported by Rob Landley <rob at landley.net>.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>

Modified:
   trunk/openbios-devel/arch/sparc64/openbios.c

Modified: trunk/openbios-devel/arch/sparc64/openbios.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/openbios.c	Fri Apr 19 09:05:30 2013	(r1125)
+++ trunk/openbios-devel/arch/sparc64/openbios.c	Fri Apr 19 09:05:33 2013	(r1126)
@@ -42,9 +42,6 @@
 #define NVRAM_OB_START   (0)
 #define NVRAM_OB_SIZE    ((0x1fd0 - NVRAM_OB_START) & ~15)
 
-#define OBIO_CMDLINE_MAX 256
-static char obio_cmdline[OBIO_CMDLINE_MAX];
-
 static uint8_t idprom[NVRAM_IDPROM_SIZE];
 
 struct hwdef {
@@ -370,6 +367,7 @@
 
 void arch_nvram_get(char *data)
 {
+    char *obio_cmdline;
     uint32_t size = 0;
     const struct cpudef *cpu;
     char buf[256];
@@ -401,12 +399,13 @@
         kernel_image = fw_cfg_read_i64(FW_CFG_KERNEL_ADDR);
 
     size = fw_cfg_read_i32(FW_CFG_CMDLINE_SIZE);
-    if (size > OBIO_CMDLINE_MAX - 1)
-        size = OBIO_CMDLINE_MAX - 1;
     if (size) {
+	obio_cmdline = (char *)malloc(size + 1);
         fw_cfg_read(FW_CFG_CMDLINE_DATA, obio_cmdline, size);
+	obio_cmdline[size] = '\0';
+    } else {
+	obio_cmdline = strdup("");    
     }
-    obio_cmdline[size] = '\0';
     qemu_cmdline = (uint64_t)obio_cmdline;
     cmdline_size = size;
     boot_device = fw_cfg_read_i16(FW_CFG_BOOT_DEVICE);



More information about the OpenBIOS mailing list