Livepatch uses ftrace for redirection to new patched functions. It means that if ftrace is disabled, all live patched functions are disabled as well. Toggling global 'ftrace_enabled' sysctl thus affect it directly. It is not a problem per se, because only administrator can set sysctl values, but it still may be surprising.
Introduce PERMANENT ftrace_ops flag to amend this. If the FTRACE_OPS_FL_PERMANENT is set on any ftrace ops, the tracing cannot be disabled by disabling ftrace_enabled. Equally, a callback with the flag set cannot be registered if ftrace_enabled is disabled.
v2->v3: - ftrace_enabled explicitly set to true - selftest from Joe Lawrence (I just split it to two patches) - typo fix
v1->v2: - different logic, proposed by Joe Lawrence
Joe Lawrence (2): selftests/livepatch: Make dynamic debug setup and restore generic selftests/livepatch: Test interaction with ftrace_enabled
Miroslav Benes (1): ftrace: Introduce PERMANENT ftrace_ops flag
Documentation/trace/ftrace-uses.rst | 8 +++ Documentation/trace/ftrace.rst | 4 +- include/linux/ftrace.h | 3 + kernel/livepatch/patch.c | 3 +- kernel/trace/ftrace.c | 23 ++++++- tools/testing/selftests/livepatch/Makefile | 3 +- .../testing/selftests/livepatch/functions.sh | 34 +++++++--- .../selftests/livepatch/test-callbacks.sh | 2 +- .../selftests/livepatch/test-ftrace.sh | 65 +++++++++++++++++++ .../selftests/livepatch/test-livepatch.sh | 2 +- .../selftests/livepatch/test-shadow-vars.sh | 2 +- 11 files changed, 132 insertions(+), 17 deletions(-) create mode 100755 tools/testing/selftests/livepatch/test-ftrace.sh