[lxc-devel] [PATCH] fix some larger memory leaks in cgroup code

Serge Hallyn serge.hallyn at ubuntu.com
Tue Sep 24 22:53:33 UTC 2013


Quoting Dwight Engen (dwight.engen at oracle.com):
> Don't worry about saved_errno since none of the *_free routines will set it
> 
> Signed-off-by: Dwight Engen <dwight.engen at oracle.com>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

Thanks, sorry for taking so long.  I'll rebase this on top of my
split-up-meta2 patch and apply

> ---
>  src/lxc/cgroup.c | 18 ++++++++++--------
>  1 file changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c
> index 101998b..bf7a2a2 100644
> --- a/src/lxc/cgroup.c
> +++ b/src/lxc/cgroup.c
> @@ -293,7 +293,7 @@ struct cgroup_meta_data *lxc_cgroup_load_meta2(const char **subsystem_whitelist)
>  	}
>  
>  	while (getline(&line, &sz, proc_self_mountinfo) != -1) {
> -		char *token, *saveptr = NULL;
> +		char *token, *line_tok, *saveptr = NULL;
>  		size_t i, j, k;
>  		struct cgroup_mount_point *mount_point;
>  		struct cgroup_hierarchy *h;
> @@ -302,7 +302,7 @@ struct cgroup_meta_data *lxc_cgroup_load_meta2(const char **subsystem_whitelist)
>  		if (line[0] && line[strlen(line) - 1] == '\n')
>  			line[strlen(line) - 1] = '\0';
>  
> -		for (i = 0; (token = strtok_r(line, " ", &saveptr)); line = NULL) {
> +		for (i = 0, line_tok = line; (token = strtok_r(line_tok, " ", &saveptr)); line_tok = NULL) {
>  			r = lxc_grow_array((void ***)&tokens, &token_capacity, i + 1, 64);
>  			if (r < 0)
>  				goto out4;
> @@ -441,6 +441,7 @@ struct cgroup_meta_data *lxc_cgroup_put_meta(struct cgroup_meta_data *meta_data)
>  			lxc_cgroup_hierarchy_free(meta_data->hierarchies[i]);
>  	}
>  	free(meta_data->hierarchies);
> +	free(meta_data);
>  	return NULL;
>  }
>  
> @@ -1067,29 +1068,30 @@ char *lxc_cgroup_get_hierarchy_abs_path(const char *subsystem, const char *name,
>  	struct cgroup_process_info *base_info, *info;
>  	struct cgroup_mount_point *mp;
>  	char *result = NULL;
> -	int saved_errno;
>  
>  	meta = lxc_cgroup_load_meta();
>  	if (!meta)
>  		return NULL;
>  	base_info = lxc_cgroup_get_container_info(name, lxcpath, meta);
>  	if (!base_info)
> -		return NULL;
> +		goto out1;
>  	info = find_info_for_subsystem(base_info, subsystem);
>  	if (!info)
> -		return NULL;
> +		goto out2;
>  	if (info->designated_mount_point) {
>  		mp = info->designated_mount_point; 
>  	} else {
>  		mp = lxc_cgroup_find_mount_point(info->hierarchy, info->cgroup_path, true);
>  		if (!mp)
> -			return NULL;
> +			goto out3;
>  	}
>  	result = cgroup_to_absolute_path(mp, info->cgroup_path, NULL);
> -	saved_errno = errno;
> +out3:
> +	lxc_cgroup_process_info_free(info);
> +out2:
>  	lxc_cgroup_process_info_free(base_info);
> +out1:
>  	lxc_cgroup_put_meta(meta);
> -	errno = saved_errno;
>  	return result;
>  }
>  
> -- 
> 1.8.1.4
> 
> 
> ------------------------------------------------------------------------------
> LIMITED TIME SALE - Full Year of Microsoft Training For Just $49.99!
> 1,500+ hours of tutorials including VisualStudio 2012, Windows 8, SharePoint
> 2013, SQL 2012, MVC 4, more. BEST VALUE: New Multi-Library Power Pack includes
> Mobile, Cloud, Java, and UX Design. Lowest price ever! Ends 9/20/13. 
> http://pubads.g.doubleclick.net/gampad/clk?id=58041151&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