• Arnaldo Carvalho de Melo's avatar
    perf script: Fix allocation of evsel->priv related to per-event dump files · 36d3e413
    Arnaldo Carvalho de Melo authored
    When printing output we may want to generate per event files, where the
    --per-event-dump option should be used, creating perf.data.EVENT.dump
    files instead of printing to stdout.
    
    The callback thar processes event thus expects that evsel->priv->fp
    should point to either the per-event FILE descriptor or to stdout.
    
    The a3af66f5 ("perf script: Fix crash because of missing
    evsel->priv") changeset fixed a case where evsel->priv wasn't setup,
    thus set to NULL, causing a segfault when trying to access
    evsel->priv->fp.
    
    But it did it for the non --per-event-dump case by allocating a 'struct
    perf_evsel_script' just to set its ->fp to stdout.
    
    Since evsel->priv is only freed when --per-event-dump is used, we ended
    up with a memory leak, detected using ASAN.
    
    Fix it by using the same method as perf_script__setup_per_event_dump(),
    and reuse that static 'struct perf_evsel_script'.
    
    Also check if evsel_script__new() failed.
    
    Fixes: a3af66f5 ("perf script: Fix crash because of missing evsel->priv")
    Reported-by: default avatarIan Rogers <irogers@google.com>
    Tested-by: default avatarIan Rogers <irogers@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Link: https://lore.kernel.org/lkml/ZH+F0wGAWV14zvMP@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    36d3e413
builtin-script.c 115 KB