• Marco Elver's avatar
    mm/slab_common: use WARN() if cache still has objects on destroy · 7302e91f
    Marco Elver authored
    Calling kmem_cache_destroy() while the cache still has objects allocated
    is a kernel bug, and will usually result in the entire cache being
    leaked.  While the message in kmem_cache_destroy() resembles a warning,
    it is currently not implemented using a real WARN().
    
    This is problematic for infrastructure testing the kernel, all of which
    rely on the specific format of WARN()s to pick up on bugs.
    
    Some 13 years ago this used to be a simple WARN_ON() in slub, but commit
    d629d819 ("slub: improve kmem_cache_destroy() error message")
    changed it into an open-coded warning to avoid confusion with a bug in
    slub itself.
    
    Instead, turn the open-coded warning into a real WARN() with the message
    preserved, so that test systems can actually identify these issues, and
    we get all the other benefits of using a normal WARN().  The warning
    message is extended with "when called from <caller-ip>" to make it even
    clearer where the fault lies.
    
    For most configurations this is only a cosmetic change, however, note
    that WARN() here will now also respect panic_on_warn.
    
    Link: https://lkml.kernel.org/r/20211102170733.648216-1-elver@google.comSigned-off-by: default avatarMarco Elver <elver@google.com>
    Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Acked-by: default avatarDavid Rientjes <rientjes@google.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7302e91f
slab_common.c 33.1 KB