[Devel] [PATCH rh7] mm/tcache: fix rcu_read_lock()/rcu_read_unlock() imbalance
Kirill Tkhai
ktkhai at virtuozzo.com
Tue May 22 11:59:25 MSK 2018
On 22.05.2018 11:56, Andrey Ryabinin wrote:
> tcache_detach_page()
>
> rcu_read_lock();
> repeat:
> .....
> rcu_read_unlock();
>
> if (page) {
> ...
> page = tcache_page_tree_delete(node, index, page);
> ....
> if (!page)
> goto repeat; // <- will cause rcu_read_unlock() without lock
>
> Take rcu lock before the last 'goto repeat;' in tcache_detach_page().
>
> https://jira.sw.ru/browse/PSBM-81731
> Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
Acked-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
> mm/tcache.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/mm/tcache.c b/mm/tcache.c
> index 02fde409e691..9fc7cbf1c40b 100644
> --- a/mm/tcache.c
> +++ b/mm/tcache.c
> @@ -864,8 +864,10 @@ out:
> * in __tcache_page_tree_delete() fails, and
> * we have to repeat the cycle.
> */
> - if (!page)
> + if (!page) {
> + rcu_read_lock();
> goto repeat;
> + }
> }
>
> return page;
>
More information about the Devel
mailing list