From: Leo Yan <leo.yan@linaro.org>
To: Daniel Thompson <daniel.thompson@linaro.org>
Cc: Song Liu <songliubraving@fb.com>,
Peter Zijlstra <peterz@infradead.org>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
linux-kernel@vger.kernel.org, Jin Yao <yao.jin@linux.intel.com>,
Jiri Olsa <jolsa@redhat.com>, Andi Kleen <ak@linux.intel.com>,
Eric Saint-Etienne <eric.saint.etienne@oracle.com>,
Konstantin Khlebnikov <khlebnikov@yandex-team.ru>,
Ingo Molnar <mingo@redhat.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Alexios Zavras <alexios.zavras@intel.com>,
Davidlohr Bueso <dave@stgolabs.net>,
Namhyung Kim <namhyung@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arm-kernel@lists.infradead.org,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Thomas Richter <tmricht@linux.ibm.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
"David S. Miller" <davem@davemloft.net>,
Changbin Du <changbin.du@intel.com>,
Alexey Budankov <alexey.budankov@linux.intel.com>
Subject: Re: [PATCH v1 10/11] perf intel-pt: Smatch: Fix potential NULL pointer dereference
Date: Wed, 3 Jul 2019 18:28:14 +0800 [thread overview]
Message-ID: <20190703102814.GF6852@leoy-ThinkPad-X240s> (raw)
In-Reply-To: <20190703100032.yx5genhqcrit4z5p@holly.lan>
On Wed, Jul 03, 2019 at 11:00:32AM +0100, Daniel Thompson wrote:
> On Wed, Jul 03, 2019 at 09:35:54AM +0800, Leo Yan wrote:
> > Hi Adrian,
> >
> > On Tue, Jul 02, 2019 at 02:07:40PM +0300, Adrian Hunter wrote:
> > > 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.
> >
> > Thanks for suggestions.
> >
> > I checked report and script commands, as you said, both command will
> > always set session->itrace_synth_opts. For these two commands, we can
> > safely remove the NULL test.
> >
> > Because perf tool contains many sub commands, so I don't have much
> > confidence it's very safe to remove the NULL test for all cases; e.g.
> > there have cases which will process aux trace buffer but without
> > itrace options; for this case, session->itrace_synth_opts might be NULL.
> >
> > For either way (remove NULL test or keep NULL test), I don't want to
> > introduce regression and extra efforts by my patch. So want to double
> > confirm with you for this :)
>
> Review is useful to ensure the chosen solution is correct but
> unless I missed something the non-regression reasoning here is easy
> easy. In its original form and despite the check, the code will
> always dereference session->itrace_synth_opts, therefore removing
> the check cannot makes things worse.
Fair point and it's smart to connect with function
itrace_synth_opts__set_default(). :)
Thanks, Daniel.
> PS Of course we do also have to check that
> itrace_synth_opts__set_default() isn't a macro... but it isn't.
>
>
> > > > 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;
> > > > }
> > > >
> > > >
> > >
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Leo Yan <leo.yan@linaro.org>
To: Daniel Thompson <daniel.thompson@linaro.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Andi Kleen <ak@linux.intel.com>,
"David S. Miller" <davem@davemloft.net>,
Davidlohr Bueso <dave@stgolabs.net>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Jin Yao <yao.jin@linux.intel.com>,
Song Liu <songliubraving@fb.com>,
Alexios Zavras <alexios.zavras@intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Changbin Du <changbin.du@intel.com>,
Eric Saint-Etienne <eric.saint.etienne@oracle.com>,
Konstantin Khlebnikov <khlebnikov@yandex-team.ru>,
Thomas Richter <tmricht@linux.ibm.com>,
Alexey Budankov <alexey.budankov@linux.intel.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v1 10/11] perf intel-pt: Smatch: Fix potential NULL pointer dereference
Date: Wed, 3 Jul 2019 18:28:14 +0800 [thread overview]
Message-ID: <20190703102814.GF6852@leoy-ThinkPad-X240s> (raw)
In-Reply-To: <20190703100032.yx5genhqcrit4z5p@holly.lan>
On Wed, Jul 03, 2019 at 11:00:32AM +0100, Daniel Thompson wrote:
> On Wed, Jul 03, 2019 at 09:35:54AM +0800, Leo Yan wrote:
> > Hi Adrian,
> >
> > On Tue, Jul 02, 2019 at 02:07:40PM +0300, Adrian Hunter wrote:
> > > 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.
> >
> > Thanks for suggestions.
> >
> > I checked report and script commands, as you said, both command will
> > always set session->itrace_synth_opts. For these two commands, we can
> > safely remove the NULL test.
> >
> > Because perf tool contains many sub commands, so I don't have much
> > confidence it's very safe to remove the NULL test for all cases; e.g.
> > there have cases which will process aux trace buffer but without
> > itrace options; for this case, session->itrace_synth_opts might be NULL.
> >
> > For either way (remove NULL test or keep NULL test), I don't want to
> > introduce regression and extra efforts by my patch. So want to double
> > confirm with you for this :)
>
> Review is useful to ensure the chosen solution is correct but
> unless I missed something the non-regression reasoning here is easy
> easy. In its original form and despite the check, the code will
> always dereference session->itrace_synth_opts, therefore removing
> the check cannot makes things worse.
Fair point and it's smart to connect with function
itrace_synth_opts__set_default(). :)
Thanks, Daniel.
> PS Of course we do also have to check that
> itrace_synth_opts__set_default() isn't a macro... but it isn't.
>
>
> > > > 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;
> > > > }
> > > >
> > > >
> > >
next prev parent reply other threads:[~2019-07-03 10:28 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-02 10:34 [PATCH v1 00/11] perf: Fix errors detected by Smatch Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-02 10:34 ` [PATCH v1 01/11] perf report: Smatch: Fix potential NULL pointer dereference Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-02 10:34 ` [PATCH v1 02/11] perf stat: Smatch: Fix use-after-freed pointer Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-03 18:18 ` Arnaldo Carvalho de Melo
2019-07-03 18:18 ` Arnaldo Carvalho de Melo
2019-07-13 10:53 ` [tip:perf/urgent] perf stat: Fix use-after-freed pointer detected by the smatch tool tip-bot for Leo Yan
2019-07-02 10:34 ` [PATCH v1 03/11] perf top: Smatch: Fix potential NULL pointer dereference Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-03 18:30 ` Arnaldo Carvalho de Melo
2019-07-03 18:30 ` Arnaldo Carvalho de Melo
2019-07-13 10:53 ` [tip:perf/urgent] perf top: Fix potential NULL pointer dereference detected by the smatch tool tip-bot for Leo Yan
2019-07-02 10:34 ` [PATCH v1 04/11] perf annotate: Smatch: Fix dereferencing freed memory Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-03 18:43 ` Arnaldo Carvalho de Melo
2019-07-03 18:43 ` Arnaldo Carvalho de Melo
2019-07-13 10:54 ` [tip:perf/urgent] perf annotate: Fix dereferencing freed memory found by the smatch tool tip-bot for Leo Yan
2019-07-02 10:34 ` [PATCH v1 05/11] perf trace: Smatch: Fix potential NULL pointer dereference Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-03 18:46 ` Arnaldo Carvalho de Melo
2019-07-03 18:46 ` Arnaldo Carvalho de Melo
2019-07-13 10:55 ` [tip:perf/urgent] perf trace: Fix potential NULL pointer dereference found by the smatch tool tip-bot for Leo Yan
2019-07-02 10:34 ` [PATCH v1 06/11] perf hists: Smatch: Fix potential NULL pointer dereference Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-02 11:07 ` Jiri Olsa
2019-07-02 11:07 ` Jiri Olsa
2019-07-02 10:34 ` [PATCH v1 07/11] perf map: " Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-13 10:55 ` [tip:perf/urgent] perf map: Fix potential NULL pointer dereference found by smatch tool tip-bot for Leo Yan
2019-07-02 10:34 ` [PATCH v1 08/11] perf session: Smatch: Fix potential NULL pointer dereference Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-03 19:01 ` Arnaldo Carvalho de Melo
2019-07-03 19:01 ` Arnaldo Carvalho de Melo
2019-07-13 10:57 ` [tip:perf/urgent] perf session: Fix potential NULL pointer dereference found by the smatch tool tip-bot for Leo Yan
2019-07-02 10:34 ` [PATCH v1 09/11] perf intel-bts: Smatch: Fix potential NULL pointer dereference Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-02 10:34 ` [PATCH v1 10/11] perf intel-pt: " Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-02 11:07 ` Adrian Hunter
2019-07-02 11:07 ` Adrian Hunter
2019-07-03 1:35 ` Leo Yan
2019-07-03 1:35 ` Leo Yan
2019-07-03 5:19 ` Adrian Hunter
2019-07-03 5:19 ` Adrian Hunter
2019-07-03 8:16 ` Leo Yan
2019-07-03 8:16 ` Leo Yan
2019-07-03 10:00 ` Daniel Thompson
2019-07-03 10:00 ` Daniel Thompson
2019-07-03 10:28 ` Leo Yan [this message]
2019-07-03 10:28 ` Leo Yan
2019-07-02 10:34 ` [PATCH v1 11/11] perf cs-etm: " Leo Yan
2019-07-02 10:34 ` Leo Yan
2019-07-02 17:03 ` Mathieu Poirier
2019-07-02 17:03 ` Mathieu Poirier
2019-07-03 8:22 ` Leo Yan
2019-07-03 8:22 ` Leo Yan
2019-07-02 11:07 ` [PATCH v1 00/11] perf: Fix errors detected by Smatch Jiri Olsa
2019-07-02 11:07 ` Jiri Olsa
2019-07-03 1:48 ` Leo Yan
2019-07-03 1:48 ` Leo Yan
2019-07-03 18:18 ` Arnaldo Carvalho de Melo
2019-07-03 18:18 ` Arnaldo Carvalho de Melo
2019-07-04 7:29 ` Leo Yan
2019-07-04 7:29 ` Leo Yan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190703102814.GF6852@leoy-ThinkPad-X240s \
--to=leo.yan@linaro.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexey.budankov@linux.intel.com \
--cc=alexios.zavras@intel.com \
--cc=changbin.du@intel.com \
--cc=daniel.thompson@linaro.org \
--cc=dave@stgolabs.net \
--cc=davem@davemloft.net \
--cc=eric.saint.etienne@oracle.com \
--cc=jolsa@redhat.com \
--cc=khlebnikov@yandex-team.ru \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=mathieu.poirier@linaro.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=songliubraving@fb.com \
--cc=suzuki.poulose@arm.com \
--cc=tglx@linutronix.de \
--cc=tmricht@linux.ibm.com \
--cc=yao.jin@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.