From 0e075ac3856cb14d722504e1386ebf73cd170fe9 Mon Sep 17 00:00:00 2001 From: Andrei Borzenkov Date: Sat, 9 Jan 2016 13:28:42 +0300 Subject: [PATCH] util/setup: fix grub_util_path_list leak Add helper grub_util_free_path_list and use it where appropriate. Found by: Coverity scan. CID: 73727 --- include/grub/util/resolve.h | 1 + util/grub-install-common.c | 2 ++ util/mkimage.c | 10 ++-------- util/resolve.c | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/grub/util/resolve.h b/include/grub/util/resolve.h index f42df32f9..8923a6e6c 100644 --- a/include/grub/util/resolve.h +++ b/include/grub/util/resolve.h @@ -31,5 +31,6 @@ struct grub_util_path_list * grub_util_resolve_dependencies (const char *prefix, const char *dep_list_file, char *modules[]); +void grub_util_free_path_list (struct grub_util_path_list *path_list); #endif /* ! GRUB_UTIL_RESOLVE_HEADER */ diff --git a/util/grub-install-common.c b/util/grub-install-common.c index 25983089f..452b230da 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -765,6 +765,8 @@ grub_install_copy_files (const char *src, grub_install_compress_file (srcf, dstf, 1); free (dstf); } + + grub_util_free_path_list (path_list); } const char *pkglib_DATA[] = {"efiemu32.o", "efiemu64.o", diff --git a/util/mkimage.c b/util/mkimage.c index dc4046185..c3365bbbd 100644 --- a/util/mkimage.c +++ b/util/mkimage.c @@ -996,7 +996,7 @@ grub_install_generate_image (const char *dir, const char *prefix, size_t prefix_size = 0; char *kernel_path; size_t offset; - struct grub_util_path_list *path_list, *p, *next; + struct grub_util_path_list *path_list, *p; size_t bss_size; grub_uint64_t start_address; void *rel_section = 0; @@ -1904,11 +1904,5 @@ grub_install_generate_image (const char *dir, const char *prefix, free (kernel_path); free (rel_section); - while (path_list) - { - next = path_list->next; - free ((void *) path_list->name); - free (path_list); - path_list = next; - } + grub_util_free_path_list (path_list); } diff --git a/util/resolve.c b/util/resolve.c index 002bfbd72..3e887d2ff 100644 --- a/util/resolve.c +++ b/util/resolve.c @@ -271,3 +271,17 @@ grub_util_resolve_dependencies (const char *prefix, return prev; } } + +void +grub_util_free_path_list (struct grub_util_path_list *path_list) +{ + struct grub_util_path_list *next; + + while (path_list) + { + next = path_list->next; + free ((void *) path_list->name); + free (path_list); + path_list = next; + } +}