• He Kuang's avatar
    perf buildid-list: Fix segfault when show DSOs with hits · 5e78c69b
    He Kuang authored
    commit: f3b623b8 ("perf tools: Reference count struct thread")
    appends every thread->node to dead_threads in machine__remove_thread()
    and list_del_init() this node in thread__put().
    
    perf_event__exit_del_thread() releases thread wihout using
    machine__remove_thread(), and causes a NULL pointer crash when
    list_del_init(&thread->node) is called. Fix this by using
    machine_remove_thread() instead of using thread__put() directly.
    
    This problem can be reproduced as following:
    
      $ perf record ls
      $ perf buildid-list --with-hits
      [ 3874.195070] perf[1018]: segfault at 0 ip 00000000004b0b15 sp
      00007ffc35b44780 error 6 in perf[400000+166000]
      Segmentation fault
    
    After this patch:
      $ perf record ls
      $ perf buildid-list --with-hits
      bc23e7c3281e542650ba4324421d6acf78f4c23e /proc/kcore
      643324cb0e969f30c56d660f167f84a150845511 [vdso]
      0000000000000000000000000000000000000000 /bin/busybox
      ...
    Signed-off-by: default avatarHe Kuang <hekuang@huawei.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1428658500-6483-1-git-send-email-hekuang@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    5e78c69b
machine.h 7.34 KB