All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/3] perf script: Exception handling when the print fmt is empty
@ 2016-02-25 15:12 Taeung Song
  2016-02-25 15:59 ` Arnaldo Carvalho de Melo
  2016-02-27  9:40 ` [tip:perf/core] " tip-bot for Taeung Song
  0 siblings, 2 replies; 4+ messages in thread
From: Taeung Song @ 2016-02-25 15:12 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar, Taeung Song,
	Wang Nan

After collecting samples for events 'syscalls:',
perf-script with python script doesn't occasionally
work generating a segmentation fault.

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 <jolsa@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 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

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/3] perf script: Exception handling when the print fmt is empty
  2016-02-25 15:12 [PATCH 2/3] perf script: Exception handling when the print fmt is empty Taeung Song
@ 2016-02-25 15:59 ` Arnaldo Carvalho de Melo
  2016-02-25 16:33   ` Taeung Song
  2016-02-27  9:40 ` [tip:perf/core] " tip-bot for Taeung Song
  1 sibling, 1 reply; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-02-25 15:59 UTC (permalink / raw)
  To: Taeung Song; +Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar, Wang Nan

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 <jolsa@kernel.org>
> Cc: Wang Nan <wangnan0@huawei.com>
> Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
> ---
>  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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/3] perf script: Exception handling when the print fmt is empty
  2016-02-25 15:59 ` Arnaldo Carvalho de Melo
@ 2016-02-25 16:33   ` Taeung Song
  0 siblings, 0 replies; 4+ messages in thread
From: Taeung Song @ 2016-02-25 16:33 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Jiri Olsa, Namhyung Kim, Ingo Molnar, Wang Nan

Hi, Arnaldo

On 02/26/2016 12:59 AM, Arnaldo Carvalho de Melo wrote:
> 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

Thank you!!
Taeung

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [tip:perf/core] perf script: Exception handling when the print fmt is empty
  2016-02-25 15:12 [PATCH 2/3] perf script: Exception handling when the print fmt is empty Taeung Song
  2016-02-25 15:59 ` Arnaldo Carvalho de Melo
@ 2016-02-27  9:40 ` tip-bot for Taeung Song
  1 sibling, 0 replies; 4+ messages in thread
From: tip-bot for Taeung Song @ 2016-02-27  9:40 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: treeze.taeung, hpa, linux-kernel, mingo, namhyung, acme, tglx,
	jolsa, wangnan0

Commit-ID:  8579aca3f9a8f890d6d94ccaed7cf5fd54a0c3bd
Gitweb:     http://git.kernel.org/tip/8579aca3f9a8f890d6d94ccaed7cf5fd54a0c3bd
Author:     Taeung Song <treeze.taeung@gmail.com>
AuthorDate: Fri, 26 Feb 2016 00:12:59 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 25 Feb 2016 12:54:20 -0300

perf script: Exception handling when the print fmt is empty

After collecting samples for events 'syscalls:', perf-script with python
script doesn't occasionally work generating a segmentation fault.

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.

Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1456413179-12331-1-git-send-email-treeze.taeung@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 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;

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-02-27  9:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-25 15:12 [PATCH 2/3] perf script: Exception handling when the print fmt is empty Taeung Song
2016-02-25 15:59 ` Arnaldo Carvalho de Melo
2016-02-25 16:33   ` Taeung Song
2016-02-27  9:40 ` [tip:perf/core] " tip-bot for Taeung Song

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.