mbox series

[v3,0/2] arm: kasan: support CONFIG_KASAN_VMALLOC

Message ID 20220227134726.27584-1-lecopzer.chen@mediatek.com (mailing list archive)
Headers show
Series arm: kasan: support CONFIG_KASAN_VMALLOC | expand

Message

Lecopzer Chen Feb. 27, 2022, 1:47 p.m. UTC
Since the framework of KASAN_VMALLOC is well-developed,
It's easy to support for ARM that simply not to map shadow of VMALLOC
area on kasan_init.

Since the virtual address of vmalloc for Arm is also between
MODULE_VADDR and 0x100000000 (ZONE_HIGHMEM), which means the shadow
address has already included between KASAN_SHADOW_START and
KASAN_SHADOW_END.
Thus we need to change nothing for memory map of Arm.

This can fix ARM_MODULE_PLTS with KASan, support KASan for higmem
and provide the first step to support CONFIG_VMAP_STACK with Arm.
    

Test on
1. Qemu with memory 2G and vmalloc=500M for 3G/1G mapping.
2. Qemu with memory 2G and vmalloc=500M for 3G/1G mapping + LPAE.
3. Qemu with memory 2G and vmalloc=500M for 2G/2G mapping.

v3:
    rebase on 5.17-rc5.
    Add simple doc for "arm: kasan: support CONFIG_KASAN_VMALLOC"
    Tweak commit message.

v2:
    rebase on 5.17-rc3


Lecopzer Chen (2):
  arm: kasan: support CONFIG_KASAN_VMALLOC
  arm: kconfig: fix MODULE_PLTS for KASAN with KASAN_VMALLOC

 arch/arm/Kconfig                 |  2 ++
 arch/arm/include/asm/kasan_def.h | 11 ++++++++++-
 arch/arm/mm/kasan_init.c         |  6 +++++-
 3 files changed, 17 insertions(+), 2 deletions(-)

Comments

Linus Walleij March 10, 2022, 11:08 p.m. UTC | #1
On Sun, Feb 27, 2022 at 2:48 PM Lecopzer Chen
<lecopzer.chen@mediatek.com> wrote:

> Since the framework of KASAN_VMALLOC is well-developed,
> It's easy to support for ARM that simply not to map shadow of VMALLOC
> area on kasan_init.
>
> Since the virtual address of vmalloc for Arm is also between
> MODULE_VADDR and 0x100000000 (ZONE_HIGHMEM), which means the shadow
> address has already included between KASAN_SHADOW_START and
> KASAN_SHADOW_END.
> Thus we need to change nothing for memory map of Arm.
>
> This can fix ARM_MODULE_PLTS with KASan, support KASan for higmem
> and provide the first step to support CONFIG_VMAP_STACK with Arm.
>
>
> Test on
> 1. Qemu with memory 2G and vmalloc=500M for 3G/1G mapping.
> 2. Qemu with memory 2G and vmalloc=500M for 3G/1G mapping + LPAE.
> 3. Qemu with memory 2G and vmalloc=500M for 2G/2G mapping.
>
> v3:
>     rebase on 5.17-rc5.
>     Add simple doc for "arm: kasan: support CONFIG_KASAN_VMALLOC"
>     Tweak commit message.

Ater testing this with my kernel-in-vmalloc patches and some hacks, I got
the kernel booting in the VMALLOC area with KASan enabled!
See:
https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/log/?h=kernel-in-vmalloc-v5.17-rc1

That's a pretty serious stress test. So:
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
for the series.

I suppose you could put this into Russell's patch tracker, it's gonna be
for kernel v5.19 by now but why stress. It seems I can fix up
kernel-in-vmalloc on top and submit that for v5.19 as well.

