powerpc/kasan: Fix shadow pages allocation failure
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 19 May 2020 05:48:45 +0000 (05:48 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 20 May 2020 13:41:02 +0000 (23:41 +1000)
Doing kasan pages allocation in MMU_init is too early, kernel doesn't
have access yet to the entire memory space and memblock_alloc() fails
when the kernel is a bit big.

Do it from kasan_init() instead.

Fixes: 2edb16efc899 ("powerpc/32: Add KASAN support")
Cc: stable@vger.kernel.org
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/c24163ee5d5f8cdf52fefa45055ceb35435b8f15.1589866984.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/kasan.h
arch/powerpc/mm/init_32.c
arch/powerpc/mm/kasan/kasan_init_32.c

index fc900937f653452ed8b3288195546302e6a313d2..4769bbf7173ac78341738915208cb4079d072ca8 100644 (file)
 
 #ifdef CONFIG_KASAN
 void kasan_early_init(void);
-void kasan_mmu_init(void);
 void kasan_init(void);
 void kasan_late_init(void);
 #else
 static inline void kasan_init(void) { }
-static inline void kasan_mmu_init(void) { }
 static inline void kasan_late_init(void) { }
 #endif
 
index 872df48ae41bc28dc12085a05229a8d62342aa9f..a6991ef8727d632c988427f18caaf72860bb6681 100644 (file)
@@ -170,8 +170,6 @@ void __init MMU_init(void)
        btext_unmap();
 #endif
 
-       kasan_mmu_init();
-
        setup_kup();
 
        /* Shortly after that, the entire linear mapping will be available */
index 8b15fe09b9679f352354a1d92655a814a0907c51..b7c287adfd598cb21c94e583b9d4075655f5ee62 100644 (file)
@@ -131,7 +131,7 @@ static void __init kasan_unmap_early_shadow_vmalloc(void)
        flush_tlb_kernel_range(k_start, k_end);
 }
 
-void __init kasan_mmu_init(void)
+static void __init kasan_mmu_init(void)
 {
        int ret;
        struct memblock_region *reg;
@@ -159,6 +159,8 @@ void __init kasan_mmu_init(void)
 
 void __init kasan_init(void)
 {
+       kasan_mmu_init();
+
        kasan_remap_early_shadow_ro();
 
        clear_page(kasan_early_shadow_page);