From: David Herrmann Date: Thu, 9 Jul 2015 11:02:54 +0000 (+0200) Subject: boot: fix memleaks in os-release parser X-Git-Tag: v223~126^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8c64b7f90b053d7bdf8d83133d9a4cc5be788dd;p=thirdparty%2Fsystemd.git boot: fix memleaks in os-release parser There is no guarantee that the os-release section contains each key only once, nor any guarantee that all keys are present. Make sure we properly free memory in both cases. Not that it matters much, as we're short-living, anyway. But correct code is always nicer to read.. --- diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index eb1a4e3b669..861adff29f7 100644 --- a/src/boot/efi/boot.c +++ b/src/boot/efi/boot.c @@ -1547,16 +1547,19 @@ static VOID config_entry_add_linux( Config *config, EFI_LOADED_IMAGE *loaded_ima line = content; while ((line = line_get_key_value(content, (CHAR8 *)"=", &pos, &key, &value))) { if (strcmpa((CHAR8 *)"PRETTY_NAME", key) == 0) { + FreePool(os_name); os_name = stra_to_str(value); continue; } if (strcmpa((CHAR8 *)"ID", key) == 0) { + FreePool(os_id); os_id = stra_to_str(value); continue; } if (strcmpa((CHAR8 *)"VERSION_ID", key) == 0) { + FreePool(os_version); os_version = stra_to_str(value); continue; } @@ -1571,11 +1574,11 @@ static VOID config_entry_add_linux( Config *config, EFI_LOADED_IMAGE *loaded_ima config_entry_add_loader(config, loaded_image->DeviceHandle, LOADER_LINUX, conf, 'l', os_name, path); FreePool(conf); FreePool(path); - FreePool(os_name); - FreePool(os_id); - FreePool(os_version); } + FreePool(os_name); + FreePool(os_id); + FreePool(os_version); FreePool(content); } uefi_call_wrapper(linux_dir->Close, 1, linux_dir);