1. 13 Apr, 2023 8 commits
  2. 12 Apr, 2023 31 commits
  3. 11 Apr, 2023 1 commit
    • Ian Rogers's avatar
      perf bperf: Avoid use after free via unrelated 'struct evsel' anonymous union field · e0137336
      Ian Rogers authored
      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: default avatarNamhyung Kim <namhyung@kernel.org>
      Signed-off-by: default avatarIan 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.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e0137336