lkml.org 
[lkml]   [2020]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 04/46] powerpc/kasan: Fix shadow pages allocation failure
    Date
    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@c-s.fr>
    ---
    arch/powerpc/include/asm/kasan.h | 2 --
    arch/powerpc/mm/init_32.c | 2 --
    arch/powerpc/mm/kasan/kasan_init_32.c | 4 +++-
    3 files changed, 3 insertions(+), 5 deletions(-)

    diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h
    index fc900937f653..4769bbf7173a 100644
    --- a/arch/powerpc/include/asm/kasan.h
    +++ b/arch/powerpc/include/asm/kasan.h
    @@ -27,12 +27,10 @@

    #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

    diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
    index 872df48ae41b..a6991ef8727d 100644
    --- a/arch/powerpc/mm/init_32.c
    +++ b/arch/powerpc/mm/init_32.c
    @@ -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 */
    diff --git a/arch/powerpc/mm/kasan/kasan_init_32.c b/arch/powerpc/mm/kasan/kasan_init_32.c
    index 60c2acdf73a7..c41e700153da 100644
    --- a/arch/powerpc/mm/kasan/kasan_init_32.c
    +++ b/arch/powerpc/mm/kasan/kasan_init_32.c
    @@ -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);
    --
    2.25.0
    \
     
     \ /
      Last update: 2020-03-16 13:39    [W:4.123 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site