linux/tools/testing/selftests/bpf/verifier/sleepable.c

{
	"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,
},