Messages in this thread Patch in this message | | | Subject | Re: [PATCH v1 10/11] perf intel-pt: Smatch: Fix potential NULL pointer dereference | From | Adrian Hunter <> | Date | Tue, 2 Jul 2019 14:07:40 +0300 |
| |
On 2/07/19 1:34 PM, Leo Yan wrote: > Based on the following report from Smatch, fix the potential > NULL pointer dereference check.
It never is NULL. Remove the NULL test if you want:
- if (session->itrace_synth_opts && session->itrace_synth_opts->set) { + if (session->itrace_synth_opts->set) {
But blindly making changes like below is questionable.
> > 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 } > > To dismiss the potential NULL pointer dereference, this patch validates > the pointer 'session->itrace_synth_opts' before access its elements. > > Signed-off-by: Leo Yan <leo.yan@linaro.org> > --- > tools/perf/util/intel-pt.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c > index 550db6e77968..88b567bdf1f9 100644 > --- a/tools/perf/util/intel-pt.c > +++ b/tools/perf/util/intel-pt.c > @@ -3195,7 +3195,7 @@ int intel_pt_process_auxtrace_info(union perf_event *event, > > if (session->itrace_synth_opts && session->itrace_synth_opts->set) { > pt->synth_opts = *session->itrace_synth_opts; > - } else { > + } else if (session->itrace_synth_opts) { > itrace_synth_opts__set_default(&pt->synth_opts, > session->itrace_synth_opts->default_no_sample); > if (!session->itrace_synth_opts->default_no_sample && > @@ -3203,8 +3203,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; > } > >
| |