mm: kmemleak: disable early logging in case of error
If an error occurs during kmemleak_init() (e.g. kmem cache cannot be created), kmemleak is disabled but kmemleak_early_log remains enabled. Subsequently, when the .init.text section is freed, the log_early() function no longer exists. To avoid a page fault in such scenario, ensure that kmemleak_disable() also disables early logging. Link: http://lkml.kernel.org/r/20190731152302.42073-1-catalin.marinas@arm.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Reported-by: Qian Cai <cai@lca.pw> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5336e52c9e
commit
fcf3a5b62f
|
@ -1966,6 +1966,7 @@ static void kmemleak_disable(void)
|
|||
|
||||
/* stop any memory operation tracing */
|
||||
kmemleak_enabled = 0;
|
||||
kmemleak_early_log = 0;
|
||||
|
||||
/* check whether it is too early for a kernel thread */
|
||||
if (kmemleak_initialized)
|
||||
|
@ -2009,7 +2010,6 @@ void __init kmemleak_init(void)
|
|||
|
||||
#ifdef CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF
|
||||
if (!kmemleak_skip_disable) {
|
||||
kmemleak_early_log = 0;
|
||||
kmemleak_disable();
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue