perf annotate-data: Ensure the number of type histograms
Arnaldo reported that there is a case where nr_histograms and histograms don't agree each other. It ended up in a segfault trying to access a NULL histograms array. Let's make sure to update the nr_histograms when the histograms array is changed. Reported-by: Arnaldo Carvalho de Melo <acme@kernel.org> Reviewed-by: Ian Rogers <irogers@google.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20240510210452.2449944-2-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
9ef30265a4
commit
2af1280b19
|
@ -1800,7 +1800,6 @@ static int alloc_data_type_histograms(struct annotated_data_type *adt, int nr_en
|
|||
sz += sizeof(struct type_hist_entry) * adt->self.size;
|
||||
|
||||
/* Allocate a table of pointers for each event */
|
||||
adt->nr_histograms = nr_entries;
|
||||
adt->histograms = calloc(nr_entries, sizeof(*adt->histograms));
|
||||
if (adt->histograms == NULL)
|
||||
return -ENOMEM;
|
||||
|
@ -1814,6 +1813,8 @@ static int alloc_data_type_histograms(struct annotated_data_type *adt, int nr_en
|
|||
if (adt->histograms[i] == NULL)
|
||||
goto err;
|
||||
}
|
||||
|
||||
adt->nr_histograms = nr_entries;
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
@ -1827,7 +1828,9 @@ static void delete_data_type_histograms(struct annotated_data_type *adt)
|
|||
{
|
||||
for (int i = 0; i < adt->nr_histograms; i++)
|
||||
zfree(&(adt->histograms[i]));
|
||||
|
||||
zfree(&adt->histograms);
|
||||
adt->nr_histograms = 0;
|
||||
}
|
||||
|
||||
void annotated_data_type__tree_delete(struct rb_root *root)
|
||||
|
|
Loading…
Reference in New Issue