summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configs/chromeos_seaboard_common.h6
-rw-r--r--include/configs/tegra2-common.h2
-rw-r--r--lib/chromeos/boot_kernel.c22
3 files changed, 20 insertions, 10 deletions
diff --git a/include/configs/chromeos_seaboard_common.h b/include/configs/chromeos_seaboard_common.h
index 501b727cf77..bc91aba0420 100644
--- a/include/configs/chromeos_seaboard_common.h
+++ b/include/configs/chromeos_seaboard_common.h
@@ -12,6 +12,12 @@
#define CONFIG_CHROMEOS
/*
+ * This is the default kernel command line to a Chrome OS kernel. An ending
+ * space character helps us concatenate more arguments.
+ */
+#define CHROMEOS_BOOTARGS "cros_vboot " CONFIG_BOOTARGS " "
+
+/*
* Use the fdt to decide whether to load the environment early in start-up
* (even before we decide if we're entering developer mode).
*/
diff --git a/include/configs/tegra2-common.h b/include/configs/tegra2-common.h
index c938d037eb6..244408c440b 100644
--- a/include/configs/tegra2-common.h
+++ b/include/configs/tegra2-common.h
@@ -230,7 +230,7 @@
* extra_bootargs: Filled in by update_firmware_vars.py script in some cases.
*/
#define CONFIG_REGEN_ALL_SETTINGS \
- "common_bootargs=" CONFIG_BOOTARGS "\0" \
+ "common_bootargs=cros_legacy " CONFIG_BOOTARGS "\0" \
\
"dev_extras=\0" \
"extra_bootargs=\0" \
diff --git a/lib/chromeos/boot_kernel.c b/lib/chromeos/boot_kernel.c
index 69ea6a169c3..54ff83dcde0 100644
--- a/lib/chromeos/boot_kernel.c
+++ b/lib/chromeos/boot_kernel.c
@@ -167,12 +167,17 @@ static void update_cmdline(char *src, int devnum, int partnum, uint8_t *guid,
int boot_kernel(VbSelectAndLoadKernelParams *kparams, crossystem_data_t *cdata)
{
- char cmdline_buf[CROS_CONFIG_SIZE + EXTRA_BUFFER];
- char cmdline_out[CROS_CONFIG_SIZE + EXTRA_BUFFER];
+ /* sizeof(CHROMEOS_BOOTARGS) reserves extra 1 byte */
+ char cmdline_buf[sizeof(CHROMEOS_BOOTARGS) + CROS_CONFIG_SIZE];
+ /* Reserve EXTRA_BUFFER bytes for update_cmdline's string replacement */
+ char cmdline_out[sizeof(CHROMEOS_BOOTARGS) + CROS_CONFIG_SIZE +
+ EXTRA_BUFFER];
char load_address[32];
char *argv[2] = {"bootm", load_address};
char *cmdline;
+ strcpy(cmdline_buf, CHROMEOS_BOOTARGS);
+
/*
* casting bootloader_address of uint64_t type to uintptr_t before
* further casting it to char * to avoid compiler warning "cast to
@@ -180,16 +185,15 @@ int boot_kernel(VbSelectAndLoadKernelParams *kparams, crossystem_data_t *cdata)
*/
cmdline = get_kernel_config((char *)
(uintptr_t)kparams->bootloader_address);
- strncpy(cmdline_buf, cmdline, CROS_CONFIG_SIZE);
-
- /* if we have init bootargs, append it */
- if ((cmdline = getenv("bootargs"))) {
- strcat(cmdline_buf, " ");
- strncat(cmdline_buf, cmdline, EXTRA_BUFFER - 1);
- }
+ /*
+ * strncat could write CROS_CONFIG_SIZE + 1 bytes to cmdline_buf. This
+ * is okay because the extra 1 byte has been reserved in sizeof().
+ */
+ strncat(cmdline_buf, cmdline, CROS_CONFIG_SIZE);
VBDEBUG(PREFIX "cmdline before update: %s\n", cmdline_buf);
+ /* TODO fix potential buffer overflow */
update_cmdline(cmdline_buf,
get_dev_num(kparams->disk_handle),
kparams->partition_number + 1,