Yours,
Linus Walleij
Russell King (Oracle) March 11, 2022, 10:37 a.m. UTC | #2
On Fri, Mar 11, 2022 at 12:08:52AM +0100, Linus Walleij wrote:
> On Sun, Feb 27, 2022 at 2:48 PM Lecopzer Chen
> <lecopzer.chen@mediatek.com> wrote:
> 
> > Since the framework of KASAN_VMALLOC is well-developed,
> > It's easy to support for ARM that simply not to map shadow of VMALLOC
> > area on kasan_init.
> >
> > Since the virtual address of vmalloc for Arm is also between
> > MODULE_VADDR and 0x100000000 (ZONE_HIGHMEM), which means the shadow
> > address has already included between KASAN_SHADOW_START and
> > KASAN_SHADOW_END.
> > Thus we need to change nothing for memory map of Arm.
> >
> > This can fix ARM_MODULE_PLTS with KASan, support KASan for higmem
> > and provide the first step to support CONFIG_VMAP_STACK with Arm.
> >
> >
> > Test on
> > 1. Qemu with memory 2G and vmalloc=500M for 3G/1G mapping.
> > 2. Qemu with memory 2G and vmalloc=500M for 3G/1G mapping + LPAE.
> > 3. Qemu with memory 2G and vmalloc=500M for 2G/2G mapping.
> >
> > v3:
> >     rebase on 5.17-rc5.
> >     Add simple doc for "arm: kasan: support CONFIG_KASAN_VMALLOC"
> >     Tweak commit message.
> 
> Ater testing this with my kernel-in-vmalloc patches and some hacks, I got
> the kernel booting in the VMALLOC area with KASan enabled!
> See:
> https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/log/?h=kernel-in-vmalloc-v5.17-rc1
> 
> That's a pretty serious stress test. So:
> Tested-by: Linus Walleij <linus.walleij@linaro.org>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> for the series.
> 
> I suppose you could put this into Russell's patch tracker, it's gonna be
> for kernel v5.19 by now but why stress. It seems I can fix up
> kernel-in-vmalloc on top and submit that for v5.19 as well.

Ard's series already adds vmap stack support (which we've been doing
some last minute panic-debugging on to get it ready for this merge
window), but the above description makes it sound like this series is
a pre-requisit for that.

Is it? Will Ard's work cause further regressions because this series
isn't merged.

Please clarify - and urgently, there is not much time left before the
merge window opens.
Lecopzer Chen March 11, 2022, 10:52 a.m. UTC | #3
> On Fri, Mar 11, 2022 at 12:08:52AM +0100, Linus Walleij wrote:
> > On Sun, Feb 27, 2022 at 2:48 PM Lecopzer Chen
> > <lecopzer.chen@mediatek.com> wrote:
> > 
> > > Since the framework of KASAN_VMALLOC is well-developed,
> > > It's easy to support for ARM that simply not to map shadow of VMALLOC
> > > area on kasan_init.
> > >
> > > Since the virtual address of vmalloc for Arm is also between
> > > MODULE_VADDR and 0x100000000 (ZONE_HIGHMEM), which means the shadow
> > > address has already included between KASAN_SHADOW_START and
> > > KASAN_SHADOW_END.
> > > Thus we need to change nothing for memory map of Arm.
> > >
> > > This can fix ARM_MODULE_PLTS with KASan, support KASan for higmem
> > > and provide the first step to support CONFIG_VMAP_STACK with Arm.
> > >
> > >
> > > Test on
> > > 1. Qemu with memory 2G and vmalloc=500M for 3G/1G mapping.
> > > 2. Qemu with memory 2G and vmalloc=500M for 3G/1G mapping + LPAE.
> > > 3. Qemu with memory 2G and vmalloc=500M for 2G/2G mapping.
> > >
> > > v3:
> > >     rebase on 5.17-rc5.
> > >     Add simple doc for "arm: kasan: support CONFIG_KASAN_VMALLOC"
> > >     Tweak commit message.
> > 
> > Ater testing this with my kernel-in-vmalloc patches and some hacks, I got
> > the kernel booting in the VMALLOC area with KASan enabled!
> > See:
> > https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/log/?h=kernel-in-vmalloc-v5.17-rc1
> > 
> > That's a pretty serious stress test. So:
> > Tested-by: Linus Walleij <linus.walleij@linaro.org>
> > Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> > for the series.
> > 
> > I suppose you could put this into Russell's patch tracker, it's gonna be
> > for kernel v5.19 by now but why stress. It seems I can fix up
> > kernel-in-vmalloc on top and submit that for v5.19 as well.
> 
> Ard's series already adds vmap stack support (which we've been doing
> some last minute panic-debugging on to get it ready for this merge
> window), but the above description makes it sound like this series is
> a pre-requisit for that.
> 
> Is it? Will Ard's work cause further regressions because this series
> isn't merged.
> 
> Please clarify - and urgently, there is not much time left before the
> merge window opens.
> 

Sorry I didn't describe it clearly,

config VMAP_STACK
  default y
  bool "Use a virtually-mapped stack"
  depends on HAVE_ARCH_VMAP_STACK
  depends on !KASAN || KASAN_HW_TAGS || KASAN_VMALLOC

This means KASAN can support with VMAP_STACK=y



BRs,
Lecopzer