From: David Ahern <dsahern@gmail.com>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
linux-kernel@vger.kernel.org,
Frederic Weisbecker <fweisbec@gmail.com>,
Jiri Olsa <jolsa@redhat.com>, Mike Galbraith <efault@gmx.de>,
Namhyung Kim <namhyung@gmail.com>,
Paul Mackerras <paulus@samba.org>,
Peter Zijlstra <peterz@infradead.org>,
Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH V3 06/15] perf tools: fix parse_events_terms() freeing local variable on error path
Date: Mon, 01 Jul 2013 12:46:43 -0600 [thread overview]
Message-ID: <51D1CE93.7070804@gmail.com> (raw)
In-Reply-To: <51D13754.4080602@intel.com>
On 7/1/13 2:01 AM, Adrian Hunter wrote:
> On 28/06/13 20:19, David Ahern wrote:
>> On 6/28/13 2:43 AM, Adrian Hunter wrote:
>>> The list_head is on the stack, so just free the rest of the list.
>>>
>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>>> ---
>>> tools/perf/util/parse-events.c | 7 ++++++-
>>> tools/perf/util/parse-events.h | 1 +
>>> tools/perf/util/pmu.c | 2 +-
>>> 3 files changed, 8 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
>>> index 995fc25..d9cb055 100644
>>> --- a/tools/perf/util/parse-events.c
>>> +++ b/tools/perf/util/parse-events.c
>>> @@ -1231,12 +1231,17 @@ int parse_events_term__clone(struct
>>> parse_events_term **new,
>>> term->val.str, term->val.num);
>>> }
>>>
>>> -void parse_events__free_terms(struct list_head *terms)
>>> +void parse_events__free_terms_only(struct list_head *terms)
>>> {
>>> struct parse_events_term *term, *h;
>>>
>>> list_for_each_entry_safe(term, h, terms, list)
>>> free(term);
>>> +}
>>> +
>>> +void parse_events__free_terms(struct list_head *terms)
>>> +{
>>> + parse_events__free_terms_only(terms);
>>>
>>> free(terms);
>>> }
>>
>> I still don't understand the reasoning for an _only function. There is only
>> 1 place that mallocs the list_head and that 1 user should free its own
>> memory. All of the other users pass a stack variable.
>
> No. See parse-events.y
Fine. Fix both then. My point is that parse-events.c code should not be
freeing memory it does not allocate.
David
>
> The list head is defined as a pointer in the YYTYPE stack element:
>
> %union
> {
> char *str;
> u64 num;
> struct list_head *head;
> struct parse_events_term *term;
> }
>
> It is malloc'ed when terms are created:
>
> event_term
> {
> struct list_head *head = malloc(sizeof(*head));
> struct parse_events_term *term = $1;
>
> ABORT_ON(!head);
> INIT_LIST_HEAD(head);
> list_add_tail(&term->list, head);
> $$ = head;
> }
>
next prev parent reply other threads:[~2013-07-01 18:46 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-28 8:43 [PATCH V3 00/15] perf tools: some fixes and tweaks Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 01/15] perf tools: remove unused parameter Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 02/15] perf tools: fix missing tool parameter Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 03/15] perf tools: fix missing 'finished_round' Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 04/15] perf tools: fix parse_events_terms() segfault on error path Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 05/15] perf tools: fix new_term() missing free " Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 06/15] perf tools: fix parse_events_terms() freeing local variable " Adrian Hunter
2013-06-28 9:56 ` Jiri Olsa
2013-06-28 17:19 ` David Ahern
2013-07-01 8:01 ` Adrian Hunter
2013-07-01 18:46 ` David Ahern [this message]
2013-07-02 6:26 ` Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 07/15] perf tools: add const specifier to perf_pmu__find name parameter Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 08/15] perf tools: tidy duplicated munmap code Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 09/15] perf tools: validate perf event header size Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 10/15] perf tools: add debug prints Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 11/15] perf tools: fix symbol_conf.nr_events Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 12/15] perf tools: allow non-matching sample types Adrian Hunter
2013-06-28 8:43 ` [PATCH V3 13/15] perf tools: struct thread has a tid not a pid Adrian Hunter
2013-06-28 17:24 ` David Ahern
2013-06-28 8:43 ` [PATCH V3 14/15] perf tools: add pid to struct thread Adrian Hunter
2013-06-28 17:27 ` David Ahern
2013-06-28 8:43 ` [PATCH V3 15/15] perf tools: change "machine" functions to set thread pid Adrian Hunter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51D1CE93.7070804@gmail.com \
--to=dsahern@gmail.com \
--cc=acme@ghostprotocols.net \
--cc=adrian.hunter@intel.com \
--cc=efault@gmx.de \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=namhyung@gmail.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.