On Wed, Aug 24, 2011 at 4:41 AM, Jan Safranek <jsafr...@redhat.com> wrote:
> cgroup_walk_tree_begin() can end up with error and in some code paths
> '*handle' is not set and in some it is.
>
> The functiomn should free all resources on error + return *handle = NULL
>

typo :-)

> Signed-off-by: Jan Safranek <jsafr...@redhat.com>

Acked-by: Dhaval Giani <dhaval.gi...@gmail.com>

> ---
>
>  src/api.c |   15 +++++++++++----
>  1 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/src/api.c b/src/api.c
> index 2ed9e22..e0ed696 100644
> --- a/src/api.c
> +++ b/src/api.c
> @@ -3078,8 +3078,6 @@ int cgroup_walk_tree_begin(const char *controller, 
> const char *base_path,
>
>        cgroup_dbg("path is %s\n", base_path);
>
> -       cgroup_dbg("path is %s\n", base_path);
> -
>        if (!cg_build_path(base_path, full_path, controller))
>                return ECGOTHER;
>
> @@ -3087,6 +3085,7 @@ int cgroup_walk_tree_begin(const char *controller, 
> const char *base_path,
>
>        if (!entry) {
>                last_errno = errno;
> +               *handle = NULL;
>                return ECGOTHER;
>        }
>
> @@ -3101,20 +3100,28 @@ int cgroup_walk_tree_begin(const char *controller, 
> const char *base_path,
>        if (entry->fts == NULL) {
>                free(entry);
>                last_errno = errno;
> +               *handle = NULL;
>                return ECGOTHER;
>        }
>        ent = fts_read(entry->fts);
>        if (!ent) {
>                cgroup_dbg("fts_read failed\n");
> +               fts_close(entry->fts);
>                free(entry);
> +               *handle = NULL;
>                return ECGINVAL;
>        }
>        if (!*base_level && depth)
>                *base_level = ent->fts_level + depth;
>
>        ret = cg_walk_node(entry->fts, ent, *base_level, info, entry->flags);
> -
> -       *handle = entry;
> +       if (ret != 0) {
> +               fts_close(entry->fts);
> +               free(entry);
> +               *handle = NULL;
> +       } else {
> +               *handle = entry;
> +       }
>        return ret;
>  }
>
>
>
> ------------------------------------------------------------------------------
> EMC VNX: the world's simplest storage, starting under $10K
> The only unified storage solution that offers unified management
> Up to 160% more powerful than alternatives and 25% more efficient.
> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> _______________________________________________
> Libcg-devel mailing list
> Libcg-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/libcg-devel
>

------------------------------------------------------------------------------
EMC VNX: the world's simplest storage, starting under $10K
The only unified storage solution that offers unified management 
Up to 160% more powerful than alternatives and 25% more efficient. 
Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to