[lxc-devel] [PATCH] fix memory leaks reported by cppcheck in src/lxc/lxc_usernsexec.c
Serge Hallyn
serge.hallyn at ubuntu.com
Wed Nov 20 15:57:17 UTC 2013
Quoting S.Çağlar Onur (caglar at 10ur.org):
> Free previously allocated memory if realloc fails.
>
> Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>
Note that read_default_map() is not doing all it was meant to do. I'll
apply your patch, then clean that up.
> ---
> 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
>
>
> ------------------------------------------------------------------------------
> Shape the Mobile Experience: Free Subscription
> Software experts and developers: Be at the forefront of tech innovation.
> Intel(R) Software Adrenaline delivers strategic insight and game-changing
> conversations that shape the rapidly evolving mobile landscape. Sign up now.
> http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
> _______________________________________________
> Lxc-devel mailing list
> Lxc-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lxc-devel
More information about the lxc-devel
mailing list