From e07eafa839e23edace676d7cbaa5a8aa62cee3f0 Mon Sep 17 00:00:00 2001 From: LiFeng Date: Tue, 24 Apr 2018 15:10:15 -0400 Subject: [PATCH] Fix memory leak in list_active_containers Signed-off-by: LiFeng --- src/lxc/lxccontainer.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 6d41b6cf1..6a58d81ce 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -4973,32 +4973,49 @@ int list_active_containers(const char *lxcpath, char ***nret, char *recvpath = lxc_cmd_get_lxcpath(p); if (!recvpath) continue; - if (strncmp(lxcpath, recvpath, lxcpath_len) != 0) + if (strncmp(lxcpath, recvpath, lxcpath_len) != 0) { + free(recvpath); continue; + } + free(recvpath); p = lxc_cmd_get_name(p); if (!p) continue; } - if (array_contains(&ct_name, p, ct_name_cnt)) + if (array_contains(&ct_name, p, ct_name_cnt)) { + if (is_hashed) + free(p); continue; + } - if (!add_to_array(&ct_name, p, ct_name_cnt)) + if (!add_to_array(&ct_name, p, ct_name_cnt)) { + if (is_hashed) + free(p); goto free_cret_list; + } ct_name_cnt++; - if (!cret) + if (!cret) { + if (is_hashed) + free(p); continue; + } c = lxc_container_new(p, lxcpath); if (!c) { INFO("Container %s:%s is running but could not be loaded", lxcpath, p); remove_from_array(&ct_name, p, ct_name_cnt--); + if (is_hashed) + free(p); continue; } + if (is_hashed) + free(p); + /* * If this is an anonymous container, then is_defined *can* * return false. So we don't do that check. Count on the -- 2.47.2