perf top: Fix potential NULL pointer dereference detected by the smatch tool
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: Leo Yan <leo.yan@linaro.org> Acked-by: Jiri 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.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
c74b05030e
commit
111442cfc8
|
@ -101,7 +101,7 @@ static void perf_top__resize(struct perf_top *top)
|
|||
|
||||
static int perf_top__parse_source(struct perf_top *top, struct hist_entry *he)
|
||||
{
|
||||
struct perf_evsel *evsel = hists_to_evsel(he->hists);
|
||||
struct perf_evsel *evsel;
|
||||
struct symbol *sym;
|
||||
struct annotation *notes;
|
||||
struct map *map;
|
||||
|
@ -110,6 +110,8 @@ static int perf_top__parse_source(struct perf_top *top, struct hist_entry *he)
|
|||
if (!he || !he->ms.sym)
|
||||
return -1;
|
||||
|
||||
evsel = hists_to_evsel(he->hists);
|
||||
|
||||
sym = he->ms.sym;
|
||||
map = he->ms.map;
|
||||
|
||||
|
@ -226,7 +228,7 @@ static void perf_top__record_precise_ip(struct perf_top *top,
|
|||
static void perf_top__show_details(struct perf_top *top)
|
||||
{
|
||||
struct hist_entry *he = top->sym_filter_entry;
|
||||
struct perf_evsel *evsel = hists_to_evsel(he->hists);
|
||||
struct perf_evsel *evsel;
|
||||
struct annotation *notes;
|
||||
struct symbol *symbol;
|
||||
int more;
|
||||
|
@ -234,6 +236,8 @@ static void perf_top__show_details(struct perf_top *top)
|
|||
if (!he)
|
||||
return;
|
||||
|
||||
evsel = hists_to_evsel(he->hists);
|
||||
|
||||
symbol = he->ms.sym;
|
||||
notes = symbol__annotation(symbol);
|
||||
|
||||
|
|
Loading…
Reference in New Issue