aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeo Yan <leo.yan@linaro.org>2019-07-08 10:39:36 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-07-09 09:13:28 -0400
commit323fd749821daab0f327ec86d707c4542963cdb0 (patch)
tree21fa13b4d107c6d5327247e063b68d3df43f7128
parent1d481458816d9424c8a05833ce0ebe72194a350e (diff)
perf intel-pt: Fix potential NULL pointer dereference found by the smatch tool
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: Leo Yan <leo.yan@linaro.org> Acked-by: 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: 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.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/util/intel-pt.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
index c76a96f777fb..df061599fef4 100644
--- a/tools/perf/util/intel-pt.c
+++ b/tools/perf/util/intel-pt.c
@@ -3210,7 +3210,7 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
3210 goto err_delete_thread; 3210 goto err_delete_thread;
3211 } 3211 }
3212 3212
3213 if (session->itrace_synth_opts && session->itrace_synth_opts->set) { 3213 if (session->itrace_synth_opts->set) {
3214 pt->synth_opts = *session->itrace_synth_opts; 3214 pt->synth_opts = *session->itrace_synth_opts;
3215 } else { 3215 } else {
3216 itrace_synth_opts__set_default(&pt->synth_opts, 3216 itrace_synth_opts__set_default(&pt->synth_opts,
@@ -3220,8 +3220,7 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
3220 pt->synth_opts.branches = false; 3220 pt->synth_opts.branches = false;
3221 pt->synth_opts.callchain = true; 3221 pt->synth_opts.callchain = true;
3222 } 3222 }
3223 if (session->itrace_synth_opts) 3223 pt->synth_opts.thread_stack =
3224 pt->synth_opts.thread_stack =
3225 session->itrace_synth_opts->thread_stack; 3224 session->itrace_synth_opts->thread_stack;
3226 } 3225 }
3227 3226
@@ -3241,11 +3240,9 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
3241 pt->cbr2khz = tsc_freq / pt->max_non_turbo_ratio / 1000; 3240 pt->cbr2khz = tsc_freq / pt->max_non_turbo_ratio / 1000;
3242 } 3241 }
3243 3242
3244 if (session->itrace_synth_opts) { 3243 err = intel_pt_setup_time_ranges(pt, session->itrace_synth_opts);
3245 err = intel_pt_setup_time_ranges(pt, session->itrace_synth_opts); 3244 if (err)
3246 if (err) 3245 goto err_delete_thread;
3247 goto err_delete_thread;
3248 }
3249 3246
3250 if (pt->synth_opts.calls) 3247 if (pt->synth_opts.calls)
3251 pt->branches_filter |= PERF_IP_FLAG_CALL | PERF_IP_FLAG_ASYNC | 3248 pt->branches_filter |= PERF_IP_FLAG_CALL | PERF_IP_FLAG_ASYNC |