| { |
| "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, uprobe, and struct_ops programs can be sleepable", |
| .flags = BPF_F_SLEEPABLE, |
| .runs = -1, |
| }, |