summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Huber <nico.huber@secunet.com>2019-01-30 14:29:42 +0100
committerPatrick Georgi <pgeorgi@google.com>2019-04-11 12:03:07 +0000
commit5c76ed66b8ccbcf9bd6f868d0635a0c60d7c10e6 (patch)
treec8ab4e80a5bc8b1a7a29de2ebc70b97817241d53
parent8110f46fcc9c0519f63b7357a2762467c4b0e99c (diff)
downloadcoreboot-5c76ed66b8ccbcf9bd6f868d0635a0c60d7c10e6.tar.xz
libpayload/option table: Don't pad string entries with garbage
set_option_with() expects a buffer of the exact size of the option. Change-Id: I21332394f88cf2daa4f733a544627d6d3c6ef26c Signed-off-by: Nico Huber <nico.huber@secunet.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/31348 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
-rw-r--r--payloads/libpayload/drivers/options.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/payloads/libpayload/drivers/options.c b/payloads/libpayload/drivers/options.c
index 70c2b1760d..2b0a42e1b7 100644
--- a/payloads/libpayload/drivers/options.c
+++ b/payloads/libpayload/drivers/options.c
@@ -357,7 +357,11 @@ int set_option_from_string(const struct nvram_accessor *nvram, struct cb_cmos_op
*(u64*)raw = strtoull(value, NULL, 0);
break;
case 's':
- raw = strdup(value);
+ raw = malloc(cmos_entry->length);
+ if (!raw)
+ return 1;
+ memset(raw, 0x00, cmos_entry->length);
+ strncpy(raw, value, cmos_entry->length);
break;
case 'e':
cmos_enum = lookup_cmos_enum_by_label(option_table, cmos_entry->config_id, value);