lkml.org 
[lkml]   [2021]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v2 1/4] arm64: kasan: don't populate vmalloc area for CONFIG_KASAN_VMALLOC
    On Sat, 9 Jan 2021 at 11:33, Lecopzer Chen <lecopzer@gmail.com> wrote:
    >
    > Linux support KAsan for VMALLOC since commit 3c5c3cfb9ef4da9
    > ("kasan: support backing vmalloc space with real shadow memory")
    >
    > Like how the MODULES_VADDR does now, just not to early populate
    > the VMALLOC_START between VMALLOC_END.
    > similarly, the kernel code mapping is now in the VMALLOC area and
    > should keep these area populated.
    >
    > Signed-off-by: Lecopzer Chen <lecopzer.chen@mediatek.com>


    This commit log text is a bit hard to follow. You are saying that the
    vmalloc region is *not* backed with zero shadow or any default mapping
    at all, right, and everything gets allocated on demand, just like is
    the case for modules?

    > ---
    > arch/arm64/mm/kasan_init.c | 23 ++++++++++++++++++-----
    > 1 file changed, 18 insertions(+), 5 deletions(-)
    >
    > diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c
    > index d8e66c78440e..39b218a64279 100644
    > --- a/arch/arm64/mm/kasan_init.c
    > +++ b/arch/arm64/mm/kasan_init.c
    > @@ -214,6 +214,7 @@ static void __init kasan_init_shadow(void)
    > {
    > u64 kimg_shadow_start, kimg_shadow_end;
    > u64 mod_shadow_start, mod_shadow_end;
    > + u64 vmalloc_shadow_start, vmalloc_shadow_end;
    > phys_addr_t pa_start, pa_end;
    > u64 i;
    >
    > @@ -223,6 +224,9 @@ static void __init kasan_init_shadow(void)
    > mod_shadow_start = (u64)kasan_mem_to_shadow((void *)MODULES_VADDR);
    > mod_shadow_end = (u64)kasan_mem_to_shadow((void *)MODULES_END);
    >
    > + vmalloc_shadow_start = (u64)kasan_mem_to_shadow((void *)VMALLOC_START);
    > + vmalloc_shadow_end = (u64)kasan_mem_to_shadow((void *)VMALLOC_END);
    > +


    This and the below seems overly complicated, given that VMALLOC_START
    == MODULES_END. Can we simplify this?

    > /*
    > * We are going to perform proper setup of shadow memory.
    > * At first we should unmap early shadow (clear_pgds() call below).
    > @@ -241,12 +245,21 @@ static void __init kasan_init_shadow(void)
    >
    > kasan_populate_early_shadow(kasan_mem_to_shadow((void *)PAGE_END),
    > (void *)mod_shadow_start);
    > - kasan_populate_early_shadow((void *)kimg_shadow_end,
    > - (void *)KASAN_SHADOW_END);
    > + if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
    > + kasan_populate_early_shadow((void *)vmalloc_shadow_end,
    > + (void *)KASAN_SHADOW_END);
    > + if (vmalloc_shadow_start > mod_shadow_end)
    > + kasan_populate_early_shadow((void *)mod_shadow_end,
    > + (void *)vmalloc_shadow_start);
    > +
    > + } else {
    > + kasan_populate_early_shadow((void *)kimg_shadow_end,
    > + (void *)KASAN_SHADOW_END);
    > + if (kimg_shadow_start > mod_shadow_end)
    > + kasan_populate_early_shadow((void *)mod_shadow_end,
    > + (void *)kimg_shadow_start);
    > + }
    >
    > - if (kimg_shadow_start > mod_shadow_end)
    > - kasan_populate_early_shadow((void *)mod_shadow_end,
    > - (void *)kimg_shadow_start);
    >
    > for_each_mem_range(i, &pa_start, &pa_end) {
    > void *start = (void *)__phys_to_virt(pa_start);
    > --
    > 2.25.1
    >

    \
     
     \ /
      Last update: 2021-02-03 19:40    [W:4.376 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site