• Thomas Richter's avatar
    perf test: "Session topology" dumps core on s390 · d1211091
    Thomas Richter authored
    The "perf test Session topology" entry fails with core dump on s390. The root
    cause is a NULL pointer dereference in function check_cpu_topology() line 76
    (or line 82 without -v).
    
    The session->header.env.cpu variable is NULL because on s390 function
    process_cpu_topology() returns with error:
    
        socket_id number is too big.
        You may need to upgrade the perf tool.
    
    and releases the env.cpu variable via zfree() and sets it to NULL.
    
    Here is the gdb output:
    (gdb) n
    76                      pr_debug("CPU %d, core %d, socket %d\n", i,
    (gdb) n
    
    Program received signal SIGSEGV, Segmentation fault.
    0x00000000010f4d9e in check_cpu_topology (path=0x3ffffffd6c8
    	"/tmp/perf-test-J6CHMa", map=0x14a1740) at tests/topology.c:76
    76  pr_debug("CPU %d, core %d, socket %d\n", i,
    (gdb)
    
    Make sure the env.cpu variable is not used when its NULL.
    Test for NULL pointer and return TEST_SKIP if so.
    
    Output before:
    
      [root@p23lp27 perf]# ./perf test -F 39
      39: Session topology  :Segmentation fault (core dumped)
      [root@p23lp27 perf]#
    
    Output after:
    
      [root@p23lp27 perf]# ./perf test -vF 39
      39: Session topology                                      :
      --- start ---
      templ file: /tmp/perf-test-Ajx59D
      socket_id number is too big.You may need to upgrade the perf tool.
      ---- end ----
      Session topology: Skip
      [root@p23lp27 perf]#
    Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Link: http://lkml.kernel.org/r/20180528073657.11743-1-tmricht@linux.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    d1211091
topology.c 3.3 KB