bpf/selftests: Add verifier tests for loading sleepable programs
authorJiri Olsa <jolsa@kernel.org>
Tue, 17 Jan 2023 22:37:05 +0000 (23:37 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 18 Jan 2023 00:56:04 +0000 (16:56 -0800)
Adding verifier tests for loading all types od allowed
sleepable programs plus reject for tp_btf type.

Acked-by: Song Liu <song@kernel.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/r/20230117223705.440975-2-jolsa@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/verifier/sleepable.c [new file with mode: 0644]

diff --git a/tools/testing/selftests/bpf/verifier/sleepable.c b/tools/testing/selftests/bpf/verifier/sleepable.c
new file mode 100644 (file)
index 0000000..bea0dae
--- /dev/null
@@ -0,0 +1,91 @@
+{
+       "sleepable fentry accept",
+       .insns = {
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_TRACING,
+       .expected_attach_type = BPF_TRACE_FENTRY,
+       .kfunc = "bpf_fentry_test1",
+       .result = ACCEPT,
+       .flags = BPF_F_SLEEPABLE,
+       .runs = -1,
+},
+{
+       "sleepable fexit accept",
+       .insns = {
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_TRACING,
+       .expected_attach_type = BPF_TRACE_FENTRY,
+       .kfunc = "bpf_fentry_test1",
+       .result = ACCEPT,
+       .flags = BPF_F_SLEEPABLE,
+       .runs = -1,
+},
+{
+       "sleepable fmod_ret accept",
+       .insns = {
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_TRACING,
+       .expected_attach_type = BPF_MODIFY_RETURN,
+       .kfunc = "bpf_fentry_test1",
+       .result = ACCEPT,
+       .flags = BPF_F_SLEEPABLE,
+       .runs = -1,
+},
+{
+       "sleepable iter accept",
+       .insns = {
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_TRACING,
+       .expected_attach_type = BPF_TRACE_ITER,
+       .kfunc = "task",
+       .result = ACCEPT,
+       .flags = BPF_F_SLEEPABLE,
+       .runs = -1,
+},
+{
+       "sleepable lsm accept",
+       .insns = {
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_LSM,
+       .kfunc = "bpf",
+       .expected_attach_type = BPF_LSM_MAC,
+       .result = ACCEPT,
+       .flags = BPF_F_SLEEPABLE,
+       .runs = -1,
+},
+{
+       "sleepable uprobe accept",
+       .insns = {
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_KPROBE,
+       .kfunc = "bpf_fentry_test1",
+       .result = ACCEPT,
+       .flags = BPF_F_SLEEPABLE,
+       .runs = -1,
+},
+{
+       "sleepable raw tracepoint reject",
+       .insns = {
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_TRACING,
+       .expected_attach_type = BPF_TRACE_RAW_TP,
+       .kfunc = "sched_switch",
+       .result = REJECT,
+       .errstr = "Only fentry/fexit/fmod_ret, lsm, iter and uprobe programs can be sleepable",
+       .flags = BPF_F_SLEEPABLE,
+       .runs = -1,
+},