From a40960748907212883f4b7de7367e6870657016e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Sat, 7 Jan 2023 11:17:29 +0100 Subject: [PATCH] boot: Query EFI var size before fetching them --- src/boot/efi/util.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c index 683724b66c..f2e543c6cc 100644 --- a/src/boot/efi/util.c +++ b/src/boot/efi/util.c @@ -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; } -- 2.25.1