xref: /linux/tools/testing/selftests/bpf/verifier/jump.c (revision 0526b56cbc3c489642bd6a5fe4b718dea7ef0ee8)
1 {
2 	"jump test 1",
3 	.insns = {
4 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
5 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -8),
6 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1),
7 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 0),
8 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 1),
9 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -16, 1),
10 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 2, 1),
11 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 2),
12 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 3, 1),
13 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -16, 3),
14 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 4, 1),
15 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 4),
16 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 5, 1),
17 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -32, 5),
18 	BPF_MOV64_IMM(BPF_REG_0, 0),
19 	BPF_EXIT_INSN(),
20 	},
21 	.errstr_unpriv = "R1 pointer comparison",
22 	.result_unpriv = REJECT,
23 	.result = ACCEPT,
24 },
25 {
26 	"jump test 2",
27 	.insns = {
28 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
29 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 2),
30 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 0),
31 	BPF_JMP_IMM(BPF_JA, 0, 0, 14),
32 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 2),
33 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -16, 0),
34 	BPF_JMP_IMM(BPF_JA, 0, 0, 11),
35 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 2, 2),
36 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -32, 0),
37 	BPF_JMP_IMM(BPF_JA, 0, 0, 8),
38 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 3, 2),
39 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -40, 0),
40 	BPF_JMP_IMM(BPF_JA, 0, 0, 5),
41 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 4, 2),
42 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -48, 0),
43 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
44 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 5, 1),
45 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -56, 0),
46 	BPF_MOV64_IMM(BPF_REG_0, 0),
47 	BPF_EXIT_INSN(),
48 	},
49 	.errstr_unpriv = "R1 pointer comparison",
50 	.result_unpriv = REJECT,
51 	.result = ACCEPT,
52 },
53 {
54 	"jump test 3",
55 	.insns = {
56 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
57 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 3),
58 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 0),
59 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
60 	BPF_JMP_IMM(BPF_JA, 0, 0, 19),
61 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 3),
62 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -16, 0),
63 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -16),
64 	BPF_JMP_IMM(BPF_JA, 0, 0, 15),
65 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 2, 3),
66 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -32, 0),
67 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -32),
68 	BPF_JMP_IMM(BPF_JA, 0, 0, 11),
69 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 3, 3),
70 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -40, 0),
71 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -40),
72 	BPF_JMP_IMM(BPF_JA, 0, 0, 7),
73 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 4, 3),
74 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -48, 0),
75 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -48),
76 	BPF_JMP_IMM(BPF_JA, 0, 0, 3),
77 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 5, 0),
78 	BPF_ST_MEM(BPF_DW, BPF_REG_2, -56, 0),
79 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -56),
80 	BPF_LD_MAP_FD(BPF_REG_1, 0),
81 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_delete_elem),
82 	BPF_EXIT_INSN(),
83 	},
84 	.fixup_map_hash_8b = { 24 },
85 	.errstr_unpriv = "R1 pointer comparison",
86 	.result_unpriv = REJECT,
87 	.result = ACCEPT,
88 	.retval = -ENOENT,
89 },
90 {
91 	"jump test 4",
92 	.insns = {
93 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
94 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
95 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
96 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
97 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
98 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
99 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
100 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
101 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
102 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
103 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
104 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
105 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
106 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
107 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
108 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
109 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
110 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
111 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
112 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
113 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
114 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
115 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
116 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
117 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
118 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
119 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
120 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
121 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
122 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
123 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
124 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
125 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1),
126 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2),
127 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3),
128 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4),
129 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 0),
130 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 0),
131 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 0),
132 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 0),
133 	BPF_MOV64_IMM(BPF_REG_0, 0),
134 	BPF_EXIT_INSN(),
135 	},
136 	.errstr_unpriv = "R1 pointer comparison",
137 	.result_unpriv = REJECT,
138 	.result = ACCEPT,
139 },
140 {
141 	"jump test 5",
142 	.insns = {
143 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
144 	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
145 	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
146 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
147 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
148 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
149 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
150 	BPF_MOV64_IMM(BPF_REG_0, 0),
151 	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
152 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
153 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
154 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
155 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
156 	BPF_MOV64_IMM(BPF_REG_0, 0),
157 	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
158 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
159 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
160 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
161 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
162 	BPF_MOV64_IMM(BPF_REG_0, 0),
163 	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
164 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
165 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
166 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
167 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
168 	BPF_MOV64_IMM(BPF_REG_0, 0),
169 	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
170 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
171 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
172 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
173 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
174 	BPF_MOV64_IMM(BPF_REG_0, 0),
175 	BPF_EXIT_INSN(),
176 	},
177 	.errstr_unpriv = "R1 pointer comparison",
178 	.result_unpriv = REJECT,
179 	.result = ACCEPT,
180 },
181 {
182 	"jump test 6",
183 	.insns = {
184 	BPF_MOV64_IMM(BPF_REG_0, 1),
185 	BPF_MOV64_IMM(BPF_REG_1, 2),
186 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
187 	BPF_MOV64_IMM(BPF_REG_0, 2),
188 	BPF_EXIT_INSN(),
189 	BPF_JMP_REG(BPF_JNE, BPF_REG_0, BPF_REG_1, 16),
190 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
191 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
192 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
193 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
194 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
195 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
196 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
197 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
198 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
199 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
200 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
201 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
202 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
203 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
204 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
205 	BPF_JMP_IMM(BPF_JA, 0, 0, 0),
206 	BPF_JMP_IMM(BPF_JA, 0, 0, -20),
207 	},
208 	.result = ACCEPT,
209 	.retval = 2,
210 },
211 {
212 	"jump test 7",
213 	.insns = {
214 	BPF_MOV64_IMM(BPF_REG_0, 1),
215 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
216 	BPF_MOV64_IMM(BPF_REG_0, 3),
217 	BPF_EXIT_INSN(),
218 	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 2, 16),
219 	BPF_MOV64_IMM(BPF_REG_0, 42),
220 	BPF_MOV64_IMM(BPF_REG_0, 42),
221 	BPF_MOV64_IMM(BPF_REG_0, 42),
222 	BPF_MOV64_IMM(BPF_REG_0, 42),
223 	BPF_MOV64_IMM(BPF_REG_0, 42),
224 	BPF_MOV64_IMM(BPF_REG_0, 42),
225 	BPF_MOV64_IMM(BPF_REG_0, 42),
226 	BPF_MOV64_IMM(BPF_REG_0, 42),
227 	BPF_MOV64_IMM(BPF_REG_0, 42),
228 	BPF_MOV64_IMM(BPF_REG_0, 42),
229 	BPF_MOV64_IMM(BPF_REG_0, 42),
230 	BPF_MOV64_IMM(BPF_REG_0, 42),
231 	BPF_MOV64_IMM(BPF_REG_0, 42),
232 	BPF_MOV64_IMM(BPF_REG_0, 42),
233 	BPF_MOV64_IMM(BPF_REG_0, 42),
234 	BPF_MOV64_IMM(BPF_REG_0, 42),
235 	BPF_JMP_IMM(BPF_JA, 0, 0, -20),
236 	},
237 	.result = ACCEPT,
238 	.retval = 3,
239 },
240 {
241 	"jump test 8",
242 	.insns = {
243 	BPF_MOV64_IMM(BPF_REG_0, 1),
244 	BPF_MOV64_IMM(BPF_REG_1, 2),
245 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
246 	BPF_MOV64_IMM(BPF_REG_0, 3),
247 	BPF_EXIT_INSN(),
248 	BPF_JMP_REG(BPF_JNE, BPF_REG_0, BPF_REG_1, 16),
249 	BPF_MOV64_IMM(BPF_REG_0, 42),
250 	BPF_MOV64_IMM(BPF_REG_0, 42),
251 	BPF_MOV64_IMM(BPF_REG_0, 42),
252 	BPF_MOV64_IMM(BPF_REG_0, 42),
253 	BPF_MOV64_IMM(BPF_REG_0, 42),
254 	BPF_MOV64_IMM(BPF_REG_0, 42),
255 	BPF_MOV64_IMM(BPF_REG_0, 42),
256 	BPF_MOV64_IMM(BPF_REG_0, 42),
257 	BPF_MOV64_IMM(BPF_REG_0, 42),
258 	BPF_MOV64_IMM(BPF_REG_0, 42),
259 	BPF_MOV64_IMM(BPF_REG_0, 42),
260 	BPF_MOV64_IMM(BPF_REG_0, 42),
261 	BPF_MOV64_IMM(BPF_REG_0, 42),
262 	BPF_MOV64_IMM(BPF_REG_0, 42),
263 	BPF_MOV64_IMM(BPF_REG_0, 42),
264 	BPF_MOV64_IMM(BPF_REG_0, 42),
265 	BPF_JMP_IMM(BPF_JA, 0, 0, -20),
266 	},
267 	.result = ACCEPT,
268 	.retval = 3,
269 },
270 {
271 	"jump/call test 9",
272 	.insns = {
273 	BPF_MOV64_IMM(BPF_REG_0, 1),
274 	BPF_JMP_IMM(BPF_JA, 0, 0, 2),
275 	BPF_MOV64_IMM(BPF_REG_0, 3),
276 	BPF_EXIT_INSN(),
277 	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 2, 16),
278 	BPF_MOV64_IMM(BPF_REG_0, 42),
279 	BPF_MOV64_IMM(BPF_REG_0, 42),
280 	BPF_MOV64_IMM(BPF_REG_0, 42),
281 	BPF_MOV64_IMM(BPF_REG_0, 42),
282 	BPF_MOV64_IMM(BPF_REG_0, 42),
283 	BPF_MOV64_IMM(BPF_REG_0, 42),
284 	BPF_MOV64_IMM(BPF_REG_0, 42),
285 	BPF_MOV64_IMM(BPF_REG_0, 42),
286 	BPF_MOV64_IMM(BPF_REG_0, 42),
287 	BPF_MOV64_IMM(BPF_REG_0, 42),
288 	BPF_MOV64_IMM(BPF_REG_0, 42),
289 	BPF_MOV64_IMM(BPF_REG_0, 42),
290 	BPF_MOV64_IMM(BPF_REG_0, 42),
291 	BPF_MOV64_IMM(BPF_REG_0, 42),
292 	BPF_MOV64_IMM(BPF_REG_0, 42),
293 	BPF_MOV64_IMM(BPF_REG_0, 42),
294 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -20),
295 	BPF_EXIT_INSN(),
296 	},
297 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
298 	.result = REJECT,
299 	.errstr = "jump out of range from insn 1 to 4",
300 },
301 {
302 	"jump/call test 10",
303 	.insns = {
304 	BPF_MOV64_IMM(BPF_REG_0, 1),
305 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 2),
306 	BPF_MOV64_IMM(BPF_REG_0, 3),
307 	BPF_EXIT_INSN(),
308 	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 2, 16),
309 	BPF_MOV64_IMM(BPF_REG_0, 42),
310 	BPF_MOV64_IMM(BPF_REG_0, 42),
311 	BPF_MOV64_IMM(BPF_REG_0, 42),
312 	BPF_MOV64_IMM(BPF_REG_0, 42),
313 	BPF_MOV64_IMM(BPF_REG_0, 42),
314 	BPF_MOV64_IMM(BPF_REG_0, 42),
315 	BPF_MOV64_IMM(BPF_REG_0, 42),
316 	BPF_MOV64_IMM(BPF_REG_0, 42),
317 	BPF_MOV64_IMM(BPF_REG_0, 42),
318 	BPF_MOV64_IMM(BPF_REG_0, 42),
319 	BPF_MOV64_IMM(BPF_REG_0, 42),
320 	BPF_MOV64_IMM(BPF_REG_0, 42),
321 	BPF_MOV64_IMM(BPF_REG_0, 42),
322 	BPF_MOV64_IMM(BPF_REG_0, 42),
323 	BPF_MOV64_IMM(BPF_REG_0, 42),
324 	BPF_MOV64_IMM(BPF_REG_0, 42),
325 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -20),
326 	BPF_EXIT_INSN(),
327 	},
328 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
329 	.result = REJECT,
330 	.errstr = "last insn is not an exit or jmp",
331 },
332 {
333 	"jump/call test 11",
334 	.insns = {
335 	BPF_MOV64_IMM(BPF_REG_0, 1),
336 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 4),
337 	BPF_MOV64_IMM(BPF_REG_0, 3),
338 	BPF_EXIT_INSN(),
339 	BPF_MOV64_IMM(BPF_REG_0, 3),
340 	BPF_EXIT_INSN(),
341 	BPF_MOV64_IMM(BPF_REG_0, 1),
342 	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 2, 26),
343 	BPF_MOV64_IMM(BPF_REG_0, 42),
344 	BPF_MOV64_IMM(BPF_REG_0, 42),
345 	BPF_MOV64_IMM(BPF_REG_0, 42),
346 	BPF_MOV64_IMM(BPF_REG_0, 42),
347 	BPF_MOV64_IMM(BPF_REG_0, 42),
348 	BPF_MOV64_IMM(BPF_REG_0, 42),
349 	BPF_MOV64_IMM(BPF_REG_0, 42),
350 	BPF_MOV64_IMM(BPF_REG_0, 42),
351 	BPF_MOV64_IMM(BPF_REG_0, 42),
352 	BPF_MOV64_IMM(BPF_REG_0, 42),
353 	BPF_MOV64_IMM(BPF_REG_0, 42),
354 	BPF_MOV64_IMM(BPF_REG_0, 42),
355 	BPF_MOV64_IMM(BPF_REG_0, 42),
356 	BPF_MOV64_IMM(BPF_REG_0, 42),
357 	BPF_MOV64_IMM(BPF_REG_0, 42),
358 	BPF_MOV64_IMM(BPF_REG_0, 42),
359 	BPF_MOV64_IMM(BPF_REG_0, 42),
360 	BPF_MOV64_IMM(BPF_REG_0, 42),
361 	BPF_MOV64_IMM(BPF_REG_0, 42),
362 	BPF_MOV64_IMM(BPF_REG_0, 42),
363 	BPF_MOV64_IMM(BPF_REG_0, 42),
364 	BPF_MOV64_IMM(BPF_REG_0, 42),
365 	BPF_MOV64_IMM(BPF_REG_0, 42),
366 	BPF_MOV64_IMM(BPF_REG_0, 42),
367 	BPF_MOV64_IMM(BPF_REG_0, 42),
368 	BPF_MOV64_IMM(BPF_REG_0, 42),
369 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -31),
370 	BPF_EXIT_INSN(),
371 	},
372 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
373 	.result = ACCEPT,
374 	.retval = 3,
375 },
376 {
377 	"jump & dead code elimination",
378 	.insns = {
379 	BPF_MOV64_IMM(BPF_REG_0, 1),
380 	BPF_MOV64_IMM(BPF_REG_3, 0),
381 	BPF_ALU64_IMM(BPF_NEG, BPF_REG_3, 0),
382 	BPF_ALU64_IMM(BPF_NEG, BPF_REG_3, 0),
383 	BPF_ALU64_IMM(BPF_OR, BPF_REG_3, 32767),
384 	BPF_JMP_IMM(BPF_JSGE, BPF_REG_3, 0, 1),
385 	BPF_EXIT_INSN(),
386 	BPF_JMP_IMM(BPF_JSLE, BPF_REG_3, 0x8000, 1),
387 	BPF_EXIT_INSN(),
388 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, -32767),
389 	BPF_MOV64_IMM(BPF_REG_0, 2),
390 	BPF_JMP_IMM(BPF_JLE, BPF_REG_3, 0, 1),
391 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
392 	BPF_EXIT_INSN(),
393 	},
394 	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
395 	.result = ACCEPT,
396 	.retval = 2,
397 },
398