• C
    mm: kmemleak: avoid deadlock on the kmemleak object insertion error path · 9d5a4c73
    Catalin Marinas 提交于
    While very unlikely (usually kmemleak or sl*b bug), the create_object()
    function in mm/kmemleak.c may fail to insert a newly allocated object into
    the rb tree.  When this happens, kmemleak disables itself and prints
    additional information about the object already found in the rb tree.
    Such printing is done with the parent->lock acquired, however the
    kmemleak_lock is already held.  This is a potential race with the scanning
    thread which acquires object->lock and kmemleak_lock in a
    
    This patch removes the locking around the 'parent' object information
    printing.  Such object cannot be freed or removed from object_tree_root
    and object_list since kmemleak_lock is already held.  There is a very
    small risk that some of the object data is being modified on another CPU
    but the only downside is inconsistent information printing.
    Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    9d5a4c73
kmemleak.c 54.2 KB