diff options
author | Jan Janssen <medhefgo@web.de> | 2023-01-07 11:17:29 +0100 |
---|---|---|
committer | Jan Janssen <medhefgo@web.de> | 2023-02-21 14:44:53 +0100 |
commit | a40960748907212883f4b7de7367e6870657016e (patch) | |
tree | bde74e854519af6193454ca950aa13dc62a29198 /src/boot | |
parent | b3e25576290820f16181d7921498caf527b574b3 (diff) | |
download | systemd-a40960748907212883f4b7de7367e6870657016e.tar.gz |
boot: Query EFI var size before fetching them
Diffstat (limited to 'src/boot')
-rw-r--r-- | src/boot/efi/util.c | 13 |
1 files 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; } |