boot: also use _cleanup_freepool_ in util.c

efivar_get() was leaking memory on success, afaict.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2018-03-13 11:15:10 +01:00
parent a42d7cf165
commit 46af0be929

View file

@ -115,7 +115,7 @@ EFI_STATUS efivar_set_int(CHAR16 *name, UINTN i, BOOLEAN persistent) {
}
EFI_STATUS efivar_get(CHAR16 *name, CHAR16 **value) {
CHAR8 *buf;
_cleanup_freepool_ CHAR8 *buf = NULL;
CHAR16 *val;
UINTN size;
EFI_STATUS err;
@ -125,29 +125,26 @@ EFI_STATUS efivar_get(CHAR16 *name, CHAR16 **value) {
return err;
val = StrDuplicate((CHAR16 *)buf);
if (!val) {
FreePool(buf);
if (!val)
return EFI_OUT_OF_RESOURCES;
}
*value = val;
return EFI_SUCCESS;
}
EFI_STATUS efivar_get_int(CHAR16 *name, UINTN *i) {
CHAR16 *val;
_cleanup_freepool_ CHAR16 *val = NULL;
EFI_STATUS err;
err = efivar_get(name, &val);
if (!EFI_ERROR(err)) {
if (!EFI_ERROR(err))
*i = Atoi(val);
FreePool(val);
}
return err;
}
EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, CHAR16 *name, CHAR8 **buffer, UINTN *size) {
CHAR8 *buf;
_cleanup_freepool_ CHAR8 *buf = NULL;
UINTN l;
EFI_STATUS err;
@ -159,12 +156,12 @@ EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, CHAR16 *name, CHAR8 **buffer,
err = uefi_call_wrapper(RT->GetVariable, 5, name, (EFI_GUID *)vendor, NULL, &l, buf);
if (!EFI_ERROR(err)) {
*buffer = buf;
buf = NULL;
if (size)
*size = l;
} else
FreePool(buf);
return err;
}
return err;
}
VOID efivar_set_time_usec(CHAR16 *name, UINT64 usec) {
@ -306,7 +303,7 @@ CHAR8 *strchra(CHAR8 *s, CHAR8 c) {
EFI_STATUS file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, CHAR8 **content, UINTN *content_size) {
EFI_FILE_HANDLE handle;
CHAR8 *buf;
_cleanup_freepool_ CHAR8 *buf = NULL;
EFI_STATUS err;
err = uefi_call_wrapper(dir->Open, 5, dir, &handle, name, EFI_FILE_MODE_READ, 0ULL);
@ -314,11 +311,10 @@ EFI_STATUS file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, C
return err;
if (size == 0) {
EFI_FILE_INFO *info;
_cleanup_freepool_ EFI_FILE_INFO *info;
info = LibFileInfo(handle);
size = info->FileSize+1;
FreePool(info);
}
if (off > 0) {
@ -332,11 +328,11 @@ EFI_STATUS file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, C
if (!EFI_ERROR(err)) {
buf[size] = '\0';
*content = buf;
buf = NULL;
if (content_size)
*content_size = size;
} else
FreePool(buf);
}
uefi_call_wrapper(handle->Close, 1, handle);
return err;
}