Message ID | 20190708143937.7722-4-leo.yan@linaro.org |
---|---|
State | Accepted |
Commit | 323fd749821daab0f327ec86d707c4542963cdb0 |
Headers | show |
Series | perf: Fix errors detected by Smatch | expand |
Em Mon, Jul 08, 2019 at 10:39:36PM +0800, Leo Yan escreveu: > Based on the following report from Smatch, fix the potential > NULL pointer dereference check. Adrian, are you ok now with these two for pt and bts? Can I have your acked-by? - Arnaldo > 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> > --- > tools/perf/util/intel-pt.c | 13 +++++-------- > 1 file 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, > goto err_delete_thread; > } > > - if (session->itrace_synth_opts && session->itrace_synth_opts->set) { > + if (session->itrace_synth_opts->set) { > pt->synth_opts = *session->itrace_synth_opts; > } else { > itrace_synth_opts__set_default(&pt->synth_opts, > @@ -3220,8 +3220,7 @@ int intel_pt_process_auxtrace_info(union perf_event *event, > pt->synth_opts.branches = false; > pt->synth_opts.callchain = true; > } > - if (session->itrace_synth_opts) > - pt->synth_opts.thread_stack = > + pt->synth_opts.thread_stack = > session->itrace_synth_opts->thread_stack; > } > > @@ -3241,11 +3240,9 @@ int intel_pt_process_auxtrace_info(union perf_event *event, > pt->cbr2khz = tsc_freq / pt->max_non_turbo_ratio / 1000; > } > > - if (session->itrace_synth_opts) { > - err = intel_pt_setup_time_ranges(pt, session->itrace_synth_opts); > - if (err) > - goto err_delete_thread; > - } > + err = intel_pt_setup_time_ranges(pt, session->itrace_synth_opts); > + if (err) > + goto err_delete_thread; > > if (pt->synth_opts.calls) > pt->branches_filter |= PERF_IP_FLAG_CALL | PERF_IP_FLAG_ASYNC | > -- > 2.17.1 -- - Arnaldo
On 9/07/19 12:59 AM, Arnaldo Carvalho de Melo wrote: > Em Mon, Jul 08, 2019 at 10:39:36PM +0800, Leo Yan escreveu: >> Based on the following report from Smatch, fix the potential >> NULL pointer dereference check. > > Adrian, are you ok now with these two for pt and bts? Can I have your > acked-by? Yes they are good. For both: Acked-by: Adrian Hunter <adrian.hunter@intel.com> > > - Arnaldo > >> 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> >> --- >> tools/perf/util/intel-pt.c | 13 +++++-------- >> 1 file 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, >> goto err_delete_thread; >> } >> >> - if (session->itrace_synth_opts && session->itrace_synth_opts->set) { >> + if (session->itrace_synth_opts->set) { >> pt->synth_opts = *session->itrace_synth_opts; >> } else { >> itrace_synth_opts__set_default(&pt->synth_opts, >> @@ -3220,8 +3220,7 @@ int intel_pt_process_auxtrace_info(union perf_event *event, >> pt->synth_opts.branches = false; >> pt->synth_opts.callchain = true; >> } >> - if (session->itrace_synth_opts) >> - pt->synth_opts.thread_stack = >> + pt->synth_opts.thread_stack = >> session->itrace_synth_opts->thread_stack; >> } >> >> @@ -3241,11 +3240,9 @@ int intel_pt_process_auxtrace_info(union perf_event *event, >> pt->cbr2khz = tsc_freq / pt->max_non_turbo_ratio / 1000; >> } >> >> - if (session->itrace_synth_opts) { >> - err = intel_pt_setup_time_ranges(pt, session->itrace_synth_opts); >> - if (err) >> - goto err_delete_thread; >> - } >> + err = intel_pt_setup_time_ranges(pt, session->itrace_synth_opts); >> + if (err) >> + goto err_delete_thread; >> >> if (pt->synth_opts.calls) >> pt->branches_filter |= PERF_IP_FLAG_CALL | PERF_IP_FLAG_ASYNC | >> -- >> 2.17.1 >
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, goto err_delete_thread; } - if (session->itrace_synth_opts && session->itrace_synth_opts->set) { + if (session->itrace_synth_opts->set) { pt->synth_opts = *session->itrace_synth_opts; } else { itrace_synth_opts__set_default(&pt->synth_opts, @@ -3220,8 +3220,7 @@ int intel_pt_process_auxtrace_info(union perf_event *event, pt->synth_opts.branches = false; pt->synth_opts.callchain = true; } - if (session->itrace_synth_opts) - pt->synth_opts.thread_stack = + pt->synth_opts.thread_stack = session->itrace_synth_opts->thread_stack; } @@ -3241,11 +3240,9 @@ int intel_pt_process_auxtrace_info(union perf_event *event, pt->cbr2khz = tsc_freq / pt->max_non_turbo_ratio / 1000; } - if (session->itrace_synth_opts) { - err = intel_pt_setup_time_ranges(pt, session->itrace_synth_opts); - if (err) - goto err_delete_thread; - } + err = intel_pt_setup_time_ranges(pt, session->itrace_synth_opts); + if (err) + goto err_delete_thread; if (pt->synth_opts.calls) pt->branches_filter |= PERF_IP_FLAG_CALL | PERF_IP_FLAG_ASYNC |
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> --- tools/perf/util/intel-pt.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) -- 2.17.1