History

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.

Josef Bacik committed 9 years ago

Commit dd0bb681 parent 549851215 files · +133 −9Browse files

Showing the changes to include/uapi/linux (1 of 15 files). Show all

Unified · Split

include/uapi/linux/bpf.h+6−1
@@ -677,6 +677,10 @@ union bpf_attr { · 676 unmodified lines
677677 * @buf: buf to fill
678678 * @buf_size: size of the buf
679679 * Return : 0 on success or negative error code
680+ *
681+ * int bpf_override_return(pt_regs, rc)
682+ * @pt_regs: pointer to struct pt_regs
683+ * @rc: the return value to set
680684 */
681685 #define __BPF_FUNC_MAPPER(FN) \
682686 FN(unspec), \
@@ -736,7 +740,8 @@ union bpf_attr { · 53 unmodified lines
736740 FN(xdp_adjust_meta), \
737741 FN(perf_event_read_value), \
738742 FN(perf_prog_read_value), \
739− FN(getsockopt),
743+ FN(getsockopt), \
744+ FN(override_return),
740745
741746 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
742747 * function eBPF program intends to call