xref: /openbmc/linux/tools/testing/selftests/bpf/verifier/dead_code.c (revision 762f99f4f3cb41a775b5157dd761217beba65873)
148729226SJakub Kicinski {
248729226SJakub Kicinski 	"dead code: start",
348729226SJakub Kicinski 	.insns = {
448729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
548729226SJakub Kicinski 	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
648729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
748729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
848729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, -4),
948729226SJakub Kicinski 	BPF_EXIT_INSN(),
1048729226SJakub Kicinski 	},
11973377ffSDaniel Borkmann 	.errstr_unpriv = "R9 !read_ok",
12973377ffSDaniel Borkmann 	.result_unpriv = REJECT,
1348729226SJakub Kicinski 	.result = ACCEPT,
1448729226SJakub Kicinski 	.retval = 7,
1548729226SJakub Kicinski },
1648729226SJakub Kicinski {
1748729226SJakub Kicinski 	"dead code: mid 1",
1848729226SJakub Kicinski 	.insns = {
1948729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
2048729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
2148729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 0),
2248729226SJakub Kicinski 	BPF_EXIT_INSN(),
2348729226SJakub Kicinski 	},
2448729226SJakub Kicinski 	.result = ACCEPT,
2548729226SJakub Kicinski 	.retval = 7,
2648729226SJakub Kicinski },
2748729226SJakub Kicinski {
2848729226SJakub Kicinski 	"dead code: mid 2",
2948729226SJakub Kicinski 	.insns = {
3048729226SJakub Kicinski 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
3148729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 4),
3248729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
3348729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
3448729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
3548729226SJakub Kicinski 	BPF_EXIT_INSN(),
3648729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 1),
3748729226SJakub Kicinski 	BPF_EXIT_INSN(),
3848729226SJakub Kicinski 	},
3948729226SJakub Kicinski 	.result = ACCEPT,
4048729226SJakub Kicinski 	.retval = 1,
4148729226SJakub Kicinski },
4248729226SJakub Kicinski {
4348729226SJakub Kicinski 	"dead code: end 1",
4448729226SJakub Kicinski 	.insns = {
4548729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
4648729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
4748729226SJakub Kicinski 	BPF_EXIT_INSN(),
4848729226SJakub Kicinski 	BPF_EXIT_INSN(),
4948729226SJakub Kicinski 	},
5048729226SJakub Kicinski 	.result = ACCEPT,
5148729226SJakub Kicinski 	.retval = 7,
5248729226SJakub Kicinski },
5348729226SJakub Kicinski {
5448729226SJakub Kicinski 	"dead code: end 2",
5548729226SJakub Kicinski 	.insns = {
5648729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
5748729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
5848729226SJakub Kicinski 	BPF_EXIT_INSN(),
5948729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 12),
6048729226SJakub Kicinski 	BPF_EXIT_INSN(),
6148729226SJakub Kicinski 	},
6248729226SJakub Kicinski 	.result = ACCEPT,
6348729226SJakub Kicinski 	.retval = 7,
6448729226SJakub Kicinski },
6548729226SJakub Kicinski {
6648729226SJakub Kicinski 	"dead code: end 3",
6748729226SJakub Kicinski 	.insns = {
6848729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
6948729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
7048729226SJakub Kicinski 	BPF_EXIT_INSN(),
7148729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
7248729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JA, 0, 0, 1),
7348729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 12),
7448729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JA, 0, 0, -5),
7548729226SJakub Kicinski 	},
7648729226SJakub Kicinski 	.result = ACCEPT,
7748729226SJakub Kicinski 	.retval = 7,
7848729226SJakub Kicinski },
7948729226SJakub Kicinski {
8048729226SJakub Kicinski 	"dead code: tail of main + func",
8148729226SJakub Kicinski 	.insns = {
8248729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
8348729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
8448729226SJakub Kicinski 	BPF_EXIT_INSN(),
8548729226SJakub Kicinski 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
8648729226SJakub Kicinski 	BPF_EXIT_INSN(),
8748729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 12),
8848729226SJakub Kicinski 	BPF_EXIT_INSN(),
8948729226SJakub Kicinski 	},
90e6ac2450SMartin KaFai Lau 	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
9148729226SJakub Kicinski 	.result_unpriv = REJECT,
9248729226SJakub Kicinski 	.result = ACCEPT,
9348729226SJakub Kicinski 	.retval = 7,
9448729226SJakub Kicinski },
9548729226SJakub Kicinski {
9648729226SJakub Kicinski 	"dead code: tail of main + two functions",
9748729226SJakub Kicinski 	.insns = {
9848729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
9948729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
10048729226SJakub Kicinski 	BPF_EXIT_INSN(),
10148729226SJakub Kicinski 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
10248729226SJakub Kicinski 	BPF_EXIT_INSN(),
10348729226SJakub Kicinski 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
10448729226SJakub Kicinski 	BPF_EXIT_INSN(),
10548729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 12),
10648729226SJakub Kicinski 	BPF_EXIT_INSN(),
10748729226SJakub Kicinski 	},
108e6ac2450SMartin KaFai Lau 	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
10948729226SJakub Kicinski 	.result_unpriv = REJECT,
11048729226SJakub Kicinski 	.result = ACCEPT,
11148729226SJakub Kicinski 	.retval = 7,
11248729226SJakub Kicinski },
11348729226SJakub Kicinski {
11448729226SJakub Kicinski 	"dead code: function in the middle and mid of another func",
11548729226SJakub Kicinski 	.insns = {
11648729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_1, 7),
11748729226SJakub Kicinski 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 3),
11848729226SJakub Kicinski 	BPF_EXIT_INSN(),
11948729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 12),
12048729226SJakub Kicinski 	BPF_EXIT_INSN(),
12148729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_0, 7),
12248729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 7, 1),
12348729226SJakub Kicinski 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -5),
12448729226SJakub Kicinski 	BPF_EXIT_INSN(),
12548729226SJakub Kicinski 	},
126e6ac2450SMartin KaFai Lau 	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
12748729226SJakub Kicinski 	.result_unpriv = REJECT,
12848729226SJakub Kicinski 	.result = ACCEPT,
12948729226SJakub Kicinski 	.retval = 7,
13048729226SJakub Kicinski },
13148729226SJakub Kicinski {
13248729226SJakub Kicinski 	"dead code: middle of main before call",
13348729226SJakub Kicinski 	.insns = {
13448729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_1, 2),
13548729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 2, 1),
13648729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_1, 5),
13748729226SJakub Kicinski 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
13848729226SJakub Kicinski 	BPF_EXIT_INSN(),
13948729226SJakub Kicinski 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
14048729226SJakub Kicinski 	BPF_EXIT_INSN(),
14148729226SJakub Kicinski 	},
142e6ac2450SMartin KaFai Lau 	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
14348729226SJakub Kicinski 	.result_unpriv = REJECT,
14448729226SJakub Kicinski 	.result = ACCEPT,
14548729226SJakub Kicinski 	.retval = 2,
14648729226SJakub Kicinski },
14748729226SJakub Kicinski {
14848729226SJakub Kicinski 	"dead code: start of a function",
14948729226SJakub Kicinski 	.insns = {
15048729226SJakub Kicinski 	BPF_MOV64_IMM(BPF_REG_1, 2),
15148729226SJakub Kicinski 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
15248729226SJakub Kicinski 	BPF_EXIT_INSN(),
15348729226SJakub Kicinski 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
15448729226SJakub Kicinski 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
15548729226SJakub Kicinski 	BPF_EXIT_INSN(),
15648729226SJakub Kicinski 	},
157e6ac2450SMartin KaFai Lau 	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
15848729226SJakub Kicinski 	.result_unpriv = REJECT,
15948729226SJakub Kicinski 	.result = ACCEPT,
16048729226SJakub Kicinski 	.retval = 2,
16148729226SJakub Kicinski },
162*3776f351SIlya Leoshkevich {
163*3776f351SIlya Leoshkevich 	"dead code: zero extension",
164*3776f351SIlya Leoshkevich 	.insns = {
165*3776f351SIlya Leoshkevich 	BPF_MOV64_IMM(BPF_REG_0, 0),
166*3776f351SIlya Leoshkevich 	BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),
167*3776f351SIlya Leoshkevich 	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
168*3776f351SIlya Leoshkevich 	BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -4),
169*3776f351SIlya Leoshkevich 	BPF_EXIT_INSN(),
170*3776f351SIlya Leoshkevich 	},
171*3776f351SIlya Leoshkevich 	.result = ACCEPT,
172*3776f351SIlya Leoshkevich 	.retval = 0,
173*3776f351SIlya Leoshkevich },
174