boot: Query EFI var size before fetching them

This commit is contained in:
Jan Janssen
2023-02-21 14:44:53 +01:00
parent b3e2557629
commit a409607489
+7 -6
View File
@@ -186,24 +186,25 @@ EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const char16_t *name, ui
}
EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const char16_t *name, char **ret, size_t *ret_size) {
_cleanup_free_ char *buf = NULL;
size_t l;
EFI_STATUS err;
assert(vendor);
assert(name);
l = sizeof(char16_t *) * EFI_MAXIMUM_VARIABLE_SIZE;
buf = xmalloc(l);
size_t size = 0;
err = RT->GetVariable((char16_t *) name, (EFI_GUID *) vendor, NULL, &size, NULL);
if (err != EFI_BUFFER_TOO_SMALL)
return err;
err = RT->GetVariable((char16_t *) name, (EFI_GUID *) vendor, NULL, &l, buf);
_cleanup_free_ void *buf = xmalloc(size);
err = RT->GetVariable((char16_t *) name, (EFI_GUID *) vendor, NULL, &size, buf);
if (err != EFI_SUCCESS)
return err;
if (ret)
*ret = TAKE_PTR(buf);
if (ret_size)
*ret_size = l;
*ret_size = size;
return EFI_SUCCESS;
}