diff --git a/mm/kmemleak.c b/mm/kmemleak.c index f54734abf9466ba12e68c34d4b662e57c27de8ee..5c90c54529a79bbf8976349cc11edfb22ed70716 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -423,9 +423,16 @@ static struct kmemleak_object *lookup_object(unsigned long ptr, int alias) else if (object->pointer == ptr || alias) return object; else { + /* + * Printk deferring due to the kmemleak_lock held. + * This is done to avoid deadlock. + */ + printk_safe_enter(); kmemleak_warn("Found object by alias at 0x%08lx\n", ptr); dump_object_info(object); + printk_safe_exit(); + break; } }