summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Popov <alex.popov@linux.com>2018-11-12 16:08:48 -0500
committerKees Cook <keescook@chromium.org>2018-11-30 12:05:07 -0500
commitef1a8409348966f0b25ff97a170d6d0367710ea9 (patch)
tree63663fd58fdebb7c93b874af482d38c3c0358a43
parentccda4af0f4b92f7b4c308d3acc262f4a7e3affad (diff)
stackleak: Disable function tracing and kprobes for stackleak_erase()
The stackleak_erase() function is called on the trampoline stack at the end of syscall. This stack is not big enough for ftrace and kprobes operations, e.g. it can be exhausted if we use kprobe_events for stackleak_erase(). So let's disable function tracing and kprobes of stackleak_erase(). Reported-by: kernel test robot <lkp@intel.com> Fixes: 10e9ae9fabaf ("gcc-plugins: Add STACKLEAK plugin for tracking the kernel stack") Signed-off-by: Alexander Popov <alex.popov@linux.com> Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Kees Cook <keescook@chromium.org>
-rw-r--r--kernel/stackleak.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/stackleak.c b/kernel/stackleak.c
index e42892926244..08cb57eed389 100644
--- a/kernel/stackleak.c
+++ b/kernel/stackleak.c
@@ -11,6 +11,7 @@
11 */ 11 */
12 12
13#include <linux/stackleak.h> 13#include <linux/stackleak.h>
14#include <linux/kprobes.h>
14 15
15#ifdef CONFIG_STACKLEAK_RUNTIME_DISABLE 16#ifdef CONFIG_STACKLEAK_RUNTIME_DISABLE
16#include <linux/jump_label.h> 17#include <linux/jump_label.h>
@@ -47,7 +48,7 @@ int stack_erasing_sysctl(struct ctl_table *table, int write,
47#define skip_erasing() false 48#define skip_erasing() false
48#endif /* CONFIG_STACKLEAK_RUNTIME_DISABLE */ 49#endif /* CONFIG_STACKLEAK_RUNTIME_DISABLE */
49 50
50asmlinkage void stackleak_erase(void) 51asmlinkage void notrace stackleak_erase(void)
51{ 52{
52 /* It would be nice not to have 'kstack_ptr' and 'boundary' on stack */ 53 /* It would be nice not to have 'kstack_ptr' and 'boundary' on stack */
53 unsigned long kstack_ptr = current->lowest_stack; 54 unsigned long kstack_ptr = current->lowest_stack;
@@ -101,6 +102,7 @@ asmlinkage void stackleak_erase(void)
101 /* Reset the 'lowest_stack' value for the next syscall */ 102 /* Reset the 'lowest_stack' value for the next syscall */
102 current->lowest_stack = current_top_of_stack() - THREAD_SIZE/64; 103 current->lowest_stack = current_top_of_stack() - THREAD_SIZE/64;
103} 104}
105NOKPROBE_SYMBOL(stackleak_erase);
104 106
105void __used stackleak_track_stack(void) 107void __used stackleak_track_stack(void)
106{ 108{