lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 30 Oct 2020 17:31:42 -0400 From: Steven Rostedt <rostedt@...dmis.org> To: linux-kernel@...r.kernel.org Cc: Masami Hiramatsu <mhiramat@...nel.org>, Andrew Morton <akpm@...ux-foundation.org>, Peter Zijlstra <peterz@...radead.org>, Ingo Molnar <mingo@...nel.org>, Josh Poimboeuf <jpoimboe@...hat.com>, Jiri Kosina <jikos@...nel.org>, Miroslav Benes <mbenes@...e.cz>, Petr Mladek <pmladek@...e.com> Subject: [PATCH 00/11 v2] ftrace: Have callbacks handle their own recursion I found that having the ftrace infrastructure use its own trampoline to handle recursion and RCU by defaulte unless the ftrace_ops set the appropriate flags, was an issue that nobody set those flags. But then their callbacks would suffer from an unnecessary overhead instead of simply handling the recursion itself. This series makes it mandatory that ftrace callbacks handle recursion or set a flag asking ftrace to do it for it. It also creates helper functions to help these callbacks to have recursion protection. Changes since v1: - Reworded the paragraph that talks about the ftrace_ops default recursion in the change logs so that it makes more sense (recommend by Petr Mladek) - Rebased on fixes that will be sent upstream as soon as my testing is complete, that fixes the recursion logic. NMIs no longer trigger false recursion positives, and also logic to handle transitions between context that also causes false positives. These fixes are not part of this series, but will be added before these patches. - Added code to create a "recursed_functions" file in tracefs, that lists the functions that triggered recursion. This was how I detected the bugs from before. If you enable CONFIG_FTRACE_RECORD_RECURSION it will add this logic. If you also enable FTRACE_STARTUP_TEST, one of the tests triggers a recursion, and this will be shown in the file after boot up (to test if it actually works). # cat recursed_functions ftrace_ops_assist_func+0x84/0x160: trace_selftest_dynamic_test_func+0x0/0x10 Steven Rostedt (VMware) (11): ftrace: Move the recursion testing into global headers ftrace: Add ftrace_test_recursion_trylock() helper function ftrace: Optimize testing what context current is in pstore/ftrace: Add recursion protection to the ftrace callback kprobes/ftrace: Add recursion protection to the ftrace callback livepatch/ftrace: Add recursion protection to the ftrace callback livepatch: Trigger WARNING if livepatch function fails due to recursion perf/ftrace: Add recursion protection to the ftrace callback perf/ftrace: Check for rcu_is_watching() in callback function ftrace: Reverse what the RECURSION flag means in the ftrace_ops ftrace: Add recording of functions that caused recursion ---- Documentation/trace/ftrace-uses.rst | 84 +++++++++--- arch/csky/kernel/probes/ftrace.c | 12 +- arch/parisc/kernel/ftrace.c | 13 +- arch/powerpc/kernel/kprobes-ftrace.c | 11 +- arch/s390/kernel/ftrace.c | 13 +- arch/x86/kernel/kprobes/ftrace.c | 12 +- fs/pstore/ftrace.c | 6 + include/linux/ftrace.h | 13 +- include/linux/trace_recursion.h | 243 ++++++++++++++++++++++++++++++++++ kernel/livepatch/patch.c | 5 + kernel/trace/Kconfig | 25 ++++ kernel/trace/Makefile | 1 + kernel/trace/fgraph.c | 3 +- kernel/trace/ftrace.c | 24 ++-- kernel/trace/trace.h | 177 ------------------------- kernel/trace/trace_event_perf.c | 13 +- kernel/trace/trace_events.c | 1 - kernel/trace/trace_functions.c | 14 +- kernel/trace/trace_output.c | 6 +- kernel/trace/trace_output.h | 1 + kernel/trace/trace_recursion_record.c | 220 ++++++++++++++++++++++++++++++ kernel/trace/trace_selftest.c | 7 +- kernel/trace/trace_stack.c | 1 - 23 files changed, 656 insertions(+), 249 deletions(-) create mode 100644 include/linux/trace_recursion.h create mode 100644 kernel/trace/trace_recursion_record.c
Powered by blists - more mailing lists