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