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
677 * @buf: buf to fill677 * @buf: buf to fill
678 * @buf_size: size of the buf678 * @buf_size: size of the buf
679 * Return : 0 on success or negative error code679 * 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
680 */684 */
681#define __BPF_FUNC_MAPPER(FN) \685#define __BPF_FUNC_MAPPER(FN) \
682 FN(unspec), \686 FN(unspec), \
@@ -736,7 +740,8 @@ union bpf_attr { · 53 unmodified lines
736 FN(xdp_adjust_meta), \740 FN(xdp_adjust_meta), \
737 FN(perf_event_read_value), \741 FN(perf_event_read_value), \
738 FN(perf_prog_read_value), \742 FN(perf_prog_read_value), \
739 FN(getsockopt),743 FN(getsockopt), \
744 FN(override_return),
740 745
741/* integer value in 'imm' field of BPF_CALL instruction selects which helper746/* integer value in 'imm' field of BPF_CALL instruction selects which helper
742 * function eBPF program intends to call747 * function eBPF program intends to call