From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752790AbdKVClZ (ORCPT ); Tue, 21 Nov 2017 21:41:25 -0500 Received: from shadbolt.e.decadent.org.uk ([88.96.1.126]:57489 "EHLO shadbolt.e.decadent.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752770AbdKVClX (ORCPT ); Tue, 21 Nov 2017 21:41:23 -0500 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 From: Ben Hutchings To: linux-kernel@vger.kernel.org, stable@vger.kernel.org CC: akpm@linux-foundation.org, "Jiri Olsa" , "Namhyung Kim" , "Arnaldo Carvalho de Melo" , "Wang Nan" , "Andi Kleen" , "Adrian Hunter" , "David Ahern" Date: Wed, 22 Nov 2017 01:58:12 +0000 Message-ID: X-Mailer: LinuxStableQueue (scripts by bwh) Subject: [PATCH 3.16 036/133] perf events parse: Use just one parse events state struct In-Reply-To: X-SA-Exim-Connect-IP: 2a02:8011:400e:2:6f00:88c8:c921:d332 X-SA-Exim-Mail-From: ben@decadent.org.uk X-SA-Exim-Scanned: No (on shadbolt.decadent.org.uk); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.16.51-rc1 review patch. If anyone has any objections, please let me know. ------------------ From: Arnaldo Carvalho de Melo commit d17d0878f456c8227345b6c76b918ec068fa0abd upstream. Andi reported problems when parse errors were detected with vendor events (json), because in the yyparse/parse_events_parse function we dereferenced the _data parameter to two different structs, with different layouts, which ended up making parse_events_evlist->error to point to random stack addresses. Fix it by making _data to always be struct parse_events_state, changing the only place where 'struct parse_events_term' was used in parse_events.y. Reported-by: Andi Kleen Cc: Adrian Hunter Cc: David Ahern Cc: Jiri Olsa Cc: Namhyung Kim Cc: Wang Nan Link: http://lkml.kernel.org/n/tip-bc27lshz823hxl8n9nkelcgh@git.kernel.org Fixes: 90e2b22dee90 ("perf/tool: Add support to reuse event grammar to parse out terms") Signed-off-by: Arnaldo Carvalho de Melo [bwh: Backported to 3.16: adjust context] Signed-off-by: Ben Hutchings --- tools/perf/util/parse-events.c | 2 +- tools/perf/util/parse-events.h | 5 +---- tools/perf/util/parse-events.y | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -908,7 +908,7 @@ static int parse_events__scanner(const c */ int parse_events_terms(struct list_head *terms, const char *str) { - struct parse_events_terms data = { + struct parse_events_state data = { .terms = NULL, }; int ret; --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -65,10 +65,7 @@ struct parse_events_state { struct list_head list; int idx; int nr_groups; -}; - -struct parse_events_terms { - struct list_head *terms; + struct list_head *terms; }; int parse_events__is_hardcoded_term(struct parse_events_term *term); --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -346,7 +346,7 @@ PE_RAW start_terms: event_config { - struct parse_events_terms *data = _data; + struct parse_events_state *data = _data; data->terms = $1; }