X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=kernel%2Ffork.c;h=9796897560ab18ae96ef0979076bfed083204a7e;hb=d615b5416f8a1afeb82d13b238f8152c572d59c0;hp=834af51ed39792a9cb07bb192b92d9c4e6a39e6e;hpb=bee7fbc38579ba86948689107518c855247d0b49;p=linux-2.6-microblaze.git diff --git a/kernel/fork.c b/kernel/fork.c index 834af51ed397..9796897560ab 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -286,11 +286,13 @@ static int alloc_thread_stack_node(struct task_struct *tsk, int node) if (!s) continue; - /* Mark stack accessible for KASAN. */ + /* Reset stack metadata. */ kasan_unpoison_range(s->addr, THREAD_SIZE); + stack = kasan_reset_tag(s->addr); + /* Clear stale pointers from reused stack. */ - memset(s->addr, 0, THREAD_SIZE); + memset(stack, 0, THREAD_SIZE); if (memcg_charge_kernel_stack(s)) { vfree(s->addr); @@ -298,7 +300,7 @@ static int alloc_thread_stack_node(struct task_struct *tsk, int node) } tsk->stack_vm_area = s; - tsk->stack = s->addr; + tsk->stack = stack; return 0; } @@ -326,6 +328,7 @@ static int alloc_thread_stack_node(struct task_struct *tsk, int node) * so cache the vm_struct. */ tsk->stack_vm_area = vm; + stack = kasan_reset_tag(stack); tsk->stack = stack; return 0; }