From: LiFeng Date: Tue, 24 Apr 2018 19:10:15 +0000 (-0400) Subject: Fix memory leak in list_active_containers X-Git-Tag: lxc-2.0.10~170 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8558cda381a341223157e3a038b0f2cfc78f164;p=thirdparty%2Flxc.git Fix memory leak in list_active_containers Signed-off-by: LiFeng --- diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 2f37854ce..fcc8ca65e 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -4669,32 +4669,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