From: Namhyung Kim <namhyung@kernel.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Steven Rostedt <rostedt@kernel.org>,
linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
bpf@vger.kernel.org, x86@kernel.org,
Masami Hiramatsu <mhiramat@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Ingo Molnar <mingo@kernel.org>, Jiri Olsa <jolsa@kernel.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Andrii Nakryiko <andrii@kernel.org>,
Indu Bhagat <indu.bhagat@oracle.com>,
"Jose E. Marchesi" <jemarch@gnu.org>,
Beau Belgrave <beaub@linux.microsoft.com>,
Jens Remus <jremus@linux.ibm.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Florian Weimer <fweimer@redhat.com>, Sam James <sam@gentoo.org>,
Kees Cook <kees@kernel.org>,
Carlos O'Donell <codonell@redhat.com>
Subject: Re: [PATCH v16 4/4] perf tools: Merge deferred user callchains
Date: Thu, 13 Nov 2025 13:42:56 -0800 [thread overview]
Message-ID: <aRZQ4PMG0zmoF-rQ@google.com> (raw)
In-Reply-To: <20251024130203.GC3245006@noisy.programming.kicks-ass.net>
Hello,
Sorry for the delay. And I'm happy that the kernel part is merge to the
tip tree! :)
On Fri, Oct 24, 2025 at 03:02:03PM +0200, Peter Zijlstra wrote:
> On Thu, Oct 02, 2025 at 01:49:38PM -0400, Steven Rostedt wrote:
> > On Mon, 08 Sep 2025 13:53:23 -0400
> > Steven Rostedt <rostedt@kernel.org> wrote:
> >
> > > +static int evlist__deliver_deferred_samples(struct evlist *evlist,
> > > + const struct perf_tool *tool,
> > > + union perf_event *event,
> > > + struct perf_sample *sample,
> > > + struct machine *machine)
> > > +{
> > > + struct deferred_event *de, *tmp;
> > > + struct evsel *evsel;
> > > + int ret = 0;
> > > +
> > > + if (!tool->merge_deferred_callchains) {
> > > + evsel = evlist__id2evsel(evlist, sample->id);
> > > + return tool->callchain_deferred(tool, event, sample,
> > > + evsel, machine);
> > > + }
> > > +
> > > + list_for_each_entry_safe(de, tmp, &evlist->deferred_samples, list) {
> > > + struct perf_sample orig_sample;
> >
> > orig_sample is not initialized and can then contain junk.
Yep.
> >
> > > +
> > > + ret = evlist__parse_sample(evlist, de->event, &orig_sample);
But here you call evlist__parse_sample() and evsel__parse_sample() which
should initialize the sample properly.
> > > + if (ret < 0) {
> > > + pr_err("failed to parse original sample\n");
> > > + break;
> > > + }
> > > +
> > > + if (sample->tid != orig_sample.tid)
> > > + continue;
> > > +
> > > + if (event->callchain_deferred.cookie == orig_sample.deferred_cookie)
> > > + sample__merge_deferred_callchain(&orig_sample, sample);
> >
> > The sample__merge_deferred_callchain() initializes both
> > orig_sample.deferred_callchain and the callchain. But now that it's not
> > being called, it can cause the below free to happen with junk as the
> > callchain. This needs:
> >
> > else
> > orig_sample.deferred_callchain = false;
>
> Ah, so I saw crashes from here and just deleted both free()s and got on
> with things ;-)
I don't understand how it can have the garbage. But having the else
part would be safer.
Thanks,
Namhyung
> > > +
> > > + evsel = evlist__id2evsel(evlist, orig_sample.id);
> > > + ret = evlist__deliver_sample(evlist, tool, de->event,
> > > + &orig_sample, evsel,> machine); +
> > > + if (orig_sample.deferred_callchain)
> > > + free(orig_sample.callchain);
> > > +
> > > + list_del(&de->list);
> > > + free(de);
> > > +
> > > + if (ret)
> > > + break;
> > > + }
> > > + return ret;
> > > +}
> >
> > -- Steve
next prev parent reply other threads:[~2025-11-13 21:43 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-08 17:53 [PATCH v16 0/4] perf tool: Support the deferred unwinding infrastructure Steven Rostedt
2025-09-08 17:53 ` [PATCH v16 1/4] perf tools: Minimal CALLCHAIN_DEFERRED support Steven Rostedt
2025-09-08 17:53 ` [PATCH v16 2/4] perf record: Enable defer_callchain for user callchains Steven Rostedt
2025-09-08 17:53 ` [PATCH v16 3/4] perf script: Display PERF_RECORD_CALLCHAIN_DEFERRED Steven Rostedt
2025-09-08 17:53 ` [PATCH v16 4/4] perf tools: Merge deferred user callchains Steven Rostedt
2025-10-02 17:49 ` Steven Rostedt
2025-10-24 13:02 ` Peter Zijlstra
2025-10-29 0:09 ` Steven Rostedt
2025-10-29 10:38 ` Peter Zijlstra
2025-11-12 10:05 ` Jens Remus
2025-11-12 22:38 ` Namhyung Kim
2025-11-13 21:42 ` Namhyung Kim [this message]
2025-10-24 13:01 ` [PATCH v16 0/4] perf tool: Support the deferred unwinding infrastructure Peter Zijlstra
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=aRZQ4PMG0zmoF-rQ@google.com \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=andrii@kernel.org \
--cc=beaub@linux.microsoft.com \
--cc=bpf@vger.kernel.org \
--cc=codonell@redhat.com \
--cc=fweimer@redhat.com \
--cc=indu.bhagat@oracle.com \
--cc=jemarch@gnu.org \
--cc=jolsa@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=jremus@linux.ibm.com \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rostedt@kernel.org \
--cc=sam@gentoo.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.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.