From: Sergey Senozhatsky Date: Tue, 8 Sep 2015 22:00:50 +0000 (-0700) Subject: mm/slab_common: allow NULL cache pointer in kmem_cache_destroy() X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=3942d29918522ba6a393c19388301ec04df429cd;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git mm/slab_common: allow NULL cache pointer in kmem_cache_destroy() kmem_cache_destroy() does not tolerate a NULL kmem_cache pointer argument and performs a NULL-pointer dereference. This requires additional attention and effort from developers/reviewers and forces all kmem_cache_destroy() callers (200+ as of 4.1) to do a NULL check if (cache) kmem_cache_destroy(cache); Or, otherwise, be invalid kmem_cache_destroy() users. Tweak kmem_cache_destroy() and NULL-check the pointer there. Proposed by Andrew Morton. Link: https://lkml.org/lkml/2015/6/8/583 Signed-off-by: Sergey Senozhatsky Acked-by: David Rientjes Cc: Julia Lawall Cc: Joe Perches Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/mm/slab_common.c b/mm/slab_common.c index c26829fe4e37..bde04a699ab6 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -640,6 +640,9 @@ void kmem_cache_destroy(struct kmem_cache *s) bool need_rcu_barrier = false; bool busy = false; + if (unlikely(!s)) + return; + BUG_ON(!is_root_cache(s)); get_online_cpus();