mbox series

[00/16] fix some perf issues detected by ASan

Message ID 20190316080556.3075-1-changbin.du@gmail.com
Headers show
Series fix some perf issues detected by ASan | expand

Message

Changbin Du March 16, 2019, 8:05 a.m. UTC
AddressSanitizer (or ASan) and UndefinedBehaviorSanitizer (or UBSan) are
very useful tools to detect program bugs. This series fixed some issues
disclosed by ASan.

AddressSanitizer (or ASan) is a GCC feature that detects memory corruption bugs
such as buffer overflows or memory leaks.
  $ cd tools/perf
  $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame-pointer -fsanitize=address'
  $ ASAN_OPTIONS=log_path=asan.log ./perf record -a
ASan outputs all detected issues into log file 'asan.log.<pid>'.

Note that this only fixes parts of the detected issues. There are many remaining
to be fixed[1].

[1] http://104.238.181.70:8080/asan.log.32555.txt

Changbin Du (16):
  perf: add doc for how to build perf with Asan and UBSan
  perf: list: fix memory leak in function is_event_supported
  perf: fix errors under optimization level '-Og'
  perf: fix an error in config template
  perf: fix a memory leak in collect_config
  perf: fix memory leak in print_sdt_events()
  perf: top: fix heap-use-after-free issue
  perf: top: fix error handing in cmd_top()
  perf: missed a map__put() in error case
  perf: remove map from names tree in __maps__remove
  perf: purge all maps from the names tree
  perf: top: fix global-buffer-overflow issue
  perf: free all counts in perf_evsel__exit
  perf: fix a memory leak of cpu_map object
  perf: fix memory leak by expr__find_other
  perf: fix a memory leak in test__perf_evsel__tp_sched_test

 tools/lib/bpf/libbpf.c                     |  2 +-
 tools/perf/Documentation/Build.txt         | 20 +++++++++
 tools/perf/Documentation/perf-config.txt   |  2 +-
 tools/perf/bench/epoll-ctl.c               |  2 +-
 tools/perf/bench/epoll-wait.c              |  2 +-
 tools/perf/builtin-top.c                   | 47 ++++++++++------------
 tools/perf/tests/backward-ring-buffer.c    |  2 +-
 tools/perf/tests/evsel-tp-sched.c          |  1 +
 tools/perf/tests/expr.c                    |  5 ++-
 tools/perf/tests/openat-syscall-all-cpus.c |  4 +-
 tools/perf/util/build-id.c                 |  1 +
 tools/perf/util/config.c                   |  3 +-
 tools/perf/util/counts.c                   | 18 +++++++++
 tools/perf/util/counts.h                   |  4 ++
 tools/perf/util/evsel.c                    |  2 +
 tools/perf/util/hist.c                     |  4 +-
 tools/perf/util/map.c                      | 18 +++++++++
 tools/perf/util/ordered-events.c           |  2 +
 tools/perf/util/parse-events.c             |  2 +
 tools/perf/util/stat.c                     | 18 ---------
 20 files changed, 106 insertions(+), 53 deletions(-)

Comments

Jiri Olsa March 18, 2019, 10:08 a.m. UTC | #1
On Sat, Mar 16, 2019 at 04:05:40PM +0800, Changbin Du wrote:
> AddressSanitizer (or ASan) and UndefinedBehaviorSanitizer (or UBSan) are
> very useful tools to detect program bugs. This series fixed some issues
> disclosed by ASan.
> 
> AddressSanitizer (or ASan) is a GCC feature that detects memory corruption bugs
> such as buffer overflows or memory leaks.
>   $ cd tools/perf
>   $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame-pointer -fsanitize=address'
>   $ ASAN_OPTIONS=log_path=asan.log ./perf record -a
> ASan outputs all detected issues into log file 'asan.log.<pid>'.
> 
> Note that this only fixes parts of the detected issues. There are many remaining
> to be fixed[1].
> 
> [1] http://104.238.181.70:8080/asan.log.32555.txt
> 
> Changbin Du (16):
>   perf: add doc for how to build perf with Asan and UBSan
>   perf: list: fix memory leak in function is_event_supported
>   perf: fix errors under optimization level '-Og'
>   perf: fix an error in config template
>   perf: fix a memory leak in collect_config
>   perf: fix memory leak in print_sdt_events()
>   perf: top: fix heap-use-after-free issue
>   perf: top: fix error handing in cmd_top()
>   perf: missed a map__put() in error case
>   perf: remove map from names tree in __maps__remove
>   perf: purge all maps from the names tree
>   perf: top: fix global-buffer-overflow issue
>   perf: free all counts in perf_evsel__exit
>   perf: fix a memory leak of cpu_map object
>   perf: fix memory leak by expr__find_other
>   perf: fix a memory leak in test__perf_evsel__tp_sched_test

