From 8ef4f7a9a9a68bad49e8417d5ed346dc927e1d2c Mon Sep 17 00:00:00 2001 From: Saketh Pothireddy Date: Mon, 24 Apr 2023 18:43:48 +0000 Subject: vboot: update get system properties `VbGetSystemPropertyString` header promises that the property string will be read into the passed in dest buffer, however for some system properties the values are not placed in buffer but returned directly. this patch fixes that error Before, running `VbGetSystemPropertyString("minios_priority", buf, size):` ``` buf: return value: B ``` After, same command: ``` buf: B return value: B ``` BRANCH=none BUG=none TEST=Tested with an executable on brya Signed-off-by: Saketh Pothireddy Change-Id: I87a0aa8638e719bc5bbea579ecaca4754a38c02e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/4468208 Reviewed-by: Jae Hoon Kim Reviewed-by: Julius Werner Commit-Queue: Saketh Pothireddy Tested-by: Saketh Pothireddy --- host/lib/crossystem.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c index a7b04b99..24449b91 100644 --- a/host/lib/crossystem.c +++ b/host/lib/crossystem.c @@ -536,9 +536,9 @@ const char *VbGetSystemPropertyString(const char *name, char *dest, size_t size) if (!strcasecmp(name,"kernkey_vfy")) { switch(GetVdatInt(VDAT_INT_KERNEL_KEY_VERIFIED)) { case 0: - return "hash"; + return StrCopy(dest, "hash", size); case 1: - return "sig"; + return StrCopy(dest, "sig", size); default: return NULL; } @@ -548,31 +548,35 @@ const char *VbGetSystemPropertyString(const char *name, char *dest, size_t size) return GetVdatString(dest, size, VDAT_STRING_LOAD_FIRMWARE_DEBUG); } else if (!strcasecmp(name, "fw_try_next")) { - return vb2_get_nv_storage(VB2_NV_TRY_NEXT) ? "B" : "A"; + return StrCopy(dest, vb2_get_nv_storage(VB2_NV_TRY_NEXT) ? + "B" : "A", size); } else if (!strcasecmp(name, "fw_tried")) { - return vb2_get_nv_storage(VB2_NV_FW_TRIED) ? "B" : "A"; + return StrCopy(dest, vb2_get_nv_storage(VB2_NV_FW_TRIED) ? + "B" : "A", size); } else if (!strcasecmp(name, "fw_result")) { int v = vb2_get_nv_storage(VB2_NV_FW_RESULT); if (v < ARRAY_SIZE(fw_results)) - return fw_results[v]; + return StrCopy(dest, fw_results[v], size); else - return "unknown"; + return StrCopy(dest, "unknown", size); } else if (!strcasecmp(name, "fw_prev_tried")) { - return vb2_get_nv_storage(VB2_NV_FW_PREV_TRIED) ? "B" : "A"; + return StrCopy(dest, vb2_get_nv_storage(VB2_NV_FW_PREV_TRIED) ? + "B" : "A", size); } else if (!strcasecmp(name, "fw_prev_result")) { int v = vb2_get_nv_storage(VB2_NV_FW_PREV_RESULT); if (v < ARRAY_SIZE(fw_results)) - return fw_results[v]; + return StrCopy(dest, fw_results[v], size); else - return "unknown"; + return StrCopy(dest, "unknown", size); } else if (!strcasecmp(name,"dev_default_boot")) { int v = vb2_get_nv_storage(VB2_NV_DEV_DEFAULT_BOOT); if (v < ARRAY_SIZE(default_boot)) - return default_boot[v]; + return StrCopy(dest, default_boot[v], size); else - return "unknown"; + return StrCopy(dest, "unknown", size); } else if (!strcasecmp(name, "minios_priority")) { - return vb2_get_nv_storage(VB2_NV_MINIOS_PRIORITY) ? "B" : "A"; + return StrCopy(dest, vb2_get_nv_storage(VB2_NV_MINIOS_PRIORITY) + ? "B" : "A", size); } return NULL; -- cgit v1.2.1