From 9159b38c434bf0bcc11f62c96a9aa6cfe727ab14 Mon Sep 17 00:00:00 2001 From: 2xsec Date: Mon, 6 Aug 2018 13:19:53 +0900 Subject: [PATCH] coverity: #1438235 Resource leak Signed-off-by: 2xsec --- src/lxc/pam/pam_cgfs.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/lxc/pam/pam_cgfs.c b/src/lxc/pam/pam_cgfs.c index 3ba423c6a..307b5840c 100644 --- a/src/lxc/pam/pam_cgfs.c +++ b/src/lxc/pam/pam_cgfs.c @@ -1185,8 +1185,7 @@ static bool cgv1_init(uid_t uid, gid_t gid) if (!controller_list) continue; - if (cgv1_controller_list_is_dup(cgv1_hierarchies, - controller_list)) { + if (cgv1_controller_list_is_dup(cgv1_hierarchies, controller_list)) { free(controller_list); continue; } @@ -1203,13 +1202,14 @@ static bool cgv1_init(uid_t uid, gid_t gid) free(mountpoint); continue; } + trim(base_cgroup); pam_cgfs_debug("Detected cgroupfs v1 controller \"%s\" with " - "mountpoint \"%s\" and cgroup \"%s\".\n", - controller_list[0], mountpoint, base_cgroup); - cgv1_add_controller(controller_list, mountpoint, base_cgroup, - NULL); + "mountpoint \"%s\" and cgroup \"%s\"\n", + controller_list[0], mountpoint, base_cgroup); + cgv1_add_controller(controller_list, mountpoint, base_cgroup, NULL); } + free_string_list(klist); free_string_list(nlist); free(basecginfo); @@ -1224,6 +1224,7 @@ static bool cgv1_init(uid_t uid, gid_t gid) for (it = cgv1_hierarchies; it && *it; it++) { if ((*it)->controllers) { char *init_cgroup, *user_slice; + /* We've already stored the controller and received its * current cgroup. If we now fail to retrieve its init * cgroup, we should probably fail. @@ -1233,17 +1234,20 @@ static bool cgv1_init(uid_t uid, gid_t gid) free(basecginfo); return false; } + cg_systemd_prune_init_scope(init_cgroup); (*it)->init_cgroup = init_cgroup; pam_cgfs_debug("cgroupfs v1 controller \"%s\" has init " - "cgroup \"%s\".\n", - (*(*it)->controllers), init_cgroup); + "cgroup \"%s\".\n", + (*(*it)->controllers), init_cgroup); /* Check whether systemd has already created a cgroup * for us. */ user_slice = must_make_path((*it)->mountpoint, (*it)->base_cgroup, NULL); if (cg_systemd_created_user_slice((*it)->base_cgroup, (*it)->init_cgroup, user_slice, uid)) (*it)->systemd_user_slice = true; + + free(user_slice); } } free(basecginfo); -- 2.47.2