awesome.. thanks a lot

Reviewed-by: Jiri Olsa <jolsa@redhat.com>

jirka

> 
>  tools/lib/bpf/libbpf.c                     |  2 +-
>  tools/perf/Documentation/Build.txt         | 20 +++++++++
>  tools/perf/Documentation/perf-config.txt   |  2 +-
>  tools/perf/bench/epoll-ctl.c               |  2 +-
>  tools/perf/bench/epoll-wait.c              |  2 +-
>  tools/perf/builtin-top.c                   | 47 ++++++++++------------
>  tools/perf/tests/backward-ring-buffer.c    |  2 +-
>  tools/perf/tests/evsel-tp-sched.c          |  1 +
>  tools/perf/tests/expr.c                    |  5 ++-
>  tools/perf/tests/openat-syscall-all-cpus.c |  4 +-
>  tools/perf/util/build-id.c                 |  1 +
>  tools/perf/util/config.c                   |  3 +-
>  tools/perf/util/counts.c                   | 18 +++++++++
>  tools/perf/util/counts.h                   |  4 ++
>  tools/perf/util/evsel.c                    |  2 +
>  tools/perf/util/hist.c                     |  4 +-
>  tools/perf/util/map.c                      | 18 +++++++++
>  tools/perf/util/ordered-events.c           |  2 +
>  tools/perf/util/parse-events.c             |  2 +
>  tools/perf/util/stat.c                     | 18 ---------
>  20 files changed, 106 insertions(+), 53 deletions(-)
> 
> -- 
> 2.19.1
>
Arnaldo Carvalho de Melo March 18, 2019, 4:16 p.m. UTC | #2
Em Mon, Mar 18, 2019 at 11:08:12AM +0100, Jiri Olsa escreveu:
> On Sat, Mar 16, 2019 at 04:05:40PM +0800, Changbin Du wrote:
> > AddressSanitizer (or ASan) and UndefinedBehaviorSanitizer (or UBSan) are
> > very useful tools to detect program bugs. This series fixed some issues
> > disclosed by ASan.
> > 
> > AddressSanitizer (or ASan) is a GCC feature that detects memory corruption bugs
> > such as buffer overflows or memory leaks.
> >   $ cd tools/perf
> >   $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame-pointer -fsanitize=address'
> >   $ ASAN_OPTIONS=log_path=asan.log ./perf record -a
> > ASan outputs all detected issues into log file 'asan.log.<pid>'.
> > 
> > Note that this only fixes parts of the detected issues. There are many remaining
> > to be fixed[1].
> > 
> > [1] http://104.238.181.70:8080/asan.log.32555.txt
> > 
> > Changbin Du (16):
> >   perf: add doc for how to build perf with Asan and UBSan
> >   perf: list: fix memory leak in function is_event_supported
> >   perf: fix errors under optimization level '-Og'
> >   perf: fix an error in config template
> >   perf: fix a memory leak in collect_config
> >   perf: fix memory leak in print_sdt_events()
> >   perf: top: fix heap-use-after-free issue
> >   perf: top: fix error handing in cmd_top()
> >   perf: missed a map__put() in error case
> >   perf: remove map from names tree in __maps__remove
> >   perf: purge all maps from the names tree
> >   perf: top: fix global-buffer-overflow issue
> >   perf: free all counts in perf_evsel__exit
> >   perf: fix a memory leak of cpu_map object
> >   perf: fix memory leak by expr__find_other
> >   perf: fix a memory leak in test__perf_evsel__tp_sched_test
> 
> awesome.. thanks a lot
> 
> Reviewed-by: Jiri Olsa <jolsa@redhat.com>

Yeah, I'll go over all and apply, thanks a lot.

If you plan to work on the others, please first submit the ones that are
not related to the exit path, i.e. leave the ones that only take place
when exiting perf for a second batch, this way we'll get the more
important ones, that take place in normal operation, first.

- Arnaldo