From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933210AbcBYP7Y (ORCPT ); Thu, 25 Feb 2016 10:59:24 -0500 Received: from mail.kernel.org ([198.145.29.136]:34998 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932407AbcBYP7X (ORCPT ); Thu, 25 Feb 2016 10:59:23 -0500 Date: Thu, 25 Feb 2016 12:59:14 -0300 From: Arnaldo Carvalho de Melo To: Taeung Song Cc: linux-kernel@vger.kernel.org, Jiri Olsa , Namhyung Kim , Ingo Molnar , Wang Nan Subject: Re: [PATCH 2/3] perf script: Exception handling when the print fmt is empty Message-ID: <20160225155914.GM8720@kernel.org> References: <1456413179-12331-1-git-send-email-treeze.taeung@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456413179-12331-1-git-send-email-treeze.taeung@gmail.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Fri, Feb 26, 2016 at 12:12:59AM +0900, Taeung Song escreveu: > After collecting samples for events 'syscalls:', > perf-script with python script doesn't occasionally > work generating a segmentation fault. Thanks, applied. - Arnaldo > The reason is that the print fmt is empty and > a value of event->print_fmt.args is NULL, so > dereferencing the null pointer results in > a segmentation fault i.e. > > # perf record -e syscalls:* > # perf script -g python > # perf script -s perf-script.py > > in trace_begin > syscalls__sys_enter_brk 3 79841.832099154 3777 test.sh syscall_nr=12, brk=0 > > ... (omitted) ... > > Segmentation fault (core dumped) > > For example, a format of sys_enter_getuid() hasn't > print fmt as below. > > # cat /sys/kernel/debug/tracing/events/syscalls/sys_enter_getuid/format > name: sys_enter_getuid > ID: 188 > format: > field:unsigned short common_type; offset:0; size:2; signed:0; > field:unsigned char common_flags; offset:2; size:1; signed:0; > field:unsigned char common_preempt_count; offset:3; size:1; signed:0; > field:int common_pid; offset:4; size:4; signed:1; > field:int syscall_nr; offset:8; size:4; signed:1; > > print fmt: "" > > So add exception handling to avoid this problem. > > Cc: Jiri Olsa > Cc: Wang Nan > Signed-off-by: Taeung Song > --- > tools/perf/util/scripting-engines/trace-event-perl.c | 3 +++ > tools/perf/util/scripting-engines/trace-event-python.c | 3 +++ > 2 files changed, 6 insertions(+) > > diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c > index 544509c..b3aabc0 100644 > --- a/tools/perf/util/scripting-engines/trace-event-perl.c > +++ b/tools/perf/util/scripting-engines/trace-event-perl.c > @@ -187,6 +187,9 @@ static void define_event_symbols(struct event_format *event, > const char *ev_name, > struct print_arg *args) > { > + if (args == NULL) > + return; > + > switch (args->type) { > case PRINT_NULL: > break; > diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c > index d72fafc..309d90f 100644 > --- a/tools/perf/util/scripting-engines/trace-event-python.c > +++ b/tools/perf/util/scripting-engines/trace-event-python.c > @@ -205,6 +205,9 @@ static void define_event_symbols(struct event_format *event, > const char *ev_name, > struct print_arg *args) > { > + if (args == NULL) > + return; > + > switch (args->type) { > case PRINT_NULL: > break; > -- > 2.5.0