We expect parse_events__free_terms() destory the full config term list.
However, current code leaves the list header unclean, and points to
a invalidated linked list.

Signed-off-by: Wang Nan <[email protected]>
Cc: He Kuang <[email protected]>
Cc: Alexei Starovoitov <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Masami Hiramatsu <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Zefan Li <[email protected]>
Cc: [email protected]
---
 tools/perf/util/parse-events.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 813d9b2..e8b2d85 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -2072,8 +2072,15 @@ void parse_events__free_terms(struct list_head *terms)
 {
        struct parse_events_term *term, *h;
 
-       list_for_each_entry_safe(term, h, terms, list)
+       if (!terms)
+               return;
+
+       list_for_each_entry_safe(term, h, terms, list) {
+               list_del(&term->list);
                free(term);
+       }
+
+       free(terms);
 }
 
 void parse_events_evlist_error(struct parse_events_evlist *data,
-- 
1.8.3.4

Reply via email to