| From ca182551857cc2c1e6a2b7f1e72090a137a15008 Mon Sep 17 00:00:00 2001 |
| From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> |
| Date: Fri, 13 Oct 2017 15:58:22 -0700 |
| Subject: kmemleak: clear stale pointers from task stacks |
| |
| From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> |
| |
| commit ca182551857cc2c1e6a2b7f1e72090a137a15008 upstream. |
| |
| Kmemleak considers any pointers on task stacks as references. This |
| patch clears newly allocated and reused vmap stacks. |
| |
| Link: http://lkml.kernel.org/r/150728990124.744199.8403409836394318684.stgit@buzz |
| Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> |
| Acked-by: Catalin Marinas <catalin.marinas@arm.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| [ Srivatsa: Backported to 4.9.y ] |
| Signed-off-by: Srivatsa S. Bhat <srivatsa@csail.mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| include/linux/thread_info.h | 2 +- |
| kernel/fork.c | 4 ++++ |
| 2 files changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/include/linux/thread_info.h |
| +++ b/include/linux/thread_info.h |
| @@ -59,7 +59,7 @@ extern long do_no_restart_syscall(struct |
| |
| #ifdef __KERNEL__ |
| |
| -#ifdef CONFIG_DEBUG_STACK_USAGE |
| +#if IS_ENABLED(CONFIG_DEBUG_STACK_USAGE) || IS_ENABLED(CONFIG_DEBUG_KMEMLEAK) |
| # define THREADINFO_GFP (GFP_KERNEL_ACCOUNT | __GFP_NOTRACK | \ |
| __GFP_ZERO) |
| #else |
| --- a/kernel/fork.c |
| +++ b/kernel/fork.c |
| @@ -184,6 +184,10 @@ static unsigned long *alloc_thread_stack |
| continue; |
| this_cpu_write(cached_stacks[i], NULL); |
| |
| +#ifdef CONFIG_DEBUG_KMEMLEAK |
| + /* Clear stale pointers from reused stack. */ |
| + memset(s->addr, 0, THREAD_SIZE); |
| +#endif |
| tsk->stack_vm_area = s; |
| local_irq_enable(); |
| return s->addr; |