From: Adrian Hunter <adrian.hunter@intel.com>
To: Ian Rogers <irogers@google.com>
Cc: Miguel Ojeda <ojeda@kernel.org>, Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
linux-perf-users@vger.kernel.org, Jiri Olsa <jolsa@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Mark Rutland <mark.rutland@arm.com>,
Liam Howlett <liam.howlett@oracle.com>,
Namhyung Kim <namhyung@kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1] perf intel-pt: Fix memory sanitizer use-of-uninitialized-value
Date: Mon, 25 Mar 2024 18:06:25 +0200 [thread overview]
Message-ID: <b91bc272-1524-4d14-9c73-dfbb334e8951@intel.com> (raw)
In-Reply-To: <CAP-5=fU0XQ_F2Bax0fzPMtP9BQv3XaNuiGWKQMRQ7g54yzM8xQ@mail.gmail.com>
On 25/03/24 17:44, Ian Rogers wrote:
> On Wed, Mar 20, 2024 at 9:26 AM Ian Rogers <irogers@google.com> wrote:
>>
>> Running the test "Miscellaneous Intel PT testing" with a build with
>> -fsanitize=memory and -fsanitize-memory-track-origins I saw:
>>
>> ```
>> ==1257749==WARNING: MemorySanitizer: use-of-uninitialized-value
>> #0 0x5581c00a76b3 in intel_pt_sample_flags tools/perf/util/intel-pt.c:1527:17
>> #1 0x5581c00c5cf6 in intel_pt_run_decoder tools/perf/util/intel-pt.c:2961:3
>> #2 0x5581c00968f8 in intel_pt_process_timeless_queues tools/perf/util/intel-pt.c:3074:4
>> #3 0x5581c007cf49 in intel_pt_process_event tools/perf/util/intel-pt.c:3482:10
>> #4 0x5581bffa269a in auxtrace__process_event tools/perf/util/auxtrace.c:2830:9
>> #5 0x5581bfb826c0 in perf_session__deliver_event tools/perf/util/session.c:1649:8
>> #6 0x5581bfba1d7f in perf_session__process_event tools/perf/util/session.c:1891:9
>> #7 0x5581bfba82e4 in process_simple tools/perf/util/session.c:2452:9
>> #8 0x5581bfbabcc3 in reader__read_event tools/perf/util/session.c:2381:14
>> #9 0x5581bfbad942 in reader__process_events tools/perf/util/session.c:2430:8
>> #10 0x5581bfb78256 in __perf_session__process_events tools/perf/util/session.c:2477:8
>> #11 0x5581bfb702c4 in perf_session__process_events tools/perf/util/session.c:2643:9
>> #12 0x5581bf2da266 in __cmd_script tools/perf/builtin-script.c:2855:8
>> #13 0x5581bf2bfcdd in cmd_script tools/perf/builtin-script.c:4402:8
>> #14 0x5581bf67004b in run_builtin tools/perf/perf.c:350:11
>> #15 0x5581bf66b8ea in handle_internal_command tools/perf/perf.c:403:8
>> #16 0x5581bf66f527 in run_argv tools/perf/perf.c:447:2
>> #17 0x5581bf669d2d in main tools/perf/perf.c:561:3
>>
>> Uninitialized value was stored to memory at
>> #0 0x5581c005ddf8 in intel_pt_walk_insn tools/perf/util/intel-pt-decoder/intel-pt-decoder.c:1256:25
>> #1 0x5581c001a932 in intel_pt_walk_fup tools/perf/util/intel-pt-decoder/intel-pt-decoder.c:1428:9
>> #2 0x5581c000f76c in intel_pt_walk_trace tools/perf/util/intel-pt-decoder/intel-pt-decoder.c:3299:10
>> #3 0x5581c000899b in intel_pt_decode tools/perf/util/intel-pt-decoder/intel-pt-decoder.c:3988:10
>> #4 0x5581c00c5180 in intel_pt_run_decoder tools/perf/util/intel-pt.c:2941:11
>> #5 0x5581c00968f8 in intel_pt_process_timeless_queues tools/perf/util/intel-pt.c:3074:4
>> #6 0x5581c007cf49 in intel_pt_process_event tools/perf/util/intel-pt.c:3482:10
>> #7 0x5581bffa269a in auxtrace__process_event tools/perf/util/auxtrace.c:2830:9
>> #8 0x5581bfb826c0 in perf_session__deliver_event tools/perf/util/session.c:1649:8
>> #9 0x5581bfba1d7f in perf_session__process_event tools/perf/util/session.c:1891:9
>> #10 0x5581bfba82e4 in process_simple tools/perf/util/session.c:2452:9
>> #11 0x5581bfbabcc3 in reader__read_event tools/perf/util/session.c:2381:14
>> #12 0x5581bfbad942 in reader__process_events tools/perf/util/session.c:2430:8
>> #13 0x5581bfb78256 in __perf_session__process_events tools/perf/util/session.c:2477:8
>> #14 0x5581bfb702c4 in perf_session__process_events tools/perf/util/session.c:2643:9
>> #15 0x5581bf2da266 in __cmd_script tools/perf/builtin-script.c:2855:8
>> #16 0x5581bf2bfcdd in cmd_script tools/perf/builtin-script.c:4402:8
>> #17 0x5581bf67004b in run_builtin tools/perf/perf.c:350:11
>> #18 0x5581bf66b8ea in handle_internal_command tools/perf/perf.c:403:8
>> #19 0x5581bf66f527 in run_argv tools/perf/perf.c:447:2
>> ```
>>
>> Adding a curly brace initializer for the intel_pt_insn in
>> intel_pt_walk_fup rectifies this, however, there may be other issues
>> lurking behind this so initialize all similar instances.
>>
>> Fixes: f4aa081949e7 ("perf tools: Add Intel PT decoder")
>> Signed-off-by: Ian Rogers <irogers@google.com>
>
> Adrian, could you take a look at this for the sake of tests passing with msan.
I did have a look, but I found msan so slow and full of errors
that it never gave any results.
However, it is easy enough to instrument some debugging which is
what I am still looking at.
Just initializing intel_pt_insn is not quite right, so I need
to check things a bit more.
>
> Thanks,
> Ian
>
>> ---
>> tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 8 ++++----
>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
>> index b450178e3420..b4a95af2e4cc 100644
>> --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
>> +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
>> @@ -1115,7 +1115,7 @@ static void intel_pt_sample_insn(struct intel_pt_decoder *decoder)
>> */
>> static void intel_pt_sample_fup_insn(struct intel_pt_decoder *decoder)
>> {
>> - struct intel_pt_insn intel_pt_insn;
>> + struct intel_pt_insn intel_pt_insn = {};
>> uint64_t max_insn_cnt, insn_cnt = 0;
>> int err;
>>
>> @@ -1418,7 +1418,7 @@ static inline bool intel_pt_fup_with_nlip(struct intel_pt_decoder *decoder,
>>
>> static int intel_pt_walk_fup(struct intel_pt_decoder *decoder)
>> {
>> - struct intel_pt_insn intel_pt_insn;
>> + struct intel_pt_insn intel_pt_insn = {};
>> uint64_t ip;
>> int err;
>>
>> @@ -1461,7 +1461,7 @@ static int intel_pt_walk_fup(struct intel_pt_decoder *decoder)
>>
>> static int intel_pt_walk_tip(struct intel_pt_decoder *decoder)
>> {
>> - struct intel_pt_insn intel_pt_insn;
>> + struct intel_pt_insn intel_pt_insn = {};
>> int err;
>>
>> err = intel_pt_walk_insn(decoder, &intel_pt_insn, 0);
>> @@ -1626,7 +1626,7 @@ static int intel_pt_emulated_ptwrite(struct intel_pt_decoder *decoder)
>>
>> static int intel_pt_walk_tnt(struct intel_pt_decoder *decoder)
>> {
>> - struct intel_pt_insn intel_pt_insn;
>> + struct intel_pt_insn intel_pt_insn = {};
>> int err;
>>
>> while (1) {
>> --
>> 2.44.0.291.gc1ea87d7ee-goog
>>
next prev parent reply other threads:[~2024-03-25 16:06 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-20 16:26 [PATCH v1] perf intel-pt: Fix memory sanitizer use-of-uninitialized-value Ian Rogers
2024-03-25 15:44 ` Ian Rogers
2024-03-25 16:06 ` Adrian Hunter [this message]
2024-03-26 8:32 ` [PATCH] perf intel-pt: Fix unassigned instruction op Adrian Hunter
2024-03-26 16:13 ` Ian Rogers
2024-03-26 16:52 ` Adrian Hunter
2024-04-25 18:43 ` Arnaldo Carvalho de Melo
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=b91bc272-1524-4d14-9c73-dfbb334e8951@intel.com \
--to=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=liam.howlett@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=ojeda@kernel.org \
--cc=peterz@infradead.org \
/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.