From: Jiri Olsa <jolsa@redhat.com>
To: yaowenbin <yaowenbin1@huawei.com>
Cc: peterz@infradead.org, mingo@redhat.com, acme@kernel.org,
mark.rutland@arm.com, alexander.shishkin@linux.intel.com,
namhyung@kernel.org, linux-kernel@vger.kernel.org,
hewenliang4@huawei.com, wuxu.wu@huawei.com
Subject: Re: [PATCH] perf top: add concurrent access protection of the SLsmg screen management
Date: Fri, 31 Dec 2021 15:10:13 +0100 [thread overview]
Message-ID: <Yc8PRcFFSvIev0c5@krava> (raw)
In-Reply-To: <a91e3943-7ddc-f5c0-a7f5-360f073c20e6@huawei.com>
On Wed, Dec 29, 2021 at 04:55:19PM +0800, yaowenbin wrote:
> 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
> function is called. SLsmg_reset_smg resets the SLsmg screen management routines
> by freeing all memory allocated while it was active. However SLsmg_reinit_smg
> function maybe be called by another thread. SLsmg_reinit_smg function will
> free the same memory accessed by SLsmg_reset_smg functon, thus it results
> in double free. SLsmg_reinit_smg function 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 function.
>
> Signed-off-by: yaowenbin <yaowenbin1@huawei.com>
> Signed-off-by: hewenliang <hewenliang4@huawei.com>
> Signed-off-by: Wenyu Liu <liuwenyu7@huawei.com>
> ---
> tools/perf/ui/tui/setup.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/ui/tui/setup.c b/tools/perf/ui/tui/setup.c
> index d4ac41679..1fdf92062 100644
> --- a/tools/perf/ui/tui/setup.c
> +++ b/tools/perf/ui/tui/setup.c
> @@ -170,9 +170,11 @@ void ui__exit(bool wait_for_ok)
> "Press any key...", 0);
>
> SLtt_set_cursor_visibility(1);
> - SLsmg_refresh();
> - SLsmg_reset_smg();
> + if (!pthread_mutex_trylock(&ui__lock)) {
trylock because it can be called from signal, right?
could you plase add some comment about that
thanks,
jirka
> + SLsmg_refresh();
> + SLsmg_reset_smg();
> + pthread_mutex_unlock(&ui__lock);
> + }
> SLang_reset_tty();
> -
> perf_error__unregister(&perf_tui_eops);
> }
> --
> 2.27.0
>
next prev parent reply other threads:[~2021-12-31 14:24 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-29 8:55 [PATCH] perf top: add concurrent access protection of the SLsmg screen management yaowenbin
2021-12-31 14:10 ` Jiri Olsa [this message]
2022-01-04 7:21 ` yaowenbin
2022-01-02 14:47 ` Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Yc8PRcFFSvIev0c5@krava \
--to=jolsa@redhat.com \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=hewenliang4@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=wuxu.wu@huawei.com \
--cc=yaowenbin1@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.