diff options
author | Josef Bacik <jbacik@fb.com> | 2017-12-11 17:36:48 +0100 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2017-12-12 18:02:34 +0100 |
commit | 9802d86585db91655c7d1929a4f6bbe0952ea88e (patch) | |
tree | 53b334864518dd27b243eafc9ab510ac56ee3b74 /arch/x86/kernel/kprobes | |
parent | btrfs: make open_ctree error injectable (diff) | |
download | linux-9802d86585db91655c7d1929a4f6bbe0952ea88e.tar.xz linux-9802d86585db91655c7d1929a4f6bbe0952ea88e.zip |
bpf: add a bpf_override_function helper
Error injection is sloppy and very ad-hoc. BPF could fill this niche
perfectly with it's kprobe functionality. We could make sure errors are
only triggered in specific call chains that we care about with very
specific situations. Accomplish this with the bpf_override_funciton
helper. This will modify the probe'd callers return value to the
specified value and set the PC to an override function that simply
returns, bypassing the originally probed function. This gives us a nice
clean way to implement systematic error injection for all of our code
paths.
Acked-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'arch/x86/kernel/kprobes')
-rw-r--r-- | arch/x86/kernel/kprobes/ftrace.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/x86/kernel/kprobes/ftrace.c b/arch/x86/kernel/kprobes/ftrace.c index 8dc0161cec8f..1ea748d682fd 100644 --- a/arch/x86/kernel/kprobes/ftrace.c +++ b/arch/x86/kernel/kprobes/ftrace.c @@ -97,3 +97,17 @@ int arch_prepare_kprobe_ftrace(struct kprobe *p) p->ainsn.boostable = false; return 0; } + +asmlinkage void override_func(void); +asm( + ".type override_func, @function\n" + "override_func:\n" + " ret\n" + ".size override_func, .-override_func\n" +); + +void arch_ftrace_kprobe_override_function(struct pt_regs *regs) +{ + regs->ip = (unsigned long)&override_func; +} +NOKPROBE_SYMBOL(arch_ftrace_kprobe_override_function); |