From 34f16a4607d9ac1d1120c00b26ba62d287030c2d Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Tue, 6 Feb 2018 04:56:00 +0300 Subject: [PATCH] cgroups: don't leak memory on a error path CID 161693 (#1 of 1): Resource leak (RESOURCE_LEAK) 5. leaked_storage: Variable new going out of scope leaks the storage it points to. Signed-off-by: Andrei Vagin --- lib/c/criu.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/c/criu.c b/lib/c/criu.c index 931d691ec..832a54d10 100644 --- a/lib/c/criu.c +++ b/lib/c/criu.c @@ -771,17 +771,21 @@ int criu_local_add_cg_props_file(criu_opts *opts, char *path) int criu_local_add_cg_dump_controller(criu_opts *opts, char *name) { - char **new; + char **new, *ctrl_name; size_t nr; + ctrl_name = strdup(name); + if (!ctrl_name) + return -ENOMEM; + nr = opts->rpc->n_cgroup_dump_controller + 1; new = realloc(opts->rpc->cgroup_dump_controller, nr * sizeof(char *)); - if (!new) + if (!new) { + free(ctrl_name); return -ENOMEM; + } - new[opts->rpc->n_cgroup_dump_controller] = strdup(name); - if (!new[opts->rpc->n_cgroup_dump_controller]) - return -ENOMEM; + new[opts->rpc->n_cgroup_dump_controller] = ctrl_name; opts->rpc->n_cgroup_dump_controller = nr; opts->rpc->cgroup_dump_controller = new;