| .TH inject 8 "2018-03-16" "USER COMMANDS" |
| |
| |
| .SH NAME |
| inject \- injects appropriate error into function if input call chain and |
| predicates are satisfied. Uses Linux eBPF/bcc. |
| |
| |
| .SH SYNOPSIS |
| .B inject -h [-I header] [-P probability] [-v] [-c count] <mode> <spec> |
| |
| |
| .SH DESCRIPTION |
| inject injects errors into specified kernel functionality when a given call |
| chain and associated predicates are satisfied. |
| |
| WARNING: This tool injects failures into key kernel functions and may crash the |
| kernel. You should know what you're doing if you're using this tool. |
| |
| This makes use of a Linux 4.16 feature (bpf_override_return()) |
| |
| Since this uses BPF, only the root user can use this tool. |
| |
| |
| .SH OPTIONS |
| .TP |
| \-h |
| Print usage message. |
| .TP |
| \-v |
| Display the generated BPF program, for debugging or modification. |
| .TP |
| \-I header |
| Necessary headers to be included. |
| .TP |
| \-P probability |
| Optional probability of failure, default 1. |
| .TP |
| \-c count |
| Number of errors to inject before stopping, default never stops. |
| |
| |
| .SH MODE |
| |
| .TP |
| \fBkmalloc\fR |
| Make the following function indicate failure |
| .RS 14 |
| int should_failslab(struct kmem_cache *s, gfp_t gfpflags) |
| .RE |
| |
| .TP |
| \fBbio\fR |
| Make the following function indicate failure |
| .RS 14 |
| int should_fail_bio(struct bio *bio) |
| .RE |
| |
| .TP |
| \fBalloc_page\fR |
| Make the following function indicate failure |
| .RS 14 |
| bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order) |
| .RE |
| |
| |
| .SH SPEC |
| .B FUNCTION([ARGS])[(TEST)] [=> ...] |
| |
| A list of predicates separated by "=>". A predicate is a function signature |
| (name and arguments) in a call stack and a test on the function's arguments. |
| |
| Missing predicates are implicitly true. Missing tests are implicitly true. |
| Specifying the function arguments is optional if the test does not use them. |
| If the error injection function is not listed as the first predicate, it is |
| implicitly added. |
| |
| Functions are listed in the reverse order that they are called, ie. if a() |
| calls b(), the spec would be "b() => a()". |
| |
| |
| .SH REQUIREMENTS |
| CONFIG_BPF, CONFIG_BPF_KPROBE_OVERRIDE, bcc |
| |
| |
| .SH EXAMPLES |
| .EX |
| inject kmalloc -v 'SyS_mount()' |
| .EE |
| |
| .EX |
| inject kmalloc -v 'mount_subtree() => btrfs_mount()' |
| .EE |
| |
| .EX |
| inject -P 0.5 -c 100 alloc_page "should_fail_alloc_page(gfp_t gfp_mask, unsigned int order) (order == 1) => qlge_refill_bq()" |
| .EE |
| |
| Please see the output of '-h' and tools/inject_example.txt for more examples. |
| |
| |
| .SH SOURCE |
| This is from bcc. |
| .IP |
| https://github.com/iovisor/bcc |
| .PP |
| Also look in the bcc distribution for a companion _examples.txt file containing |
| example usage, output, and commentary for this tool. |
| |
| |
| .SH OS |
| Linux |
| |
| |
| .SH STABILITY |
| Unstable - in development. |
| |
| |
| .SH AUTHOR |
| Howard McLauchlan |