treewide: remove redundant IS_ERR() before error code check
[linux/fpc-iii.git] / tools / testing / selftests / bpf / verifier / jmp32.c
blobbf0322eb53464d41bb6d38098f8d95fc2c2536a7
2 "jset32: BPF_K",
3 .insns = {
4 BPF_DIRECT_PKT_R2,
5 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
6 /* reg, high bits shouldn't be tested */
7 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, -2, 1),
8 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
9 BPF_EXIT_INSN(),
11 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, 1, 1),
12 BPF_EXIT_INSN(),
13 BPF_MOV64_IMM(BPF_REG_0, 2),
14 BPF_EXIT_INSN(),
16 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
17 .result = ACCEPT,
18 .runs = 3,
19 .retvals = {
20 { .retval = 0,
21 .data64 = { 1ULL << 63, }
23 { .retval = 2,
24 .data64 = { 1, }
26 { .retval = 2,
27 .data64 = { 1ULL << 63 | 1, }
30 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
33 "jset32: BPF_X",
34 .insns = {
35 BPF_DIRECT_PKT_R2,
36 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
37 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000000),
38 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
39 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
40 BPF_EXIT_INSN(),
42 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),
43 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
44 BPF_EXIT_INSN(),
45 BPF_MOV64_IMM(BPF_REG_0, 2),
46 BPF_EXIT_INSN(),
48 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
49 .result = ACCEPT,
50 .runs = 3,
51 .retvals = {
52 { .retval = 0,
53 .data64 = { 1ULL << 63, }
55 { .retval = 2,
56 .data64 = { 1, }
58 { .retval = 2,
59 .data64 = { 1ULL << 63 | 1, }
62 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
65 "jset32: min/max deduction",
66 .insns = {
67 BPF_RAND_UEXT_R7,
68 BPF_MOV64_IMM(BPF_REG_0, 0),
69 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, 0x10, 1),
70 BPF_EXIT_INSN(),
71 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, 0x10, 1),
72 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
73 BPF_EXIT_INSN(),
75 .result = ACCEPT,
78 "jeq32: BPF_K",
79 .insns = {
80 BPF_DIRECT_PKT_R2,
81 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
82 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_7, -1, 1),
83 BPF_EXIT_INSN(),
84 BPF_MOV64_IMM(BPF_REG_0, 2),
85 BPF_EXIT_INSN(),
87 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
88 .result = ACCEPT,
89 .runs = 2,
90 .retvals = {
91 { .retval = 0,
92 .data64 = { -2, }
94 { .retval = 2,
95 .data64 = { -1, }
98 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
101 "jeq32: BPF_X",
102 .insns = {
103 BPF_DIRECT_PKT_R2,
104 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
105 BPF_LD_IMM64(BPF_REG_8, 0x7000000000000001),
106 BPF_JMP32_REG(BPF_JEQ, BPF_REG_7, BPF_REG_8, 1),
107 BPF_EXIT_INSN(),
108 BPF_MOV64_IMM(BPF_REG_0, 2),
109 BPF_EXIT_INSN(),
111 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
112 .result = ACCEPT,
113 .runs = 3,
114 .retvals = {
115 { .retval = 0,
116 .data64 = { 2, }
118 { .retval = 2,
119 .data64 = { 1, }
121 { .retval = 2,
122 .data64 = { 1ULL << 63 | 1, }
125 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
128 "jeq32: min/max deduction",
129 .insns = {
130 BPF_RAND_UEXT_R7,
131 BPF_MOV64_IMM(BPF_REG_0, 0),
132 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_7, 0x10, 1),
133 BPF_EXIT_INSN(),
134 BPF_JMP32_IMM(BPF_JSGE, BPF_REG_7, 0xf, 1),
135 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
136 BPF_EXIT_INSN(),
138 .result = ACCEPT,
141 "jne32: BPF_K",
142 .insns = {
143 BPF_DIRECT_PKT_R2,
144 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
145 BPF_JMP32_IMM(BPF_JNE, BPF_REG_7, -1, 1),
146 BPF_EXIT_INSN(),
147 BPF_MOV64_IMM(BPF_REG_0, 2),
148 BPF_EXIT_INSN(),
150 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
151 .result = ACCEPT,
152 .runs = 2,
153 .retvals = {
154 { .retval = 2,
155 .data64 = { 1, }
157 { .retval = 0,
158 .data64 = { -1, }
161 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
164 "jne32: BPF_X",
165 .insns = {
166 BPF_DIRECT_PKT_R2,
167 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
168 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),
169 BPF_JMP32_REG(BPF_JNE, BPF_REG_7, BPF_REG_8, 1),
170 BPF_EXIT_INSN(),
171 BPF_MOV64_IMM(BPF_REG_0, 2),
172 BPF_EXIT_INSN(),
174 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
175 .result = ACCEPT,
176 .runs = 3,
177 .retvals = {
178 { .retval = 0,
179 .data64 = { 1, }
181 { .retval = 2,
182 .data64 = { 2, }
184 { .retval = 2,
185 .data64 = { 1ULL << 63 | 2, }
188 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
191 "jne32: min/max deduction",
192 .insns = {
193 BPF_RAND_UEXT_R7,
194 BPF_MOV64_IMM(BPF_REG_0, 0),
195 BPF_JMP32_IMM(BPF_JNE, BPF_REG_7, 0x10, 1),
196 BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0x10, 1),
197 BPF_EXIT_INSN(),
198 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
199 BPF_EXIT_INSN(),
201 .result = ACCEPT,
204 "jge32: BPF_K",
205 .insns = {
206 BPF_DIRECT_PKT_R2,
207 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
208 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, UINT_MAX - 1, 1),
209 BPF_EXIT_INSN(),
210 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
211 BPF_EXIT_INSN(),
213 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
214 .result = ACCEPT,
215 .runs = 3,
216 .retvals = {
217 { .retval = 2,
218 .data64 = { UINT_MAX, }
220 { .retval = 2,
221 .data64 = { UINT_MAX - 1, }
223 { .retval = 0,
224 .data64 = { 0, }
227 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
230 "jge32: BPF_X",
231 .insns = {
232 BPF_DIRECT_PKT_R2,
233 BPF_LD_IMM64(BPF_REG_8, UINT_MAX | 1ULL << 32),
234 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
235 BPF_JMP32_REG(BPF_JGE, BPF_REG_7, BPF_REG_8, 1),
236 BPF_EXIT_INSN(),
237 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
238 BPF_EXIT_INSN(),
240 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
241 .result = ACCEPT,
242 .runs = 3,
243 .retvals = {
244 { .retval = 2,
245 .data64 = { UINT_MAX, }
247 { .retval = 0,
248 .data64 = { INT_MAX, }
250 { .retval = 0,
251 .data64 = { (UINT_MAX - 1) | 2ULL << 32, }
254 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
257 "jge32: min/max deduction",
258 .insns = {
259 BPF_RAND_UEXT_R7,
260 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
261 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
262 BPF_JMP32_REG(BPF_JGE, BPF_REG_7, BPF_REG_8, 1),
263 BPF_EXIT_INSN(),
264 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, 0x7ffffff0, 1),
265 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
266 BPF_EXIT_INSN(),
268 .result = ACCEPT,
269 .retval = 2,
272 "jgt32: BPF_K",
273 .insns = {
274 BPF_DIRECT_PKT_R2,
275 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
276 BPF_JMP32_IMM(BPF_JGT, BPF_REG_7, UINT_MAX - 1, 1),
277 BPF_EXIT_INSN(),
278 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
279 BPF_EXIT_INSN(),
281 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
282 .result = ACCEPT,
283 .runs = 3,
284 .retvals = {
285 { .retval = 2,
286 .data64 = { UINT_MAX, }
288 { .retval = 0,
289 .data64 = { UINT_MAX - 1, }
291 { .retval = 0,
292 .data64 = { 0, }
295 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
298 "jgt32: BPF_X",
299 .insns = {
300 BPF_DIRECT_PKT_R2,
301 BPF_LD_IMM64(BPF_REG_8, (UINT_MAX - 1) | 1ULL << 32),
302 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
303 BPF_JMP32_REG(BPF_JGT, BPF_REG_7, BPF_REG_8, 1),
304 BPF_EXIT_INSN(),
305 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
306 BPF_EXIT_INSN(),
308 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
309 .result = ACCEPT,
310 .runs = 3,
311 .retvals = {
312 { .retval = 2,
313 .data64 = { UINT_MAX, }
315 { .retval = 0,
316 .data64 = { UINT_MAX - 1, }
318 { .retval = 0,
319 .data64 = { (UINT_MAX - 1) | 2ULL << 32, }
322 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
325 "jgt32: min/max deduction",
326 .insns = {
327 BPF_RAND_UEXT_R7,
328 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
329 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
330 BPF_JMP32_REG(BPF_JGT, BPF_REG_7, BPF_REG_8, 1),
331 BPF_EXIT_INSN(),
332 BPF_JMP_IMM(BPF_JGT, BPF_REG_7, 0x7ffffff0, 1),
333 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
334 BPF_EXIT_INSN(),
336 .result = ACCEPT,
337 .retval = 2,
340 "jle32: BPF_K",
341 .insns = {
342 BPF_DIRECT_PKT_R2,
343 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
344 BPF_JMP32_IMM(BPF_JLE, BPF_REG_7, INT_MAX, 1),
345 BPF_EXIT_INSN(),
346 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
347 BPF_EXIT_INSN(),
349 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
350 .result = ACCEPT,
351 .runs = 3,
352 .retvals = {
353 { .retval = 2,
354 .data64 = { INT_MAX - 1, }
356 { .retval = 0,
357 .data64 = { UINT_MAX, }
359 { .retval = 2,
360 .data64 = { INT_MAX, }
363 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
366 "jle32: BPF_X",
367 .insns = {
368 BPF_DIRECT_PKT_R2,
369 BPF_LD_IMM64(BPF_REG_8, (INT_MAX - 1) | 2ULL << 32),
370 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
371 BPF_JMP32_REG(BPF_JLE, BPF_REG_7, BPF_REG_8, 1),
372 BPF_EXIT_INSN(),
373 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
374 BPF_EXIT_INSN(),
376 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
377 .result = ACCEPT,
378 .runs = 3,
379 .retvals = {
380 { .retval = 0,
381 .data64 = { INT_MAX | 1ULL << 32, }
383 { .retval = 2,
384 .data64 = { INT_MAX - 2, }
386 { .retval = 0,
387 .data64 = { UINT_MAX, }
390 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
393 "jle32: min/max deduction",
394 .insns = {
395 BPF_RAND_UEXT_R7,
396 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
397 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
398 BPF_JMP32_REG(BPF_JLE, BPF_REG_7, BPF_REG_8, 1),
399 BPF_EXIT_INSN(),
400 BPF_JMP32_IMM(BPF_JLE, BPF_REG_7, 0x7ffffff0, 1),
401 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
402 BPF_EXIT_INSN(),
404 .result = ACCEPT,
405 .retval = 2,
408 "jlt32: BPF_K",
409 .insns = {
410 BPF_DIRECT_PKT_R2,
411 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
412 BPF_JMP32_IMM(BPF_JLT, BPF_REG_7, INT_MAX, 1),
413 BPF_EXIT_INSN(),
414 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
415 BPF_EXIT_INSN(),
417 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
418 .result = ACCEPT,
419 .runs = 3,
420 .retvals = {
421 { .retval = 0,
422 .data64 = { INT_MAX, }
424 { .retval = 0,
425 .data64 = { UINT_MAX, }
427 { .retval = 2,
428 .data64 = { INT_MAX - 1, }
431 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
434 "jlt32: BPF_X",
435 .insns = {
436 BPF_DIRECT_PKT_R2,
437 BPF_LD_IMM64(BPF_REG_8, INT_MAX | 2ULL << 32),
438 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
439 BPF_JMP32_REG(BPF_JLT, BPF_REG_7, BPF_REG_8, 1),
440 BPF_EXIT_INSN(),
441 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
442 BPF_EXIT_INSN(),
444 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
445 .result = ACCEPT,
446 .runs = 3,
447 .retvals = {
448 { .retval = 0,
449 .data64 = { INT_MAX | 1ULL << 32, }
451 { .retval = 0,
452 .data64 = { UINT_MAX, }
454 { .retval = 2,
455 .data64 = { (INT_MAX - 1) | 3ULL << 32, }
458 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
461 "jlt32: min/max deduction",
462 .insns = {
463 BPF_RAND_UEXT_R7,
464 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
465 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
466 BPF_JMP32_REG(BPF_JLT, BPF_REG_7, BPF_REG_8, 1),
467 BPF_EXIT_INSN(),
468 BPF_JMP_IMM(BPF_JSLT, BPF_REG_7, 0x7ffffff0, 1),
469 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
470 BPF_EXIT_INSN(),
472 .result = ACCEPT,
473 .retval = 2,
476 "jsge32: BPF_K",
477 .insns = {
478 BPF_DIRECT_PKT_R2,
479 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
480 BPF_JMP32_IMM(BPF_JSGE, BPF_REG_7, -1, 1),
481 BPF_EXIT_INSN(),
482 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
483 BPF_EXIT_INSN(),
485 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
486 .result = ACCEPT,
487 .runs = 3,
488 .retvals = {
489 { .retval = 2,
490 .data64 = { 0, }
492 { .retval = 2,
493 .data64 = { -1, }
495 { .retval = 0,
496 .data64 = { -2, }
499 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
502 "jsge32: BPF_X",
503 .insns = {
504 BPF_DIRECT_PKT_R2,
505 BPF_LD_IMM64(BPF_REG_8, (__u32)-1 | 2ULL << 32),
506 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
507 BPF_JMP32_REG(BPF_JSGE, BPF_REG_7, BPF_REG_8, 1),
508 BPF_EXIT_INSN(),
509 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
510 BPF_EXIT_INSN(),
512 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
513 .result = ACCEPT,
514 .runs = 3,
515 .retvals = {
516 { .retval = 2,
517 .data64 = { -1, }
519 { .retval = 2,
520 .data64 = { 0x7fffffff | 1ULL << 32, }
522 { .retval = 0,
523 .data64 = { -2, }
526 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
529 "jsge32: min/max deduction",
530 .insns = {
531 BPF_RAND_UEXT_R7,
532 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
533 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
534 BPF_JMP32_REG(BPF_JSGE, BPF_REG_7, BPF_REG_8, 1),
535 BPF_EXIT_INSN(),
536 BPF_JMP_IMM(BPF_JSGE, BPF_REG_7, 0x7ffffff0, 1),
537 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
538 BPF_EXIT_INSN(),
540 .result = ACCEPT,
541 .retval = 2,
544 "jsgt32: BPF_K",
545 .insns = {
546 BPF_DIRECT_PKT_R2,
547 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
548 BPF_JMP32_IMM(BPF_JSGT, BPF_REG_7, -1, 1),
549 BPF_EXIT_INSN(),
550 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
551 BPF_EXIT_INSN(),
553 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
554 .result = ACCEPT,
555 .runs = 3,
556 .retvals = {
557 { .retval = 0,
558 .data64 = { (__u32)-2, }
560 { .retval = 0,
561 .data64 = { -1, }
563 { .retval = 2,
564 .data64 = { 1, }
567 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
570 "jsgt32: BPF_X",
571 .insns = {
572 BPF_DIRECT_PKT_R2,
573 BPF_LD_IMM64(BPF_REG_8, 0x7ffffffe | 1ULL << 32),
574 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
575 BPF_JMP32_REG(BPF_JSGT, BPF_REG_7, BPF_REG_8, 1),
576 BPF_EXIT_INSN(),
577 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
578 BPF_EXIT_INSN(),
580 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
581 .result = ACCEPT,
582 .runs = 3,
583 .retvals = {
584 { .retval = 0,
585 .data64 = { 0x7ffffffe, }
587 { .retval = 0,
588 .data64 = { 0x1ffffffffULL, }
590 { .retval = 2,
591 .data64 = { 0x7fffffff, }
594 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
597 "jsgt32: min/max deduction",
598 .insns = {
599 BPF_RAND_SEXT_R7,
600 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
601 BPF_LD_IMM64(BPF_REG_8, (__u32)(-2) | 1ULL << 32),
602 BPF_JMP32_REG(BPF_JSGT, BPF_REG_7, BPF_REG_8, 1),
603 BPF_EXIT_INSN(),
604 BPF_JMP_IMM(BPF_JSGT, BPF_REG_7, -2, 1),
605 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
606 BPF_EXIT_INSN(),
608 .result = ACCEPT,
609 .retval = 2,
612 "jsle32: BPF_K",
613 .insns = {
614 BPF_DIRECT_PKT_R2,
615 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
616 BPF_JMP32_IMM(BPF_JSLE, BPF_REG_7, -1, 1),
617 BPF_EXIT_INSN(),
618 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
619 BPF_EXIT_INSN(),
621 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
622 .result = ACCEPT,
623 .runs = 3,
624 .retvals = {
625 { .retval = 2,
626 .data64 = { (__u32)-2, }
628 { .retval = 2,
629 .data64 = { -1, }
631 { .retval = 0,
632 .data64 = { 1, }
635 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
638 "jsle32: BPF_X",
639 .insns = {
640 BPF_DIRECT_PKT_R2,
641 BPF_LD_IMM64(BPF_REG_8, 0x7ffffffe | 1ULL << 32),
642 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
643 BPF_JMP32_REG(BPF_JSLE, BPF_REG_7, BPF_REG_8, 1),
644 BPF_EXIT_INSN(),
645 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
646 BPF_EXIT_INSN(),
648 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
649 .result = ACCEPT,
650 .runs = 3,
651 .retvals = {
652 { .retval = 2,
653 .data64 = { 0x7ffffffe, }
655 { .retval = 2,
656 .data64 = { (__u32)-1, }
658 { .retval = 0,
659 .data64 = { 0x7fffffff | 2ULL << 32, }
662 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
665 "jsle32: min/max deduction",
666 .insns = {
667 BPF_RAND_UEXT_R7,
668 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
669 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
670 BPF_JMP32_REG(BPF_JSLE, BPF_REG_7, BPF_REG_8, 1),
671 BPF_EXIT_INSN(),
672 BPF_JMP_IMM(BPF_JSLE, BPF_REG_7, 0x7ffffff0, 1),
673 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
674 BPF_EXIT_INSN(),
676 .result = ACCEPT,
677 .retval = 2,
680 "jslt32: BPF_K",
681 .insns = {
682 BPF_DIRECT_PKT_R2,
683 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
684 BPF_JMP32_IMM(BPF_JSLT, BPF_REG_7, -1, 1),
685 BPF_EXIT_INSN(),
686 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
687 BPF_EXIT_INSN(),
689 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
690 .result = ACCEPT,
691 .runs = 3,
692 .retvals = {
693 { .retval = 2,
694 .data64 = { (__u32)-2, }
696 { .retval = 0,
697 .data64 = { -1, }
699 { .retval = 0,
700 .data64 = { 1, }
703 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
706 "jslt32: BPF_X",
707 .insns = {
708 BPF_DIRECT_PKT_R2,
709 BPF_LD_IMM64(BPF_REG_8, 0x7fffffff | 1ULL << 32),
710 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
711 BPF_JMP32_REG(BPF_JSLT, BPF_REG_7, BPF_REG_8, 1),
712 BPF_EXIT_INSN(),
713 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
714 BPF_EXIT_INSN(),
716 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
717 .result = ACCEPT,
718 .runs = 3,
719 .retvals = {
720 { .retval = 2,
721 .data64 = { 0x7ffffffe, }
723 { .retval = 2,
724 .data64 = { 0xffffffff, }
726 { .retval = 0,
727 .data64 = { 0x7fffffff | 2ULL << 32, }
730 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
733 "jslt32: min/max deduction",
734 .insns = {
735 BPF_RAND_SEXT_R7,
736 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
737 BPF_LD_IMM64(BPF_REG_8, (__u32)(-1) | 1ULL << 32),
738 BPF_JMP32_REG(BPF_JSLT, BPF_REG_7, BPF_REG_8, 1),
739 BPF_EXIT_INSN(),
740 BPF_JMP32_IMM(BPF_JSLT, BPF_REG_7, -1, 1),
741 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
742 BPF_EXIT_INSN(),
744 .result = ACCEPT,
745 .retval = 2,
748 "jgt32: range bound deduction, reg op imm",
749 .insns = {
750 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
751 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
752 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
753 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
754 BPF_LD_MAP_FD(BPF_REG_1, 0),
755 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
756 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
757 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
758 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
759 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
760 BPF_JMP32_IMM(BPF_JGT, BPF_REG_0, 1, 5),
761 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
762 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
763 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
764 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
765 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
766 BPF_MOV32_IMM(BPF_REG_0, 0),
767 BPF_EXIT_INSN(),
769 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
770 .fixup_map_hash_48b = { 4 },
771 .result = ACCEPT,
772 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
775 "jgt32: range bound deduction, reg1 op reg2, reg1 unknown",
776 .insns = {
777 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
778 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
779 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
780 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
781 BPF_LD_MAP_FD(BPF_REG_1, 0),
782 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
783 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),
784 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
785 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
786 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
787 BPF_MOV32_IMM(BPF_REG_2, 1),
788 BPF_JMP32_REG(BPF_JGT, BPF_REG_0, BPF_REG_2, 5),
789 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
790 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
791 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
792 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
793 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
794 BPF_MOV32_IMM(BPF_REG_0, 0),
795 BPF_EXIT_INSN(),
797 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
798 .fixup_map_hash_48b = { 4 },
799 .result = ACCEPT,
800 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
803 "jle32: range bound deduction, reg1 op reg2, reg2 unknown",
804 .insns = {
805 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
806 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
807 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
808 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
809 BPF_LD_MAP_FD(BPF_REG_1, 0),
810 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
811 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),
812 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
813 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
814 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
815 BPF_MOV32_IMM(BPF_REG_2, 1),
816 BPF_JMP32_REG(BPF_JLE, BPF_REG_2, BPF_REG_0, 5),
817 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
818 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
819 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
820 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
821 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
822 BPF_MOV32_IMM(BPF_REG_0, 0),
823 BPF_EXIT_INSN(),
825 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
826 .fixup_map_hash_48b = { 4 },
827 .result = ACCEPT,
828 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,