Re: [PATCH v2] A trivial memory leak fix while calling system_path

From: Arnaldo Carvalho de Melo
Date: Fri Sep 07 2012 - 11:39:08 EST


Em Fri, Sep 07, 2012 at 03:26:00PM +0900, Namhyung Kim escreveu:
> On Fri, 7 Sep 2012 11:34:49 +0800, liang xie wrote:
> > + const char *exec_path = perf_exec_path();
> >
> > - add_path(&new_path, perf_exec_path());
> > + add_path(&new_path, exec_path);
> > add_path(&new_path, argv0_path);
> >
> > if (old_path)
> > @@ -95,6 +96,7 @@ void setup_path(void)
> > setenv("PATH", new_path.buf, 1);
> >
> > strbuf_release(&new_path);
> > + free((void *)exec_path);
> > }
>
> The problem is that perf_exec_path() can return a non-dynamically
> allocated string (e.g. command line argument or environment string) and
> currently we cannot know where the returned string is came from.

And that is just gross, ugh. Make it always return dynamically allocated
string, not const, drop the cast on free and be done with it :-)

- Arnaldo

> It might cause much more troubles when you free that kind of string than
> just leaking a couple of bytes IMHO.
>
> Thanks,
> Namhyung
>
> >
> > static const char **prepare_perf_cmd(const char **argv)
> > diff --git a/tools/perf/util/help.c b/tools/perf/util/help.c
> > index 6f2975a..798f66d 100644
> > --- a/tools/perf/util/help.c
> > +++ b/tools/perf/util/help.c
> > @@ -187,6 +187,7 @@ void load_command_list(const char *prefix,
> > uniq(other_cmds);
> > }
> > exclude_cmds(other_cmds, main_cmds);
> > + free((void *)exec_path);
> > }
> >
> > void list_commands(const char *title, struct cmdnames *main_cmds,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/