• yaowenbin's avatar
    perf top: Fix TUI exit screen refresh race condition · 64f18d2d
    yaowenbin authored
    When the following command is executed several times, a coredump file is
    generated.
    
    	$ timeout -k 9 5 perf top -e task-clock
    	*******
    	*******
    	*******
    	0.01%  [kernel]                  [k] __do_softirq
    	0.01%  libpthread-2.28.so        [.] __pthread_mutex_lock
    	0.01%  [kernel]                  [k] __ll_sc_atomic64_sub_return
    	double free or corruption (!prev) perf top --sort comm,dso
    	timeout: the monitored command dumped core
    
    When we terminate "perf top" using sending signal method,
    SLsmg_reset_smg() called. SLsmg_reset_smg() resets the SLsmg screen
    management routines by freeing all memory allocated while it was active.
    
    However SLsmg_reinit_smg() maybe be called by another thread.
    
    SLsmg_reinit_smg() will free the same memory accessed by
    SLsmg_reset_smg(), thus it results in a double free.
    
    SLsmg_reinit_smg() is called already protected by ui__lock, so we fix
    the problem by adding pthread_mutex_trylock of ui__lock when calling
    SLsmg_reset_smg().
    Signed-off-by: default avatarWenyu Liu <liuwenyu7@huawei.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: wuxu.wu@huawei.com
    Link: http://lore.kernel.org/lkml/a91e3943-7ddc-f5c0-a7f5-360f073c20e6@huawei.comSigned-off-by: default avatarHewenliang <hewenliang4@huawei.com>
    Signed-off-by: default avataryaowenbin <yaowenbin1@huawei.com>
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    64f18d2d
setup.c 3.2 KB