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