[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