Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf symbols: Set freed members to NULL in dso destructor

To help in debugging use after free bugs.

Reported-by: Ingo Molnar <mingo@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-3ckwsob2g1q23s77nuhexrq7@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+12 -2
+12 -2
tools/perf/util/dso.c
··· 475 475 int i; 476 476 for (i = 0; i < MAP__NR_TYPES; ++i) 477 477 symbols__delete(&dso->symbols[i]); 478 - if (dso->short_name_allocated) 478 + 479 + if (dso->short_name_allocated) { 479 480 free((char *)dso->short_name); 480 - if (dso->long_name_allocated) 481 + dso->short_name = NULL; 482 + dso->short_name_allocated = false; 483 + } 484 + 485 + if (dso->long_name_allocated) { 481 486 free((char *)dso->long_name); 487 + dso->long_name = NULL; 488 + dso->long_name_allocated = false; 489 + } 490 + 482 491 dso_cache__free(&dso->cache); 483 492 dso__free_a2l(dso); 484 493 free(dso->symsrc_filename); 494 + dso->symsrc_filename = NULL; 485 495 free(dso); 486 496 } 487 497