Commit f7e8eae4 authored by Dmitry Safonov's avatar Dmitry Safonov Committed by Pavel Emelyanov

cgroup: don't forget to deallocate cg->sets

Should we like, free them?
cgroup.c:890:11: warning: Potential leak of memory pointed to by 'cg.sets'
                return -1;
                        ^
Signed-off-by: 's avatarDmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 8f95747e
......@@ -811,12 +811,21 @@ static int dump_controllers(CgroupEntry *cg)
return 0;
}
static void free_sets(CgroupEntry *cg, unsigned nr)
{
unsigned i;
for (i = 0; i < nr; i++)
xfree(cg->sets[i]->ctls);
xfree(cg->sets);
}
static int dump_sets(CgroupEntry *cg)
{
struct cg_set *set;
struct cg_ctl *ctl;
int s, c;
unsigned s, c;
void *m;
CgSetEntry *se;
CgMemberEntry *ce;
......@@ -846,8 +855,10 @@ static int dump_sets(CgroupEntry *cg)
m = xmalloc(se->n_ctls * (sizeof(CgMemberEntry *) + sizeof(CgMemberEntry)));
se->ctls = m;
ce = m + se->n_ctls * sizeof(CgMemberEntry *);
if (!m)
if (!m) {
free_sets(cg, s);
return -1;
}
c = 0;
list_for_each_entry(ctl, &set->ctls, l) {
......@@ -871,6 +882,7 @@ static int dump_sets(CgroupEntry *cg)
int dump_cgroups(void)
{
CgroupEntry cg = CGROUP_ENTRY__INIT;
int ret = -1;
BUG_ON(!criu_cgset || !root_cgset);
......@@ -889,11 +901,16 @@ int dump_cgroups(void)
if (dump_sets(&cg))
return -1;
if (dump_controllers(&cg))
return -1;
if (dump_controllers(&cg)) {
goto err;
}
pr_info("Writing CG image\n");
return pb_write_one(img_from_set(glob_imgset, CR_FD_CGROUP), &cg, PB_CGROUP);
ret = pb_write_one(img_from_set(glob_imgset, CR_FD_CGROUP), &cg, PB_CGROUP);
err:
free_sets(&cg, cg.n_sets);
xfree(cg.controllers);
return ret;
}
static int ctrl_dir_and_opt(CgControllerEntry *ctl, char *dir, int ds,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment