Ian Rogers e013733612 perf bperf: Avoid use after free via unrelated 'struct evsel' anonymous union field
If bperf (perf tools that use BPF skels) sets evsel->leader_skel or
evsel->follower_skel then it appears that evsel->bpf_skel is set and can
trigger the following use-after-free:

==13575==ERROR: AddressSanitizer: heap-use-after-free on address 0x60c000014080 at pc 0x55684b939880 bp 0x7ffdfcf30d70 sp 0x7ffdfcf30d68
READ of size 8 at 0x60c000014080 thread T0
     #0 0x55684b93987f in sample_filter_bpf__destroy tools/perf/bpf_skel/sample_filter.skel.h:44:11
     #1 0x55684b93987f in perf_bpf_filter__destroy tools/perf/util/bpf-filter.c:155:2
     #2 0x55684b98f71e in evsel__exit tools/perf/util/evsel.c:1521:2
     #3 0x55684b98a352 in evsel__delete tools/perf/util/evsel.c:1547:2
     #4 0x55684b981918 in evlist__purge tools/perf/util/evlist.c:148:3
     #5 0x55684b981918 in evlist__delete tools/perf/util/evlist.c:169:2
     #6 0x55684b887d60 in cmd_stat tools/perf/builtin-stat.c:2598:2
..
0x60c000014080 is located 0 bytes inside of 128-byte region [0x60c000014080,0x60c000014100)
freed by thread T0 here:
     #0 0x55684b780e86 in free compiler-rt/lib/asan/asan_malloc_linux.cpp:52:3
     #1 0x55684b9462da in bperf_cgroup_bpf__destroy tools/perf/bpf_skel/bperf_cgroup.skel.h:61:2
     #2 0x55684b9462da in bperf_cgrp__destroy tools/perf/util/bpf_counter_cgroup.c:282:2
     #3 0x55684b944c75 in bpf_counter__destroy tools/perf/util/bpf_counter.c:819:2
     #4 0x55684b98f716 in evsel__exit tools/perf/util/evsel.c:1520:2
     #5 0x55684b98a352 in evsel__delete tools/perf/util/evsel.c:1547:2
     #6 0x55684b981918 in evlist__purge tools/perf/util/evlist.c:148:3
     #7 0x55684b981918 in evlist__delete tools/perf/util/evlist.c:169:2
     #8 0x55684b887d60 in cmd_stat tools/perf/builtin-stat.c:2598:2
...
previously allocated by thread T0 here:
     #0 0x55684b781338 in calloc compiler-rt/lib/asan/asan_malloc_linux.cpp:77:3
     #1 0x55684b944e25 in bperf_cgroup_bpf__open_opts tools/perf/bpf_skel/bperf_cgroup.skel.h:73:35
     #2 0x55684b944e25 in bperf_cgroup_bpf__open tools/perf/bpf_skel/bperf_cgroup.skel.h:97:9
     #3 0x55684b944e25 in bperf_load_program tools/perf/util/bpf_counter_cgroup.c:55:9
     #4 0x55684b944e25 in bperf_cgrp__load tools/perf/util/bpf_counter_cgroup.c:178:23
     #5 0x55684b889289 in __run_perf_stat tools/perf/builtin-stat.c:713:7
     #6 0x55684b889289 in run_perf_stat tools/perf/builtin-stat.c:949:8
     #7 0x55684b888029 in cmd_stat tools/perf/builtin-stat.c:2537:12

Resolve by clearing 'evsel->bpf_skel' as part of bpf_counter__destroy().

Suggested-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
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: http://lore.kernel.org/lkml/20230411051718.267228-1-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2023-04-11 09:22:25 -03:00
..
2023-04-04 16:41:57 -03:00
2023-04-04 16:41:57 -03:00
2022-01-12 17:01:38 -08:00
2023-04-04 16:41:57 -03:00
2022-06-28 12:05:25 -03:00
2023-04-04 16:41:57 -03:00
2023-03-14 08:29:46 -03:00
2022-10-04 08:55:21 -03:00
2022-11-16 16:00:45 -03:00
2023-02-19 08:10:25 -03:00
2021-04-29 10:30:58 -03:00
2023-04-04 16:41:57 -03:00
2021-08-11 09:35:44 -03:00
2022-10-04 08:55:20 -03:00
2023-03-13 17:42:27 -03:00
2023-01-23 10:00:47 -03:00
2023-04-04 09:39:55 -03:00
2023-02-19 08:06:59 -03:00
2023-03-13 17:42:27 -03:00
2023-03-20 19:28:21 -03:00
2021-11-07 12:27:38 -03:00
2021-02-03 13:10:44 -03:00
2023-04-04 13:23:59 -03:00
2021-07-15 17:30:22 -03:00
2023-04-06 22:13:43 -03:00
2023-04-04 15:45:38 -03:00
2023-03-13 17:42:27 -03:00
2023-04-06 21:40:28 -03:00
2023-04-06 21:40:28 -03:00
2022-12-14 15:28:18 -03:00
2023-03-20 19:28:21 -03:00
2023-03-13 15:12:31 -03:00
2020-10-14 13:34:26 -03:00
2021-02-17 15:15:06 -03:00
2022-06-23 11:54:22 -03:00
2022-10-04 08:55:20 -03:00
2023-04-10 19:20:53 -03:00
2023-04-10 19:21:31 -03:00
2023-04-04 16:41:57 -03:00