]> asedeno.scripts.mit.edu Git - linux.git/blob - tools/testing/selftests/bpf/verifier/jmp32.c
f0961c58581ea98036a725904bb2268c6faf6afe
[linux.git] / tools / testing / selftests / bpf / verifier / jmp32.c
1 {
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(),
10
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(),
15         },
16         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
17         .result = ACCEPT,
18         .runs = 3,
19         .retvals = {
20                 { .retval = 0,
21                   .data64 = { 1ULL << 63, }
22                 },
23                 { .retval = 2,
24                   .data64 = { 1, }
25                 },
26                 { .retval = 2,
27                   .data64 = { 1ULL << 63 | 1, }
28                 },
29         },
30         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
31 },
32 {
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(),
41
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(),
47         },
48         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
49         .result = ACCEPT,
50         .runs = 3,
51         .retvals = {
52                 { .retval = 0,
53                   .data64 = { 1ULL << 63, }
54                 },
55                 { .retval = 2,
56                   .data64 = { 1, }
57                 },
58                 { .retval = 2,
59                   .data64 = { 1ULL << 63 | 1, }
60                 },
61         },
62         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
63 },
64 {
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(),
74         },
75         .result = ACCEPT,
76 },
77 {
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(),
86         },
87         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
88         .result = ACCEPT,
89         .runs = 2,
90         .retvals = {
91                 { .retval = 0,
92                   .data64 = { -2, }
93                 },
94                 { .retval = 2,
95                   .data64 = { -1, }
96                 },
97         },
98         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
99 },
100 {
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(),
110         },
111         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
112         .result = ACCEPT,
113         .runs = 3,
114         .retvals = {
115                 { .retval = 0,
116                   .data64 = { 2, }
117                 },
118                 { .retval = 2,
119                   .data64 = { 1, }
120                 },
121                 { .retval = 2,
122                   .data64 = { 1ULL << 63 | 1, }
123                 },
124         },
125         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
126 },
127 {
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(),
137         },
138         .result = ACCEPT,
139 },
140 {
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(),
149         },
150         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
151         .result = ACCEPT,
152         .runs = 2,
153         .retvals = {
154                 { .retval = 2,
155                   .data64 = { 1, }
156                 },
157                 { .retval = 0,
158                   .data64 = { -1, }
159                 },
160         },
161         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
162 },
163 {
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(),
173         },
174         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
175         .result = ACCEPT,
176         .runs = 3,
177         .retvals = {
178                 { .retval = 0,
179                   .data64 = { 1, }
180                 },
181                 { .retval = 2,
182                   .data64 = { 2, }
183                 },
184                 { .retval = 2,
185                   .data64 = { 1ULL << 63 | 2, }
186                 },
187         },
188         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
189 },
190 {
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(),
200         },
201         .result = ACCEPT,
202 },
203 {
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(),
212         },
213         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
214         .result = ACCEPT,
215         .runs = 3,
216         .retvals = {
217                 { .retval = 2,
218                   .data64 = { UINT_MAX, }
219                 },
220                 { .retval = 2,
221                   .data64 = { UINT_MAX - 1, }
222                 },
223                 { .retval = 0,
224                   .data64 = { 0, }
225                 },
226         },
227         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
228 },
229 {
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(),
239         },
240         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
241         .result = ACCEPT,
242         .runs = 3,
243         .retvals = {
244                 { .retval = 2,
245                   .data64 = { UINT_MAX, }
246                 },
247                 { .retval = 0,
248                   .data64 = { INT_MAX, }
249                 },
250                 { .retval = 0,
251                   .data64 = { (UINT_MAX - 1) | 2ULL << 32, }
252                 },
253         },
254         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
255 },
256 {
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(),
267         },
268         .result = ACCEPT,
269         .retval = 2,
270 },
271 {
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(),
280         },
281         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
282         .result = ACCEPT,
283         .runs = 3,
284         .retvals = {
285                 { .retval = 2,
286                   .data64 = { UINT_MAX, }
287                 },
288                 { .retval = 0,
289                   .data64 = { UINT_MAX - 1, }
290                 },
291                 { .retval = 0,
292                   .data64 = { 0, }
293                 },
294         },
295         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
296 },
297 {
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(),
307         },
308         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
309         .result = ACCEPT,
310         .runs = 3,
311         .retvals = {
312                 { .retval = 2,
313                   .data64 = { UINT_MAX, }
314                 },
315                 { .retval = 0,
316                   .data64 = { UINT_MAX - 1, }
317                 },
318                 { .retval = 0,
319                   .data64 = { (UINT_MAX - 1) | 2ULL << 32, }
320                 },
321         },
322         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
323 },
324 {
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(),
335         },
336         .result = ACCEPT,
337         .retval = 2,
338 },
339 {
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(),
348         },
349         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
350         .result = ACCEPT,
351         .runs = 3,
352         .retvals = {
353                 { .retval = 2,
354                   .data64 = { INT_MAX - 1, }
355                 },
356                 { .retval = 0,
357                   .data64 = { UINT_MAX, }
358                 },
359                 { .retval = 2,
360                   .data64 = { INT_MAX, }
361                 },
362         },
363         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
364 },
365 {
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(),
375         },
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, }
382                 },
383                 { .retval = 2,
384                   .data64 = { INT_MAX - 2, }
385                 },
386                 { .retval = 0,
387                   .data64 = { UINT_MAX, }
388                 },
389         },
390         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
391 },
392 {
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(),
403         },
404         .result = ACCEPT,
405         .retval = 2,
406 },
407 {
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(),
416         },
417         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
418         .result = ACCEPT,
419         .runs = 3,
420         .retvals = {
421                 { .retval = 0,
422                   .data64 = { INT_MAX, }
423                 },
424                 { .retval = 0,
425                   .data64 = { UINT_MAX, }
426                 },
427                 { .retval = 2,
428                   .data64 = { INT_MAX - 1, }
429                 },
430         },
431         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
432 },
433 {
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(),
443         },
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, }
450                 },
451                 { .retval = 0,
452                   .data64 = { UINT_MAX, }
453                 },
454                 { .retval = 2,
455                   .data64 = { (INT_MAX - 1) | 3ULL << 32, }
456                 },
457         },
458         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
459 },
460 {
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(),
471         },
472         .result = ACCEPT,
473         .retval = 2,
474 },
475 {
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(),
484         },
485         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
486         .result = ACCEPT,
487         .runs = 3,
488         .retvals = {
489                 { .retval = 2,
490                   .data64 = { 0, }
491                 },
492                 { .retval = 2,
493                   .data64 = { -1, }
494                 },
495                 { .retval = 0,
496                   .data64 = { -2, }
497                 },
498         },
499         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
500 },
501 {
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(),
511         },
512         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
513         .result = ACCEPT,
514         .runs = 3,
515         .retvals = {
516                 { .retval = 2,
517                   .data64 = { -1, }
518                 },
519                 { .retval = 2,
520                   .data64 = { 0x7fffffff | 1ULL << 32, }
521                 },
522                 { .retval = 0,
523                   .data64 = { -2, }
524                 },
525         },
526         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
527 },
528 {
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(),
539         },
540         .result = ACCEPT,
541         .retval = 2,
542 },
543 {
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(),
552         },
553         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
554         .result = ACCEPT,
555         .runs = 3,
556         .retvals = {
557                 { .retval = 0,
558                   .data64 = { (__u32)-2, }
559                 },
560                 { .retval = 0,
561                   .data64 = { -1, }
562                 },
563                 { .retval = 2,
564                   .data64 = { 1, }
565                 },
566         },
567         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
568 },
569 {
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(),
579         },
580         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
581         .result = ACCEPT,
582         .runs = 3,
583         .retvals = {
584                 { .retval = 0,
585                   .data64 = { 0x7ffffffe, }
586                 },
587                 { .retval = 0,
588                   .data64 = { 0x1ffffffffULL, }
589                 },
590                 { .retval = 2,
591                   .data64 = { 0x7fffffff, }
592                 },
593         },
594         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
595 },
596 {
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(),
607         },
608         .result = ACCEPT,
609         .retval = 2,
610 },
611 {
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(),
620         },
621         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
622         .result = ACCEPT,
623         .runs = 3,
624         .retvals = {
625                 { .retval = 2,
626                   .data64 = { (__u32)-2, }
627                 },
628                 { .retval = 2,
629                   .data64 = { -1, }
630                 },
631                 { .retval = 0,
632                   .data64 = { 1, }
633                 },
634         },
635         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
636 },
637 {
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(),
647         },
648         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
649         .result = ACCEPT,
650         .runs = 3,
651         .retvals = {
652                 { .retval = 2,
653                   .data64 = { 0x7ffffffe, }
654                 },
655                 { .retval = 2,
656                   .data64 = { (__u32)-1, }
657                 },
658                 { .retval = 0,
659                   .data64 = { 0x7fffffff | 2ULL << 32, }
660                 },
661         },
662         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
663 },
664 {
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(),
675         },
676         .result = ACCEPT,
677         .retval = 2,
678 },
679 {
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(),
688         },
689         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
690         .result = ACCEPT,
691         .runs = 3,
692         .retvals = {
693                 { .retval = 2,
694                   .data64 = { (__u32)-2, }
695                 },
696                 { .retval = 0,
697                   .data64 = { -1, }
698                 },
699                 { .retval = 0,
700                   .data64 = { 1, }
701                 },
702         },
703         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
704 },
705 {
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(),
715         },
716         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
717         .result = ACCEPT,
718         .runs = 3,
719         .retvals = {
720                 { .retval = 2,
721                   .data64 = { 0x7ffffffe, }
722                 },
723                 { .retval = 2,
724                   .data64 = { 0xffffffff, }
725                 },
726                 { .retval = 0,
727                   .data64 = { 0x7fffffff | 2ULL << 32, }
728                 },
729         },
730         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
731 },
732 {
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(),
743         },
744         .result = ACCEPT,
745         .retval = 2,
746 },