boot: also use _cleanup_freepool_ in util.c
efivar_get() was leaking memory on success, afaict.
This commit is contained in:
parent
a42d7cf165
commit
46af0be929
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue