]> git.proxmox.com Git - mirror_lxc.git/commitdiff
fix memory leaks reported by cppcheck in src/lxc/lxc_usernsexec.c
authorS.Çağlar Onur <caglar@10ur.org>
Tue, 19 Nov 2013 23:53:37 +0000 (18:53 -0500)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Wed, 20 Nov 2013 15:57:42 +0000 (09:57 -0600)
Free previously allocated memory if realloc fails.

Signed-off-by: S.Çağlar Onur <caglar@10ur.org>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/lxc_usernsexec.c

index 9416f274724bb2cf257378e77e52f1d093d66795..2957dd56f617e32dc0ecb990385bcb0c240d06b1 100644 (file)
@@ -201,6 +201,7 @@ static int read_default_map(char *fnam, char which, char *username)
        if (line)
                free(line);
        fclose(fin);
+       free(newmap);
        return 0;
 }
 
@@ -241,6 +242,7 @@ static int run_cmd(char **argv)
 static int map_child_uids(int pid, struct id_map *map)
 {
        char **uidargs = NULL, **gidargs = NULL;
+       char **newuidargs = NULL, **newgidargs = NULL;
        int i, nuargs = 2, ngargs = 2;
        struct id_map *m;
 
@@ -263,9 +265,12 @@ static int map_child_uids(int pid, struct id_map *map)
        for (m=map; m; m = m->next) {
                if (m->which == 'b' || m->which == 'u') {
                        nuargs += 3;
-                       uidargs = realloc(uidargs, (nuargs+1) * sizeof(*uidargs));
-                       if (!uidargs)
+                       newuidargs = realloc(uidargs, (nuargs+1) * sizeof(*uidargs));
+                       if (!newuidargs) {
+                               free(uidargs)
                                return -1;
+                       }
+                       uidargs = newuidargs;
                        uidargs[nuargs - 3] = malloc(21);
                        uidargs[nuargs - 2] = malloc(21);
                        uidargs[nuargs - 1] = malloc(21);
@@ -278,9 +283,12 @@ static int map_child_uids(int pid, struct id_map *map)
                }
                if (m->which == 'b' || m->which == 'g') {
                        ngargs += 3;
-                       gidargs = realloc(gidargs, (ngargs+1) * sizeof(*gidargs));
-                       if (!gidargs)
+                       newgidargs = realloc(gidargs, (ngargs+1) * sizeof(*gidargs));
+                       if (!newgidargs){
+                               free(gidargs);
                                return -1;
+                       }
+                       gidargs = newgidargs;
                        gidargs[ngargs - 3] = malloc(21);
                        gidargs[ngargs - 2] = malloc(21);
                        gidargs[ngargs - 1] = malloc(21);