1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-30 15:01:27 +02:00

efi_loader: fix 'efidebug bootorder'

* don't copy GUIDs for no reason
* shorten print format strings by using variable names
* don't use the run-time table to access exported functions
* check the result of malloc() (fixes Coverity CID 300331)

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt
2020-04-29 21:15:08 +02:00
parent dd9056c06a
commit f9f5f92bc5

View File

@@ -852,8 +852,7 @@ static int do_efi_boot_dump(cmd_tbl_t *cmdtp, int flag,
*/ */
static int show_efi_boot_order(void) static int show_efi_boot_order(void)
{ {
efi_guid_t guid; u16 *bootorder;
u16 *bootorder = NULL;
efi_uintn_t size; efi_uintn_t size;
int num, i; int num, i;
char var_name[9]; char var_name[9];
@@ -864,20 +863,25 @@ static int show_efi_boot_order(void)
size_t label_len16, label_len; size_t label_len16, label_len;
efi_status_t ret; efi_status_t ret;
guid = efi_global_variable_guid;
size = 0; size = 0;
ret = EFI_CALL(RT->get_variable(L"BootOrder", &guid, NULL, &size, ret = EFI_CALL(RT->get_variable(L"BootOrder", &efi_global_variable_guid,
NULL)); NULL, &size, NULL));
if (ret == EFI_BUFFER_TOO_SMALL) { if (ret != EFI_BUFFER_TOO_SMALL) {
bootorder = malloc(size);
ret = EFI_CALL(RT->get_variable(L"BootOrder", &guid, NULL,
&size, bootorder));
}
if (ret == EFI_NOT_FOUND) { if (ret == EFI_NOT_FOUND) {
printf("BootOrder not defined\n"); printf("BootOrder not defined\n");
ret = CMD_RET_SUCCESS; return CMD_RET_SUCCESS;
goto out; } else {
} else if (ret != EFI_SUCCESS) { return CMD_RET_FAILURE;
}
}
bootorder = malloc(size);
if (!bootorder) {
printf("ERROR: Out of memory\n");
return CMD_RET_FAILURE;
}
ret = EFI_CALL(efi_get_variable(L"BootOrder", &efi_global_variable_guid,
NULL, &size, bootorder));
if (ret != EFI_SUCCESS) {
ret = CMD_RET_FAILURE; ret = CMD_RET_FAILURE;
goto out; goto out;
} }
@@ -889,11 +893,11 @@ static int show_efi_boot_order(void)
utf8_utf16_strncpy(&p16, var_name, 9); utf8_utf16_strncpy(&p16, var_name, 9);
size = 0; size = 0;
ret = EFI_CALL(RT->get_variable(var_name16, &guid, NULL, &size, ret = EFI_CALL(efi_get_variable(var_name16,
NULL)); &efi_global_variable_guid, NULL,
&size, NULL));
if (ret != EFI_BUFFER_TOO_SMALL) { if (ret != EFI_BUFFER_TOO_SMALL) {
printf("%2d: Boot%04X: (not defined)\n", printf("%2d: %s: (not defined)\n", i + 1, var_name);
i + 1, bootorder[i]);
continue; continue;
} }
@@ -902,8 +906,9 @@ static int show_efi_boot_order(void)
ret = CMD_RET_FAILURE; ret = CMD_RET_FAILURE;
goto out; goto out;
} }
ret = EFI_CALL(RT->get_variable(var_name16, &guid, NULL, &size, ret = EFI_CALL(efi_get_variable(var_name16,
data)); &efi_global_variable_guid, NULL,
&size, data));
if (ret != EFI_SUCCESS) { if (ret != EFI_SUCCESS) {
free(data); free(data);
ret = CMD_RET_FAILURE; ret = CMD_RET_FAILURE;
@@ -922,7 +927,7 @@ static int show_efi_boot_order(void)
} }
p = label; p = label;
utf16_utf8_strncpy(&p, lo.label, label_len16); utf16_utf8_strncpy(&p, lo.label, label_len16);
printf("%2d: Boot%04X: %s\n", i + 1, bootorder[i], label); printf("%2d: %s: %s\n", i + 1, var_name, label);
free(label); free(label);
free(data); free(data);