From: Zbigniew Jędrzejewski-Szmek Date: Tue, 13 Mar 2018 10:15:10 +0000 (+0100) Subject: boot: also use _cleanup_freepool_ in util.c X-Git-Tag: v239~518^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=46af0be929d40a586912e5e8937338cd590a2bc1;p=thirdparty%2Fsystemd.git boot: also use _cleanup_freepool_ in util.c efivar_get() was leaking memory on success, afaict. --- diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c index cd75c13f2b4..00bbb502035 100644 --- a/src/boot/efi/util.c +++ b/src/boot/efi/util.c @@ -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; }