From: Adrian Hunter <adrian.hunter@intel.com>
To: Wang Nan <wangnan0@huawei.com>, acme@kernel.org
Cc: linux-kernel@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Josh Poimboeuf <jpoimboe@redhat.com>
Subject: Re: [PATCH 1/2] perf tools: Fix fault in error patch of intel_pt_process_auxtrace_info()
Date: Mon, 1 Feb 2016 10:51:35 +0200 [thread overview]
Message-ID: <56AF1C97.3080506@intel.com> (raw)
In-Reply-To: <1454296865-19749-1-git-send-email-wangnan0@huawei.com>
On 01/02/16 05:21, Wang Nan wrote:
> In error processing path of intel_pt_process_auxtrace_info() it calls
> thread__zput() to clean and free pt->unknown_thread which is created by
> thread__new(). However, when error raise, a segfault happen:
>
> # perf script -F event,comm,pid,tid,time,addr,ip,sym,dso,iregs
> Samples for 'instructions:u' event do not have IREGS attribute set. Cannot print 'iregs' field.
> intel_pt_synth_events: failed to synthesize 'instructions' event type
> Segmentation fault (core dumped)
>
> The problem is: there's a union in 'struct thread' combines a list_head
> and a rb_node. The standard life cycle of a thread is: init rb_node during
> creating, inserted into machine->threads rbtree uses rb_node, move to
> machine->dead_threads using list_head, clean by thread__put:
> list_del_init(&thread->node).
I sent a different patch for this:
http://marc.info/?l=linux-kernel&m=145381014011697
>
> In the above command, it clean a thread before adding it into list,
> causes the above segfault.
>
> This patch gives a fake list_head and link the thread into it before
> calling thread__zput(), get rid of the segfault.
>
> After this patch:
> # perf script -F event,comm,pid,tid,time,addr,ip,sym,dso,iregs
> Samples for 'instructions:u' event do not have IREGS attribute set. Cannot print 'iregs' field.
> intel_pt_synth_events: failed to synthesize 'instructions' event type
> 0x248 [0x88]: failed to process type: 70
>
> Reported-by: Tong Zhang <ztong@vt.edu>
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> Cc: Adrian Hunter <adrian.hunter@intel.com>
> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> Cc: Josh Poimboeuf <jpoimboe@redhat.com>
> ---
> tools/perf/util/intel-pt.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
> index 81a2eb7..e2add63 100644
> --- a/tools/perf/util/intel-pt.c
> +++ b/tools/perf/util/intel-pt.c
> @@ -2013,6 +2013,7 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
> struct auxtrace_info_event *auxtrace_info = &event->auxtrace_info;
> size_t min_sz = sizeof(u64) * INTEL_PT_PER_CPU_MMAPS;
> struct intel_pt *pt;
> + struct list_head dead_thread;
> int err;
>
> if (auxtrace_info->header.size < sizeof(struct auxtrace_info_event) +
> @@ -2153,6 +2154,9 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
> return 0;
>
> err_delete_thread:
> + RB_CLEAR_NODE(&pt->unknown_thread->rb_node);
> + INIT_LIST_HEAD(&dead_thread);
> + list_add(&pt->unknown_thread->node, &dead_thread);
> thread__zput(pt->unknown_thread);
> err_free_queues:
> intel_pt_log_disable();
>
next prev parent reply other threads:[~2016-02-01 8:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-01 3:21 [PATCH 1/2] perf tools: Fix fault in error patch of intel_pt_process_auxtrace_info() Wang Nan
2016-02-01 3:21 ` [PATCH 2/2] perf tools: Fix fault in tracepoint_error if NULL is passed to parse_event Wang Nan
2016-02-01 8:53 ` Adrian Hunter
2016-02-01 14:47 ` Arnaldo Carvalho de Melo
2016-02-01 8:51 ` Adrian Hunter [this message]
2016-02-04 7:57 ` [tip:perf/urgent] perf tools: Fix thread lifetime related segfaut in intel_pt tip-bot for Adrian Hunter
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=56AF1C97.3080506@intel.com \
--to=adrian.hunter@intel.com \
--cc=acme@kernel.org \
--cc=acme@redhat.com \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=wangnan0@huawei.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.