[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