1{
2	"dead code: start",
3	.insns = {
4	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
5	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
6	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
7	BPF_MOV64_IMM(BPF_REG_0, 7),
8	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, -4),
9	BPF_EXIT_INSN(),
10	},
11	.errstr_unpriv = "R9 !read_ok",
12	.result_unpriv = REJECT,
13	.result = ACCEPT,
14	.retval = 7,
15},
16{
17	"dead code: mid 1",
18	.insns = {
19	BPF_MOV64_IMM(BPF_REG_0, 7),
20	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
21	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 0),
22	BPF_EXIT_INSN(),
23	},
24	.result = ACCEPT,
25	.retval = 7,
26},
27{
28	"dead code: mid 2",
29	.insns = {
30	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
31	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 4),
32	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
33	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
34	BPF_MOV64_IMM(BPF_REG_0, 7),
35	BPF_EXIT_INSN(),
36	BPF_MOV64_IMM(BPF_REG_0, 1),
37	BPF_EXIT_INSN(),
38	},
39	.result = ACCEPT,
40	.retval = 1,
41},
42{
43	"dead code: end 1",
44	.insns = {
45	BPF_MOV64_IMM(BPF_REG_0, 7),
46	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
47	BPF_EXIT_INSN(),
48	BPF_EXIT_INSN(),
49	},
50	.result = ACCEPT,
51	.retval = 7,
52},
53{
54	"dead code: end 2",
55	.insns = {
56	BPF_MOV64_IMM(BPF_REG_0, 7),
57	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
58	BPF_EXIT_INSN(),
59	BPF_MOV64_IMM(BPF_REG_0, 12),
60	BPF_EXIT_INSN(),
61	},
62	.result = ACCEPT,
63	.retval = 7,
64},
65{
66	"dead code: end 3",
67	.insns = {
68	BPF_MOV64_IMM(BPF_REG_0, 7),
69	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
70	BPF_EXIT_INSN(),
71	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
72	BPF_JMP_IMM(BPF_JA, 0, 0, 1),
73	BPF_MOV64_IMM(BPF_REG_0, 12),
74	BPF_JMP_IMM(BPF_JA, 0, 0, -5),
75	},
76	.result = ACCEPT,
77	.retval = 7,
78},
79{
80	"dead code: tail of main + func",
81	.insns = {
82	BPF_MOV64_IMM(BPF_REG_0, 7),
83	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
84	BPF_EXIT_INSN(),
85	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
86	BPF_EXIT_INSN(),
87	BPF_MOV64_IMM(BPF_REG_0, 12),
88	BPF_EXIT_INSN(),
89	},
90	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
91	.result_unpriv = REJECT,
92	.result = ACCEPT,
93	.retval = 7,
94},
95{
96	"dead code: tail of main + two functions",
97	.insns = {
98	BPF_MOV64_IMM(BPF_REG_0, 7),
99	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
100	BPF_EXIT_INSN(),
101	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
102	BPF_EXIT_INSN(),
103	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
104	BPF_EXIT_INSN(),
105	BPF_MOV64_IMM(BPF_REG_0, 12),
106	BPF_EXIT_INSN(),
107	},
108	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
109	.result_unpriv = REJECT,
110	.result = ACCEPT,
111	.retval = 7,
112},
113{
114	"dead code: function in the middle and mid of another func",
115	.insns = {
116	BPF_MOV64_IMM(BPF_REG_1, 7),
117	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 3),
118	BPF_EXIT_INSN(),
119	BPF_MOV64_IMM(BPF_REG_0, 12),
120	BPF_EXIT_INSN(),
121	BPF_MOV64_IMM(BPF_REG_0, 7),
122	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 7, 1),
123	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -5),
124	BPF_EXIT_INSN(),
125	},
126	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
127	.result_unpriv = REJECT,
128	.result = ACCEPT,
129	.retval = 7,
130},
131{
132	"dead code: middle of main before call",
133	.insns = {
134	BPF_MOV64_IMM(BPF_REG_1, 2),
135	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 2, 1),
136	BPF_MOV64_IMM(BPF_REG_1, 5),
137	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
138	BPF_EXIT_INSN(),
139	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
140	BPF_EXIT_INSN(),
141	},
142	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
143	.result_unpriv = REJECT,
144	.result = ACCEPT,
145	.retval = 2,
146},
147{
148	"dead code: start of a function",
149	.insns = {
150	BPF_MOV64_IMM(BPF_REG_1, 2),
151	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
152	BPF_EXIT_INSN(),
153	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
154	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
155	BPF_EXIT_INSN(),
156	},
157	.errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
158	.result_unpriv = REJECT,
159	.result = ACCEPT,
160	.retval = 2,
161},
162{
163	"dead code: zero extension",
164	.insns = {
165	BPF_MOV64_IMM(BPF_REG_0, 0),
166	BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),
167	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
168	BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -4),
169	BPF_EXIT_INSN(),
170	},
171	.result = ACCEPT,
172	.retval = 0,
173},
174