perf parse-event: Add memory allocation test for name terms
authorIan Rogers <irogers@google.com>
Tue, 27 Jun 2023 18:10:23 +0000 (11:10 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 28 Jul 2023 22:01:16 +0000 (19:01 -0300)
If the name memory allocation fails then propagate to the parser.

Committer notes:

Use $(BISON_FALLBACK_FLAGS) on the bison call so that we continue
building with older bison versions, before 3.81, where YYNOMEM isn't
present.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: bpf@vger.kernel.org
Link: https://lore.kernel.org/r/20230627181030.95608-7-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/Build
tools/perf/util/parse-events.c
tools/perf/util/parse-events.y

index 9c6c447..bb08149 100644 (file)
@@ -246,7 +246,7 @@ $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-flex.h: util/parse-
 
 $(OUTPUT)util/parse-events-bison.c $(OUTPUT)util/parse-events-bison.h: util/parse-events.y
        $(call rule_mkdir)
-       $(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) $(BISON_FILE_PREFIX_MAP) \
+       $(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) $(BISON_FILE_PREFIX_MAP) $(BISON_FALLBACK_FLAGS) \
                -o $(OUTPUT)util/parse-events-bison.c -p parse_events_
 
 $(OUTPUT)util/expr-flex.c $(OUTPUT)util/expr-flex.h: util/expr.l $(OUTPUT)util/expr-bison.c
index 75778d5..83adb0c 100644 (file)
@@ -1973,8 +1973,11 @@ int parse_events_name(struct list_head *list, const char *name)
        struct evsel *evsel;
 
        __evlist__for_each_entry(list, evsel) {
-               if (!evsel->name)
+               if (!evsel->name) {
                        evsel->name = strdup(name);
+                       if (!evsel->name)
+                               return -ENOMEM;
+               }
        }
 
        return 0;
index b09a5fa..3ee3517 100644 (file)
@@ -263,7 +263,7 @@ PE_EVENT_NAME event_def
        free($1);
        if (err) {
                free_list_evsel($2);
-               YYABORT;
+               YYNOMEM;
        }
        $$ = $2;
 }