On Mon, Jun 11, 2018 at 12:29:51PM -0700, Shakeel Butt wrote:
> The memcg kmem cache creation and deactivation (SLUB only) is
> asynchronous. If a root kmem cache is destroyed whose memcg cache is in
> the process of creation or deactivation, the kernel may crash.
> 
> Example of one such crash:
>       general protection fault: 0000 [#1] SMP PTI
>       CPU: 1 PID: 1721 Comm: kworker/14:1 Not tainted 4.17.0-smp
>       ...
>       Workqueue: memcg_kmem_cache kmemcg_deactivate_workfn
>       RIP: 0010:has_cpu_slab
>       ...
>       Call Trace:
>       ? on_each_cpu_cond
>       __kmem_cache_shrink
>       kmemcg_cache_deact_after_rcu
>       kmemcg_deactivate_workfn
>       process_one_work
>       worker_thread
>       kthread
>       ret_from_fork+0x35/0x40
> 
> To fix this race, on root kmem cache destruction, mark the cache as
> dying and flush the workqueue used for memcg kmem cache creation and
> deactivation. SLUB's memcg kmem cache deactivation also includes RCU
> callback and thus make sure all previous registered RCU callbacks
> have completed as well.
> 
> Signed-off-by: Shakeel Butt <shake...@google.com>

Acked-by: Vladimir Davydov <vdavydov....@gmail.com>

Thanks.

Reply via email to