From d8c64b7f90b053d7bdf8d83133d9a4cc5be788dd Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Thu, 9 Jul 2015 13:02:54 +0200 Subject: 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.. --- src/boot/efi/boot.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/boot/efi') diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index eb1a4e3b66..861adff29f 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); -- cgit v1.2.3-54-g00ecf