1. 10 Jul, 2019 6 commits
  2. 09 Jul, 2019 29 commits
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Auto bump rlimit(MEMLOCK) for eBPF maps sake · c3e78a34
      Arnaldo Carvalho de Melo authored
      Circa v5.2 this started to fail:
      
        # perf trace -e /wb/augmented_raw_syscalls.o
        event syntax error: '/wb/augmented_raw_syscalls.o'
                             \___ Operation not permitted
      
        (add -v to see detail)
        Run 'perf list' for a list of valid events
      
         Usage: perf trace [<options>] [<command>]
            or: perf trace [<options>] -- <command> [<options>]
            or: perf trace record [<options>] [<command>]
            or: perf trace record [<options>] -- <command> [<options>]
      
            -e, --event <event>   event/syscall selector. use 'perf list' to list available events
        #
      
      In verbose mode we some -EPERM when creating a BPF map:
      
        # perf trace -v -e /wb/augmented_raw_syscalls.o
        <SNIP>
        libbpf: failed to create map (name: '__augmented_syscalls__'): Operation not permitted
        libbpf: failed to load object '/wb/augmented_raw_syscalls.o'
        bpf: load objects failed: err=-1: (Operation not permitted)
        event syntax error: '/wb/augmented_raw_syscalls.o'
                             \___ Operation not permitted
      
        (add -v to see detail)
        Run 'perf list' for a list of valid events
      
         Usage: perf trace [<options>] [<command>]
            or: perf trace [<options>] -- <command> [<options>]
            or: perf trace record [<options>] [<command>]
            or: perf trace record [<options>] -- <command> [<options>]
      
            -e, --event <event>   event/syscall selector. use 'perf list' to list available events
        #
      
      If we bumped 'ulimit -l 128' to get it from the 64k default to double that, it
      worked, so use the recently added rlimit__bump_memlock() helper:
      
        # perf trace -e /wb/augmented_raw_syscalls.o -e open*,*sleep sleep 1
             0.000 ( 0.007 ms): sleep/28042 openat(dfd: CWD, filename: "/etc/ld.so.cache", flags: RDONLY|CLOEXEC) = 3
             0.022 ( 0.004 ms): sleep/28042 openat(dfd: CWD, filename: "/lib64/libc.so.6", flags: RDONLY|CLOEXEC) = 3
             0.201 ( 0.007 ms): sleep/28042 openat(dfd: CWD, filename: "", flags: RDONLY|CLOEXEC)                 = 3
             0.241 (1000.421 ms): sleep/28042 nanosleep(rqtp: 0x7ffd6c3e6ed0)                                       = 0
        #
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-j6f2ioa6hj9dinzpjvlhcjoc@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c3e78a34
    • Arnaldo Carvalho de Melo's avatar
      perf test: Auto bump rlimit(MEMLOCK) for BPF test sake · d3280ce0
      Arnaldo Carvalho de Melo authored
      I noticed that the 'perf test bpf' was failing:
      
        # perf test bpf
        41: BPF filter                                            :
        41.1: Basic BPF filtering                                 : Skip
        41.2: BPF pinning                                         : Skip
        41.3: BPF prologue generation                             : Skip
        41.4: BPF relocation checker                              : Skip
        # ulimit -l
        64
        #
      
      Using verbose mode we get just a line bout -EPERF being returned from
      libbpf's bpf_load_program_xattr(), that ends up being used in 'perf
      test bpf' initial program loading capability query:
      
        Missing basic BPF support, skip this test: Operation not permitted
      
      Not that informative, but on a separate problem when creating BPF maps
      bumping rlimit(MEMLOCK) helped, so I tried it here as well, works:
      
        # ulimit -l 128
        # perf test bpf
        41: BPF filter                                            :
        41.1: Basic BPF filtering                                 : Ok
        41.2: BPF pinning                                         : Ok
        41.3: BPF prologue generation                             : Ok
        41.4: BPF relocation checker                              : Ok
        #
      
      So use the recently added rlimit__bump_memlock() helper:
      
        # ulimit -l 64
        # perf test bpf
        41: BPF filter                                            :
        41.1: Basic BPF filtering                                 : Ok
        41.2: BPF pinning                                         : Ok
        41.3: BPF prologue generation                             : Ok
        41.4: BPF relocation checker                              : Ok
        # ulimit -l
        64
        #
      
      I.e. the bumping of memlock is restricted to the 'perf test' instance,
      not changing the global value.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-b9fubkhr4jm192lu7y8hgjvo@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d3280ce0
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Introduce rlimit__bump_memlock() helper · 4975223b
      Arnaldo Carvalho de Melo authored
      Just like the BPF guys did when faced with failures with map creation,
      etc, i.e. their solution is:
      
        tools/testing/selftests/bpf/bpf_rlimit.h
      
      For perf use this function in 'perf test' and in 'perf trace'.
      
      Make it bump to 4 times the current value, if it fails twice the current
      value and if it still fails, warn that things like BPF map creation may
      fail, to help in diagnosing the problem.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-muvqef2i7n6pzqbmu7tn2d2y@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4975223b
    • Leo Yan's avatar
      perf intel-pt: Fix potential NULL pointer dereference found by the smatch tool · 323fd749
      Leo Yan authored
      Based on the following report from Smatch, fix the potential NULL
      pointer dereference check.
      
        tools/perf/util/intel-pt.c:3200
        intel_pt_process_auxtrace_info() error: we previously assumed
        'session->itrace_synth_opts' could be null (see line 3196)
      
        tools/perf/util/intel-pt.c:3206
        intel_pt_process_auxtrace_info() warn: variable dereferenced before
        check 'session->itrace_synth_opts' (see line 3200)
      
        tools/perf/util/intel-pt.c
        3196         if (session->itrace_synth_opts && session->itrace_synth_opts->set) {
        3197                 pt->synth_opts = *session->itrace_synth_opts;
        3198         } else {
        3199                 itrace_synth_opts__set_default(&pt->synth_opts,
        3200                                 session->itrace_synth_opts->default_no_sample);
                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
        3201                 if (!session->itrace_synth_opts->default_no_sample &&
        3202                     !session->itrace_synth_opts->inject) {
        3203                         pt->synth_opts.branches = false;
        3204                         pt->synth_opts.callchain = true;
        3205                 }
        3206                 if (session->itrace_synth_opts)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
        3207                         pt->synth_opts.thread_stack =
        3208                                 session->itrace_synth_opts->thread_stack;
        3209         }
      
      'session->itrace_synth_opts' is impossible to be a NULL pointer in
      intel_pt_process_auxtrace_info(), thus this patch removes the NULL test
      for 'session->itrace_synth_opts'.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190708143937.7722-4-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      323fd749
    • Leo Yan's avatar
      perf intel-bts: Fix potential NULL pointer dereference found by the smatch tool · 1d481458
      Leo Yan authored
      Based on the following report from Smatch, fix the potential NULL
      pointer dereference check.
      
        tools/perf/util/intel-bts.c:898
        intel_bts_process_auxtrace_info() error: we previously assumed
        'session->itrace_synth_opts' could be null (see line 894)
      
        tools/perf/util/intel-bts.c:899
        intel_bts_process_auxtrace_info() warn: variable dereferenced before
        check 'session->itrace_synth_opts' (see line 898)
      
        tools/perf/util/intel-bts.c
        894         if (session->itrace_synth_opts && session->itrace_synth_opts->set) {
        895                 bts->synth_opts = *session->itrace_synth_opts;
        896         } else {
        897                 itrace_synth_opts__set_default(&bts->synth_opts,
        898                                 session->itrace_synth_opts->default_no_sample);
                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^
        899                 if (session->itrace_synth_opts)
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
        900                         bts->synth_opts.thread_stack =
        901                                 session->itrace_synth_opts->thread_stack;
        902         }
      
      'session->itrace_synth_opts' is impossible to be a NULL pointer in
      intel_bts_process_auxtrace_info(), thus this patch removes the NULL test
      for 'session->itrace_synth_opts'.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190708143937.7722-3-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1d481458
    • Song Liu's avatar
      perf script: Assume native_arch for pipe mode · 9d49169c
      Song Liu authored
      In pipe mode, session->header.env.arch is not populated until the events
      are processed. Therefore, the following command crashes:
      
         perf record -o - | perf script
      
      (gdb) bt
      
      It fails when we try to compare env.arch against uts.machine:
      
              if (!strcmp(uts.machine, session->header.env.arch) ||
                  (!strcmp(uts.machine, "x86_64") &&
                   !strcmp(session->header.env.arch, "i386")))
                      native_arch = true;
      
      In pipe mode, it is tricky to find env.arch at this stage. To keep it
      simple, let's just assume native_arch is always true for pipe mode.
      Reported-by: default avatarDavid Carrillo Cisneros <davidca@fb.com>
      Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: kernel-team@fb.com
      Cc: stable@vger.kernel.org #v5.1+
      Fixes: 3ab481a1 ("perf script: Support insn output for normal samples")
      Link: http://lkml.kernel.org/r/20190621014438.810342-1-songliubraving@fb.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      9d49169c
    • Adrian Hunter's avatar
      perf scripts python: export-to-sqlite.py: Fix DROP VIEW power_events_view · 1334bb94
      Adrian Hunter authored
      Drop power_events_view before its dependent tables.
      
      SQLite does not seem to mind but the fix was needed for PostgreSQL
      (export-to-postgresql.py script), so do the same fix for the SQLite. It is
      more logical and keeps the 2 scripts following the same approach.
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Fixes: 5130c6e5 ("perf scripts python: export-to-sqlite.py: Export Intel PT power and ptwrite events")
      Link: http://lkml.kernel.org/r/20190708055232.5032-3-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1334bb94
    • Adrian Hunter's avatar
      perf scripts python: export-to-postgresql.py: Fix DROP VIEW power_events_view · d8d051df
      Adrian Hunter authored
      PostgreSQL can error if power_events_view is not dropped before its
      dependent tables e.g.
      
        Exception: Query failed: ERROR:  cannot drop table mwait because other
        objects depend on it
        DETAIL:  view power_events_view depends on table mwait
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Fixes: aba44287 ("perf scripts python: export-to-postgresql.py: Export Intel PT power and ptwrite events")
      Link: http://lkml.kernel.org/r/20190708055232.5032-2-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d8d051df
    • Leo Yan's avatar
      perf hists browser: Fix potential NULL pointer dereference found by the smatch tool · ceb75476
      Leo Yan authored
      Based on the following report from Smatch, fix the potential
      NULL pointer dereference check.
      
        tools/perf/ui/browsers/hists.c:641
        hist_browser__run() error: we previously assumed 'hbt' could be
        null (see line 625)
      
        tools/perf/ui/browsers/hists.c:3088
        perf_evsel__hists_browse() error: we previously assumed
        'browser->he_selection' could be null (see line 2902)
      
        tools/perf/ui/browsers/hists.c:3272
        perf_evsel_menu__run() error: we previously assumed 'hbt' could be
        null (see line 3260)
      
      This patch firstly validating the pointers before access them, so can
      fix potential NULL pointer dereference.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190708143937.7722-2-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      ceb75476
    • Leo Yan's avatar
      perf cs-etm: Fix potential NULL pointer dereference found by the smatch · 0702f23c
      Leo Yan authored
      tool
      
      Based on the following report from Smatch, fix the potential NULL
      pointer dereference check.
      
        tools/perf/util/cs-etm.c:2545
        cs_etm__process_auxtrace_info() error: we previously assumed
        'session->itrace_synth_opts' could be null (see line 2541)
      
        tools/perf/util/cs-etm.c
        2541         if (session->itrace_synth_opts && session->itrace_synth_opts->set) {
        2542                 etm->synth_opts = *session->itrace_synth_opts;
        2543         } else {
        2544                 itrace_synth_opts__set_default(&etm->synth_opts,
        2545                                 session->itrace_synth_opts->default_no_sample);
                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
        2546                 etm->synth_opts.callchain = false;
        2547         }
      
      'session->itrace_synth_opts' is impossible to be a NULL pointer in
      cs_etm__process_auxtrace_info(), thus this patch removes the NULL
      test for 'session->itrace_synth_opts'.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190708143937.7722-5-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0702f23c
    • Luke Mujica's avatar
      perf parse-events: Remove unused variable: error · 72de3fd9
      Luke Mujica authored
      Remove the 'error' variable because it is declared but not used in
      parse-events.y or in the generated parse-events.c.
      Signed-off-by: default avatarLuke Mujica <lukemujica@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: http://lkml.kernel.org/r/20190703222509.109616-2-lukemujica@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      72de3fd9
    • Luke Mujica's avatar
      perf parse-events: Remove unused variable 'i' · 34c9af57
      Luke Mujica authored
      Remove the 'int i' because it is declared but not used in parse-events.y
      or in the generated parse-events.c.
      Signed-off-by: default avatarLuke Mujica <lukemujica@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: http://lkml.kernel.org/r/20190703222509.109616-1-lukemujica@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      34c9af57
    • Arnaldo Carvalho de Melo's avatar
      perf metricgroup: Add missing list_del_init() when flushing egroups list · acc7bfb3
      Arnaldo Carvalho de Melo authored
      So that at the end each of the entries have its list node struct cleared
      and the egroup list head ends emptied.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-dxzj1ah350fy9ec0xbhb15b6@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      acc7bfb3
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Use list_del_init() more thorougly · e56fbc9d
      Arnaldo Carvalho de Melo authored
      To allow for destructors to check if they're operating on a object still
      in a list, and to avoid going from use after free list entries into
      still valid, or even also other already removed from list entries.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-deh17ub44atyox3j90e6rksu@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e56fbc9d
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Use zfree() where applicable · d8f9da24
      Arnaldo Carvalho de Melo authored
      In places where the equivalent was already being done, i.e.:
      
         free(a);
         a = NULL;
      
      And in placs where struct members are being freed so that if we have
      some erroneous reference to its struct, then accesses to freed members
      will result in segfaults, which we can detect faster than use after free
      to areas that may still have something seemingly valid.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-jatyoofo5boc1bsvoig6bb6i@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d8f9da24
    • Arnaldo Carvalho de Melo's avatar
      tools lib: Adopt zalloc()/zfree() from tools/perf · 7f7c536f
      Arnaldo Carvalho de Melo authored
      Eroding a bit more the tools/perf/util/util.h hodpodge header.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-natazosyn9rwjka25tvcnyi0@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7f7c536f
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Move get_current_dir_name() cond prototype out of util.h · e5653eb8
      Arnaldo Carvalho de Melo authored
      And in a separate header, so that we erode util.h a bit more.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-xpzvuu9d0gei9jl9bkzgobln@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e5653eb8
    • Arnaldo Carvalho de Melo's avatar
      perf namespaces: Move the conditional setns() prototype to namespaces.h · 245aec7f
      Arnaldo Carvalho de Melo authored
      Out of util.h, to reduce its scope, and since we have a namespaces.h
      header, much better to have it there, where it is related to.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-zlu81bbtccuzygh7m8nmgybc@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      245aec7f
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Add missing headers, mostly stdlib.h · 215a0d30
      Arnaldo Carvalho de Melo authored
      Part of the erosion of util/util.h, that will lose its include stdlib.h,
      we need to add it to places where it is needed but was getting it
      indirectly.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-1imnqezw99ahc07fjeb51qby@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      215a0d30
    • Arnaldo Carvalho de Melo's avatar
      perf evsel: perf_evsel__name(NULL) is valid, no need to check evsel · fc50e0ba
      Arnaldo Carvalho de Melo authored
      It'll return "unknown", no need to open code it.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-4okvjmm18arjrcyfhuahgfxm@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      fc50e0ba
    • Leo Yan's avatar
      perf session: Fix potential NULL pointer dereference found by the smatch tool · f3c8d907
      Leo Yan authored
      Based on the following report from Smatch, fix the potential
      NULL pointer dereference check.
      
        tools/perf/util/session.c:1252
        dump_read() error: we previously assumed 'evsel' could be null
        (see line 1249)
      
        tools/perf/util/session.c
        1240 static void dump_read(struct perf_evsel *evsel, union perf_event *event)
        1241 {
        1242         struct read_event *read_event = &event->read;
        1243         u64 read_format;
        1244
        1245         if (!dump_trace)
        1246                 return;
        1247
        1248         printf(": %d %d %s %" PRIu64 "\n", event->read.pid, event->read.tid,
        1249                evsel ? perf_evsel__name(evsel) : "FAIL",
        1250                event->read.value);
        1251
        1252         read_format = evsel->attr.read_format;
                                   ^^^^^^^
      
      'evsel' could be NULL pointer, for this case this patch directly bails
      out without dumping read_event.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190702103420.27540-9-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f3c8d907
    • Arnaldo Carvalho de Melo's avatar
      perf inject: The tool->read() call may pass a NULL evsel, handle it · 40978e9b
      Arnaldo Carvalho de Melo authored
      Check first, as machines__deliver_event() may have
      perf_evlist__id2evsel() returning NULL.
      
      This was found while checking a report from Leo Yan that used the smatch
      tool to find places where a pointer is checked before use and then,
      later in the same function gets used without checking.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-muvb8xqyh0gysgfjfq35w642@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      40978e9b
    • Leo Yan's avatar
      perf map: Fix potential NULL pointer dereference found by smatch tool · 363bbaef
      Leo Yan authored
      Based on the following report from Smatch, fix the potential NULL
      pointer dereference check.
      
        tools/perf/util/map.c:479
        map__fprintf_srccode() error: we previously assumed 'state' could be
        null (see line 466)
      
        tools/perf/util/map.c
        465         /* Avoid redundant printing */
        466         if (state &&
        467             state->srcfile &&
        468             !strcmp(state->srcfile, srcfile) &&
        469             state->line == line) {
        470                 free(srcfile);
        471                 return 0;
        472         }
        473
        474         srccode = find_sourceline(srcfile, line, &len);
        475         if (!srccode)
        476                 goto out_free_line;
        477
        478         ret = fprintf(fp, "|%-8d %.*s", line, len, srccode);
        479         state->srcfile = srcfile;
                    ^^^^^^^
        480         state->line = line;
                    ^^^^^^^
      
      This patch validates 'state' pointer before access its elements.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Fixes: dd2e18e9 ("perf tools: Support 'srccode' output")
      Link: http://lkml.kernel.org/r/20190702103420.27540-8-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      363bbaef
    • Leo Yan's avatar
      perf trace: Fix potential NULL pointer dereference found by the smatch tool · 7a6d49dc
      Leo Yan authored
      Based on the following report from Smatch, fix the potential NULL
      pointer dereference check.
      
        tools/perf/builtin-trace.c:1044
        thread_trace__new() error: we previously assumed 'ttrace' could be
        null (see line 1041).
      
        tools/perf/builtin-trace.c
        1037 static struct thread_trace *thread_trace__new(void)
        1038 {
        1039         struct thread_trace *ttrace =  zalloc(sizeof(struct thread_trace));
        1040
        1041         if (ttrace)
        1042                 ttrace->files.max = -1;
        1043
        1044         ttrace->syscall_stats = intlist__new(NULL);
                     ^^^^^^^^
        1045
        1046         return ttrace;
        1047 }
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190702103420.27540-6-leo.yan@linaro.org
      [ Just made it look like other tools/perf constructors, same end result ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7a6d49dc
    • Leo Yan's avatar
      perf annotate: Fix dereferencing freed memory found by the smatch tool · 600c787d
      Leo Yan authored
      Based on the following report from Smatch, fix the potential
      dereferencing freed memory check.
      
        tools/perf/util/annotate.c:1125
        disasm_line__parse() error: dereferencing freed memory 'namep'
      
        tools/perf/util/annotate.c
        1100 static int disasm_line__parse(char *line, const char **namep, char **rawp)
        1101 {
        1102         char tmp, *name = ltrim(line);
      
        [...]
      
        1114         *namep = strdup(name);
        1115
        1116         if (*namep == NULL)
        1117                 goto out_free_name;
      
        [...]
      
        1124 out_free_name:
        1125         free((void *)namep);
                                  ^^^^^
        1126         *namep = NULL;
                     ^^^^^^
        1127         return -1;
        1128 }
      
      If strdup() fails to allocate memory space for *namep, we don't need to
      free memory with pointer 'namep', which is resident in data structure
      disasm_line::ins::name; and *namep is NULL pointer for this failure, so
      it's pointless to assign NULL to *namep again.
      
      Committer note:
      
      Freeing namep, which is the address of the first entry of the 'struct
      ins' that is the first member of struct disasm_line would in fact free
      that disasm_line instance, if it was allocated via malloc/calloc, which,
      later, would a dereference of freed memory.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190702103420.27540-5-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      600c787d
    • Leo Yan's avatar
      perf top: Fix potential NULL pointer dereference detected by the smatch tool · 111442cf
      Leo Yan authored
      Based on the following report from Smatch, fix the potential NULL
      pointer dereference check.
      
        tools/perf/builtin-top.c:109
        perf_top__parse_source() warn: variable dereferenced before check 'he'
        (see line 103)
      
        tools/perf/builtin-top.c:233
        perf_top__show_details() warn: variable dereferenced before check 'he'
        (see line 228)
      
        tools/perf/builtin-top.c
        101 static int perf_top__parse_source(struct perf_top *top, struct hist_entry *he)
        102 {
        103         struct perf_evsel *evsel = hists_to_evsel(he->hists);
                                                              ^^^^
        104         struct symbol *sym;
        105         struct annotation *notes;
        106         struct map *map;
        107         int err = -1;
        108
        109         if (!he || !he->ms.sym)
        110                 return -1;
      
      This patch moves the values assignment after validating pointer 'he'.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190702103420.27540-4-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      111442cf
    • Leo Yan's avatar
      perf stat: Fix use-after-freed pointer detected by the smatch tool · c74b0503
      Leo Yan authored
      Based on the following report from Smatch, fix the use-after-freed
      pointer.
      
        tools/perf/builtin-stat.c:1353
        add_default_attributes() warn: passing freed memory 'str'.
      
      The pointer 'str' has been freed but later it is still passed into the
      function parse_events_print_error().  This patch fixes this
      use-after-freed issue.
      Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Link: http://lkml.kernel.org/r/20190702103420.27540-3-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c74b0503
    • Numfor Mbiziwo-Tiapo's avatar
      perf test mmap-thread-lookup: Initialize variable to suppress memory sanitizer warning · 4e4cf62b
      Numfor Mbiziwo-Tiapo authored
      Running the 'perf test' command after building perf with a memory
      sanitizer causes a warning that says:
      
        WARNING: MemorySanitizer: use-of-uninitialized-value... in mmap-thread-lookup.c
      
      Initializing the go variable to 0 silences this harmless warning.
      
      Committer warning:
      
      This was harmless, just a simple test writing whatever was at that
      sizeof(int) memory area just to signal another thread blocked reading
      that file created with pipe(). Initialize it tho so that we don't get
      this warning.
      Signed-off-by: default avatarNumfor Mbiziwo-Tiapo <nums@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Drayton <mbd@fb.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Stephane Eranian <eranian@google.com>
      Link: http://lkml.kernel.org/r/20190702173716.181223-1-nums@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4e4cf62b
    • Ingo Molnar's avatar
      Merge tag 'perf-urgent-for-mingo-5.3-20190708-2' of... · d1d59b81
      Ingo Molnar authored
      Merge tag 'perf-urgent-for-mingo-5.3-20190708-2' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
      
      Pull perf/urgent fixes from Arnaldo Carvalho de Melo:
      
      core:
      
        Arnaldo Carvalho de Melo:
      
        - Allow references to thread objects after__machine_exit(), fixing a bug with
          'perf sched lat' where that happens, i.e. after perf_session__delete() we
          still have references to threads that were in a linked list whose head was
          freed in perf_session__delete(), causing a segfault, fix it.
      
        Jiri Olsa:
      
        - Do not rely on errno values for precise_ip fallback, fixing the default
          use case for 'perf record' on some AMD servers, when no events are specified
          and we try to use "cycles:P", i.e. with the maximum precision level.
      
      BPF:
      
        Song Liu:
      
        - Assign proper ff->ph in perf_event__synthesize_features(), fixing a bug
          when using pipe mode, i.e.  'perf record -o -'.
      
      tools headers:
      
        Arnaldo Carvalho de Melo:
      
        - Sync kvm headers with the kernel sources
      
      perf tests:
      
        Seeteena Thoufeek:
      
        - Fix record+probe_libc_inet_pton.sh for powerpc64, where without the
          debuginfo package for the 'ping' utility we can't resolve its symbols,
          so admit getting "[unknown]" for that backtrace line.
      
      perf python:
      
        Arnaldo Carvalho de Melo:
      
        - Remove -fstack-protector-strong if clang doesn't have it, fixing the build
          with clang on fedora:30, oracleline:7, centos:7.
      
      perf jvmti:
      
        Jiri Olsa:
      
        - Address gcc string overflow warning for strncpy()
      
      build:
      
        Arnaldo Carvalho de Melo:
      
        - Check if gettid() is available before providing helper, as recent
          versions of glibc started to provide gettid().
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      d1d59b81
  3. 08 Jul, 2019 3 commits
  4. 07 Jul, 2019 2 commits
    • Linus Torvalds's avatar
      Linux 5.2 · 0ecfebd2
      Linus Torvalds authored
      0ecfebd2
    • Arnaldo Carvalho de Melo's avatar
      tools build: Check if gettid() is available before providing helper · 05c78468
      Arnaldo Carvalho de Melo authored
      Laura reported that the perf build failed in fedora when we got a glibc
      that provides gettid(), which I reproduced using fedora rawhide with the
      glibc-devel-2.29.9000-26.fc31.x86_64 package.
      
      Add a feature check to avoid providing a gettid() helper in such
      systems.
      
      On a fedora rawhide system with this patch applied we now get:
      
        [root@7a5f55352234 perf]# grep gettid /tmp/build/perf/FEATURE-DUMP
        feature-gettid=1
        [root@7a5f55352234 perf]# cat /tmp/build/perf/feature/test-gettid.make.output
        [root@7a5f55352234 perf]# ldd /tmp/build/perf/feature/test-gettid.bin
                linux-vdso.so.1 (0x00007ffc6b1f6000)
                libc.so.6 => /lib64/libc.so.6 (0x00007f04e0a74000)
                /lib64/ld-linux-x86-64.so.2 (0x00007f04e0c47000)
        [root@7a5f55352234 perf]# nm /tmp/build/perf/feature/test-gettid.bin | grep -w gettid
                         U gettid@@GLIBC_2.30
        [root@7a5f55352234 perf]#
      
      While on a fedora:29 system:
      
        [acme@quaco perf]$ grep gettid /tmp/build/perf/FEATURE-DUMP
        feature-gettid=0
        [acme@quaco perf]$ cat /tmp/build/perf/feature/test-gettid.make.output
        test-gettid.c: In function ‘main’:
        test-gettid.c:8:9: error: implicit declaration of function ‘gettid’; did you mean ‘getgid’? [-Werror=implicit-function-declaration]
          return gettid();
                 ^~~~~~
                 getgid
        cc1: all warnings being treated as errors
        [acme@quaco perf]$
      Reported-by: default avatarLaura Abbott <labbott@redhat.com>
      Tested-by: default avatarLaura Abbott <labbott@redhat.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Florian Weimer <fweimer@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: https://lkml.kernel.org/n/tip-yfy3ch53agmklwu9o7rlgf9c@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      05c78468