On Thu, Jul 25, 2019 at 7:55 AM Daniel Axtens <dja@xxxxxxxxxx> wrote: > > Supporting VMAP_STACK with KASAN_VMALLOC is straightforward: > > - clear the shadow region of vmapped stacks when swapping them in > - tweak Kconfig to allow VMAP_STACK to be turned on with KASAN > > Signed-off-by: Daniel Axtens <dja@xxxxxxxxxx> Reviewed-by: Dmitry Vyukov <dvyukov@xxxxxxxxxx> > --- > arch/Kconfig | 9 +++++---- > kernel/fork.c | 4 ++++ > 2 files changed, 9 insertions(+), 4 deletions(-) > > diff --git a/arch/Kconfig b/arch/Kconfig > index a7b57dd42c26..e791196005e1 100644 > --- a/arch/Kconfig > +++ b/arch/Kconfig > @@ -825,16 +825,17 @@ config HAVE_ARCH_VMAP_STACK > config VMAP_STACK > default y > bool "Use a virtually-mapped stack" > - depends on HAVE_ARCH_VMAP_STACK && !KASAN > + depends on HAVE_ARCH_VMAP_STACK > + depends on !KASAN || KASAN_VMALLOC > ---help--- > Enable this if you want the use virtually-mapped kernel stacks > with guard pages. This causes kernel stack overflows to be > caught immediately rather than causing difficult-to-diagnose > corruption. > > - This is presently incompatible with KASAN because KASAN expects > - the stack to map directly to the KASAN shadow map using a formula > - that is incorrect if the stack is in vmalloc space. > + To use this with KASAN, the architecture must support backing > + virtual mappings with real shadow memory, and KASAN_VMALLOC must > + be enabled. > > config ARCH_OPTIONAL_KERNEL_RWX > def_bool n > diff --git a/kernel/fork.c b/kernel/fork.c > index d8ae0f1b4148..ce3150fe8ff2 100644 > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -94,6 +94,7 @@ > #include <linux/livepatch.h> > #include <linux/thread_info.h> > #include <linux/stackleak.h> > +#include <linux/kasan.h> > > #include <asm/pgtable.h> > #include <asm/pgalloc.h> > @@ -215,6 +216,9 @@ static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, int node) > if (!s) > continue; > > + /* Clear the KASAN shadow of the stack. */ > + kasan_unpoison_shadow(s->addr, THREAD_SIZE); > + > /* Clear stale pointers from reused stack. */ > memset(s->addr, 0, THREAD_SIZE); > > -- > 2.20.1 > > -- > You received this message because you are subscribed to the Google Groups "kasan-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to kasan-dev+unsubscribe@xxxxxxxxxxxxxxxx. > To view this discussion on the web visit https://groups.google.com/d/msgid/kasan-dev/20190725055503.19507-3-dja%40axtens.net.