• Taeung Song's avatar
    perf script: Exception handling when the print fmt is empty · 8579aca3
    Taeung Song authored
    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: default avatarTaeung Song <treeze.taeung@gmail.com>
    Tested-by: default avatarArnaldo 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.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    8579aca3
trace-event-perl.c 15.4 KB