• Hangliang Lai's avatar
    perf top: Expand the range of multithreaded phase · eab50517
    Hangliang Lai authored
    In __cmd_top(), perf_set_multithreaded() is used to enable
    pthread_rwlock, thus down_read() and down_write () are not nops,
    handling concurrency problems
    
    Then 'perf top' uses perf_set_singlethreaded(), switching to the single
    threaded phase, assuming that no thread concurrency will happen later.
    
    However, a use after free problem could occur in the single threaded
    phase, the concurrent procedure is this:
    
    display_thread                              process_thread
    --------------                              --------------
    thread__comm_len
      -> thread__comm_str
        -> __thread__comm_str(thread)
                                                thread__delete
                                                 -> comm__free
                                                  -> comm_str__put
                                                   -> zfree(&cs->str)
        -> thread->comm_len = strlen(comm);
    
    Since in single thread phase, perf_singlethreaded is true, down_read()
    and down_write() do nothing to avoid concurrency problems.
    
    This patch moves the perf_set_singlethreaded() call to the function tail
    to expand the multithreaded phase range, making display_thread() and
    process_thread() concurrency safe.
    Reviewed-by: default avatarYunfeng Ye <yeyunfeng@huawei.com>
    Signed-off-by: default avatarHangliang Lai  <laihangliang1@huawei.com>
    Co-developed-by: default avatarWenyu Liu <liuwenyu7@huawei.com>
    Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Feilong Lin <linfeilong@huawei.com>
    Cc: Hewenliang <hewenliang4@huawei.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Link: https://lore.kernel.org/r/20230411013224.2079-1-laihangliang1@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    eab50517
builtin-top.c 48.7 KB