[lxc-devel] [PATCH] fix memory leaks reported by cppcheck in src/lxc/lxc_usernsexec.c
S.Çağlar Onur
caglar at 10ur.org
Tue Nov 19 23:53:37 UTC 2013
Free previously allocated memory if realloc fails.
Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
---
src/lxc/lxc_usernsexec.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/lxc/lxc_usernsexec.c b/src/lxc/lxc_usernsexec.c
index 9416f27..2957dd5 100644
--- a/src/lxc/lxc_usernsexec.c
+++ b/src/lxc/lxc_usernsexec.c
@@ -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);
--
1.8.3.2
More information about the lxc-devel
mailing list