Hi Josef and Alexei, Here are the 2nd version of patches to moving error injection table from kprobes. In this series I did a small fixes and add function-based fault injection.
Here is the previous version: https://lkml.org/lkml/2017/12/22/554 There are 2 main reasons why I separate it from kprobes. - kprobes users can modify execution path not only at error-injection whitelist functions but also other functions. I don't like to suggest user that such limitation is from kprobes itself. - This error injection information is also useful for ftrace (function-hook) and livepatch. It should not be limited by CONFIG_KPROBES. So I introduced CONFIG_FUNCTION_ERROR_INJECTION for this feature. Also CONFIG_FAIL_FUNCTION is added, which provides function-based error injection interface via debugfs following fault-injection framework. See [4/4]. Any thoughts? BTW, I think we should add an error-range description in ALLOW_ERROR_INJECTION() macro. If user sets a success return value and override it by mistake, caller must break data or cause kernel panic. Thank you, --- Masami Hiramatsu (4): tracing/kprobe: bpf: Check error injectable event is on function entry tracing/kprobe: bpf: Compare instruction pointer with original one error-injection: Separate error-injection from kprobe error-injection: Support fault injection framework Documentation/fault-injection/fault-injection.txt | 5 + arch/Kconfig | 2 arch/x86/Kconfig | 2 arch/x86/include/asm/error-injection.h | 12 + arch/x86/kernel/kprobes/ftrace.c | 14 - arch/x86/lib/Makefile | 2 arch/x86/lib/error-inject.c | 19 ++ fs/btrfs/disk-io.c | 2 fs/btrfs/free-space-cache.c | 2 include/asm-generic/error-injection.h | 20 ++ include/asm-generic/vmlinux.lds.h | 14 + include/linux/bpf.h | 12 - include/linux/error-injection.h | 21 ++ include/linux/kprobes.h | 1 include/linux/module.h | 6 - kernel/Makefile | 1 kernel/fail_function.c | 169 ++++++++++++++++++ kernel/kprobes.c | 163 ----------------- kernel/module.c | 8 - kernel/trace/Kconfig | 4 kernel/trace/bpf_trace.c | 9 - kernel/trace/trace_kprobe.c | 32 +-- kernel/trace/trace_probe.h | 12 + lib/Kconfig.debug | 14 + lib/Makefile | 1 lib/error-inject.c | 198 +++++++++++++++++++++ 26 files changed, 506 insertions(+), 239 deletions(-) create mode 100644 arch/x86/include/asm/error-injection.h create mode 100644 arch/x86/lib/error-inject.c create mode 100644 include/asm-generic/error-injection.h create mode 100644 include/linux/error-injection.h create mode 100644 kernel/fail_function.c create mode 100644 lib/error-inject.c -- Masami Hiramatsu (Linaro)