History

fork: support VMAP_STACK with KASAN_VMALLOC

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

Daniel Axtens committed 6 years ago

Commit eafb1491 parent 06513912 files · +9 −4Browse files

Unified · Split

2 files
  1. arch/Kconfig +5 −4
  2. kernel/fork.c +4 −0
arch/Kconfig+5−4
@@ -843,16 +843,17 @@ config HAVE_ARCH_VMAP_STACK · 842 unmodified lines
843843 config VMAP_STACK
844844 default y
845845 bool "Use a virtually-mapped stack"
846− depends on HAVE_ARCH_VMAP_STACK && !KASAN
846+ depends on HAVE_ARCH_VMAP_STACK
847+ depends on !KASAN || KASAN_VMALLOC
847848 ---help---
848849 Enable this if you want the use virtually-mapped kernel stacks
849850 with guard pages. This causes kernel stack overflows to be
850851 caught immediately rather than causing difficult-to-diagnose
851852 corruption.
852853
853− This is presently incompatible with KASAN because KASAN expects
854− the stack to map directly to the KASAN shadow map using a formula
855− that is incorrect if the stack is in vmalloc space.
854+ To use this with KASAN, the architecture must support backing
855+ virtual mappings with real shadow memory, and KASAN_VMALLOC must
856+ be enabled.
856857
857858 config ARCH_OPTIONAL_KERNEL_RWX
858859 def_bool n
kernel/fork.c+4−0
@@ -93,6 +93,7 @@ · 92 unmodified lines
9393 #include <linux/livepatch.h>
9494 #include <linux/thread_info.h>
9595 #include <linux/stackleak.h>
96+#include <linux/kasan.h>
9697
9798 #include <asm/pgtable.h>
9899 #include <asm/pgalloc.h>
@@ -223,6 +224,9 @@ static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, int node) · 124 unmodified lines
223224 if (!s)
224225 continue;
225226
227+ /* Clear the KASAN shadow of the stack. */
228+ kasan_unpoison_shadow(s->addr, THREAD_SIZE);
229+
226230 /* Clear stale pointers from reused stack. */
227231 memset(s->addr, 0, THREAD_SIZE);
228232

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t