WIP FPC-III support
[linux/fpc-iii.git] / tools / testing / selftests / bpf / verifier / xdp_direct_packet_access.c
blobbfb97383e6b5ae2c7e10c0e8294d4dd115b61954
2 "XDP pkt read, pkt_end mangling, bad access 1",
3 .insns = {
4 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
5 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
6 offsetof(struct xdp_md, data_end)),
7 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
8 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
9 BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, 8),
10 BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 1),
11 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
12 BPF_MOV64_IMM(BPF_REG_0, 0),
13 BPF_EXIT_INSN(),
15 .errstr = "R3 pointer arithmetic on pkt_end",
16 .result = REJECT,
17 .prog_type = BPF_PROG_TYPE_XDP,
20 "XDP pkt read, pkt_end mangling, bad access 2",
21 .insns = {
22 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
23 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
24 offsetof(struct xdp_md, data_end)),
25 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
26 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
27 BPF_ALU64_IMM(BPF_SUB, BPF_REG_3, 8),
28 BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 1),
29 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
30 BPF_MOV64_IMM(BPF_REG_0, 0),
31 BPF_EXIT_INSN(),
33 .errstr = "R3 pointer arithmetic on pkt_end",
34 .result = REJECT,
35 .prog_type = BPF_PROG_TYPE_XDP,
38 "XDP pkt read, pkt_data' > pkt_end, good access",
39 .insns = {
40 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
41 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
42 offsetof(struct xdp_md, data_end)),
43 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
44 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
45 BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 1),
46 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
47 BPF_MOV64_IMM(BPF_REG_0, 0),
48 BPF_EXIT_INSN(),
50 .result = ACCEPT,
51 .prog_type = BPF_PROG_TYPE_XDP,
52 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
55 "XDP pkt read, pkt_data' > pkt_end, bad access 1",
56 .insns = {
57 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
58 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
59 offsetof(struct xdp_md, data_end)),
60 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
61 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
62 BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 1),
63 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -4),
64 BPF_MOV64_IMM(BPF_REG_0, 0),
65 BPF_EXIT_INSN(),
67 .errstr = "R1 offset is outside of the packet",
68 .result = REJECT,
69 .prog_type = BPF_PROG_TYPE_XDP,
70 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
73 "XDP pkt read, pkt_data' > pkt_end, bad access 2",
74 .insns = {
75 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
76 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
77 offsetof(struct xdp_md, data_end)),
78 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
79 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
80 BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 0),
81 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
82 BPF_MOV64_IMM(BPF_REG_0, 0),
83 BPF_EXIT_INSN(),
85 .errstr = "R1 offset is outside of the packet",
86 .result = REJECT,
87 .prog_type = BPF_PROG_TYPE_XDP,
88 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
91 "XDP pkt read, pkt_end > pkt_data', good access",
92 .insns = {
93 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
94 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
95 offsetof(struct xdp_md, data_end)),
96 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
97 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
98 BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_1, 1),
99 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
100 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
101 BPF_MOV64_IMM(BPF_REG_0, 0),
102 BPF_EXIT_INSN(),
104 .result = ACCEPT,
105 .prog_type = BPF_PROG_TYPE_XDP,
106 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
109 "XDP pkt read, pkt_end > pkt_data', bad access 1",
110 .insns = {
111 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
112 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
113 offsetof(struct xdp_md, data_end)),
114 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
115 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
116 BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_1, 1),
117 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
118 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
119 BPF_MOV64_IMM(BPF_REG_0, 0),
120 BPF_EXIT_INSN(),
122 .errstr = "R1 offset is outside of the packet",
123 .result = REJECT,
124 .prog_type = BPF_PROG_TYPE_XDP,
125 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
128 "XDP pkt read, pkt_end > pkt_data', bad access 2",
129 .insns = {
130 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
131 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
132 offsetof(struct xdp_md, data_end)),
133 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
134 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
135 BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_1, 1),
136 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
137 BPF_MOV64_IMM(BPF_REG_0, 0),
138 BPF_EXIT_INSN(),
140 .errstr = "R1 offset is outside of the packet",
141 .result = REJECT,
142 .prog_type = BPF_PROG_TYPE_XDP,
143 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
146 "XDP pkt read, pkt_data' < pkt_end, good access",
147 .insns = {
148 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
149 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
150 offsetof(struct xdp_md, data_end)),
151 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
152 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
153 BPF_JMP_REG(BPF_JLT, BPF_REG_1, BPF_REG_3, 1),
154 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
155 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
156 BPF_MOV64_IMM(BPF_REG_0, 0),
157 BPF_EXIT_INSN(),
159 .result = ACCEPT,
160 .prog_type = BPF_PROG_TYPE_XDP,
161 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
164 "XDP pkt read, pkt_data' < pkt_end, bad access 1",
165 .insns = {
166 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
167 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
168 offsetof(struct xdp_md, data_end)),
169 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
170 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
171 BPF_JMP_REG(BPF_JLT, BPF_REG_1, BPF_REG_3, 1),
172 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
173 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
174 BPF_MOV64_IMM(BPF_REG_0, 0),
175 BPF_EXIT_INSN(),
177 .errstr = "R1 offset is outside of the packet",
178 .result = REJECT,
179 .prog_type = BPF_PROG_TYPE_XDP,
180 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
183 "XDP pkt read, pkt_data' < pkt_end, bad access 2",
184 .insns = {
185 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
186 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
187 offsetof(struct xdp_md, data_end)),
188 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
189 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
190 BPF_JMP_REG(BPF_JLT, BPF_REG_1, BPF_REG_3, 1),
191 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
192 BPF_MOV64_IMM(BPF_REG_0, 0),
193 BPF_EXIT_INSN(),
195 .errstr = "R1 offset is outside of the packet",
196 .result = REJECT,
197 .prog_type = BPF_PROG_TYPE_XDP,
198 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
201 "XDP pkt read, pkt_end < pkt_data', good access",
202 .insns = {
203 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
204 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
205 offsetof(struct xdp_md, data_end)),
206 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
207 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
208 BPF_JMP_REG(BPF_JLT, BPF_REG_3, BPF_REG_1, 1),
209 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
210 BPF_MOV64_IMM(BPF_REG_0, 0),
211 BPF_EXIT_INSN(),
213 .result = ACCEPT,
214 .prog_type = BPF_PROG_TYPE_XDP,
215 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
218 "XDP pkt read, pkt_end < pkt_data', bad access 1",
219 .insns = {
220 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
221 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
222 offsetof(struct xdp_md, data_end)),
223 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
224 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
225 BPF_JMP_REG(BPF_JLT, BPF_REG_3, BPF_REG_1, 1),
226 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -4),
227 BPF_MOV64_IMM(BPF_REG_0, 0),
228 BPF_EXIT_INSN(),
230 .errstr = "R1 offset is outside of the packet",
231 .result = REJECT,
232 .prog_type = BPF_PROG_TYPE_XDP,
233 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
236 "XDP pkt read, pkt_end < pkt_data', bad access 2",
237 .insns = {
238 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
239 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
240 offsetof(struct xdp_md, data_end)),
241 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
242 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
243 BPF_JMP_REG(BPF_JLT, BPF_REG_3, BPF_REG_1, 0),
244 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
245 BPF_MOV64_IMM(BPF_REG_0, 0),
246 BPF_EXIT_INSN(),
248 .errstr = "R1 offset is outside of the packet",
249 .result = REJECT,
250 .prog_type = BPF_PROG_TYPE_XDP,
251 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
254 "XDP pkt read, pkt_data' >= pkt_end, good access",
255 .insns = {
256 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
257 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
258 offsetof(struct xdp_md, data_end)),
259 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
260 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
261 BPF_JMP_REG(BPF_JGE, BPF_REG_1, BPF_REG_3, 1),
262 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
263 BPF_MOV64_IMM(BPF_REG_0, 0),
264 BPF_EXIT_INSN(),
266 .result = ACCEPT,
267 .prog_type = BPF_PROG_TYPE_XDP,
268 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
271 "XDP pkt read, pkt_data' >= pkt_end, bad access 1",
272 .insns = {
273 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
274 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
275 offsetof(struct xdp_md, data_end)),
276 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
277 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
278 BPF_JMP_REG(BPF_JGE, BPF_REG_1, BPF_REG_3, 1),
279 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
280 BPF_MOV64_IMM(BPF_REG_0, 0),
281 BPF_EXIT_INSN(),
283 .errstr = "R1 offset is outside of the packet",
284 .result = REJECT,
285 .prog_type = BPF_PROG_TYPE_XDP,
286 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
289 "XDP pkt read, pkt_data' >= pkt_end, bad access 2",
290 .insns = {
291 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
292 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
293 offsetof(struct xdp_md, data_end)),
294 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
295 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
296 BPF_JMP_REG(BPF_JGE, BPF_REG_1, BPF_REG_3, 0),
297 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
298 BPF_MOV64_IMM(BPF_REG_0, 0),
299 BPF_EXIT_INSN(),
301 .errstr = "R1 offset is outside of the packet",
302 .result = REJECT,
303 .prog_type = BPF_PROG_TYPE_XDP,
304 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
307 "XDP pkt read, pkt_end >= pkt_data', good access",
308 .insns = {
309 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
310 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
311 offsetof(struct xdp_md, data_end)),
312 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
313 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
314 BPF_JMP_REG(BPF_JGE, BPF_REG_3, BPF_REG_1, 1),
315 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
316 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
317 BPF_MOV64_IMM(BPF_REG_0, 0),
318 BPF_EXIT_INSN(),
320 .result = ACCEPT,
321 .prog_type = BPF_PROG_TYPE_XDP,
322 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
325 "XDP pkt read, pkt_end >= pkt_data', bad access 1",
326 .insns = {
327 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
328 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
329 offsetof(struct xdp_md, data_end)),
330 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
331 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
332 BPF_JMP_REG(BPF_JGE, BPF_REG_3, BPF_REG_1, 1),
333 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
334 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -4),
335 BPF_MOV64_IMM(BPF_REG_0, 0),
336 BPF_EXIT_INSN(),
338 .errstr = "R1 offset is outside of the packet",
339 .result = REJECT,
340 .prog_type = BPF_PROG_TYPE_XDP,
341 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
344 "XDP pkt read, pkt_end >= pkt_data', bad access 2",
345 .insns = {
346 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
347 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
348 offsetof(struct xdp_md, data_end)),
349 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
350 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
351 BPF_JMP_REG(BPF_JGE, BPF_REG_3, BPF_REG_1, 1),
352 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
353 BPF_MOV64_IMM(BPF_REG_0, 0),
354 BPF_EXIT_INSN(),
356 .errstr = "R1 offset is outside of the packet",
357 .result = REJECT,
358 .prog_type = BPF_PROG_TYPE_XDP,
359 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
362 "XDP pkt read, pkt_data' <= pkt_end, good access",
363 .insns = {
364 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
365 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
366 offsetof(struct xdp_md, data_end)),
367 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
368 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
369 BPF_JMP_REG(BPF_JLE, BPF_REG_1, BPF_REG_3, 1),
370 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
371 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
372 BPF_MOV64_IMM(BPF_REG_0, 0),
373 BPF_EXIT_INSN(),
375 .result = ACCEPT,
376 .prog_type = BPF_PROG_TYPE_XDP,
377 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
380 "XDP pkt read, pkt_data' <= pkt_end, bad access 1",
381 .insns = {
382 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
383 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
384 offsetof(struct xdp_md, data_end)),
385 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
386 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
387 BPF_JMP_REG(BPF_JLE, BPF_REG_1, BPF_REG_3, 1),
388 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
389 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -4),
390 BPF_MOV64_IMM(BPF_REG_0, 0),
391 BPF_EXIT_INSN(),
393 .errstr = "R1 offset is outside of the packet",
394 .result = REJECT,
395 .prog_type = BPF_PROG_TYPE_XDP,
396 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
399 "XDP pkt read, pkt_data' <= pkt_end, bad access 2",
400 .insns = {
401 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
402 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
403 offsetof(struct xdp_md, data_end)),
404 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
405 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
406 BPF_JMP_REG(BPF_JLE, BPF_REG_1, BPF_REG_3, 1),
407 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
408 BPF_MOV64_IMM(BPF_REG_0, 0),
409 BPF_EXIT_INSN(),
411 .errstr = "R1 offset is outside of the packet",
412 .result = REJECT,
413 .prog_type = BPF_PROG_TYPE_XDP,
414 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
417 "XDP pkt read, pkt_end <= pkt_data', good access",
418 .insns = {
419 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
420 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
421 offsetof(struct xdp_md, data_end)),
422 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
423 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
424 BPF_JMP_REG(BPF_JLE, BPF_REG_3, BPF_REG_1, 1),
425 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
426 BPF_MOV64_IMM(BPF_REG_0, 0),
427 BPF_EXIT_INSN(),
429 .result = ACCEPT,
430 .prog_type = BPF_PROG_TYPE_XDP,
431 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
434 "XDP pkt read, pkt_end <= pkt_data', bad access 1",
435 .insns = {
436 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
437 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
438 offsetof(struct xdp_md, data_end)),
439 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
440 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
441 BPF_JMP_REG(BPF_JLE, BPF_REG_3, BPF_REG_1, 1),
442 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
443 BPF_MOV64_IMM(BPF_REG_0, 0),
444 BPF_EXIT_INSN(),
446 .errstr = "R1 offset is outside of the packet",
447 .result = REJECT,
448 .prog_type = BPF_PROG_TYPE_XDP,
449 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
452 "XDP pkt read, pkt_end <= pkt_data', bad access 2",
453 .insns = {
454 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
455 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
456 offsetof(struct xdp_md, data_end)),
457 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
458 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
459 BPF_JMP_REG(BPF_JLE, BPF_REG_3, BPF_REG_1, 0),
460 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
461 BPF_MOV64_IMM(BPF_REG_0, 0),
462 BPF_EXIT_INSN(),
464 .errstr = "R1 offset is outside of the packet",
465 .result = REJECT,
466 .prog_type = BPF_PROG_TYPE_XDP,
467 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
470 "XDP pkt read, pkt_meta' > pkt_data, good access",
471 .insns = {
472 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
473 offsetof(struct xdp_md, data_meta)),
474 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
475 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
476 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
477 BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 1),
478 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
479 BPF_MOV64_IMM(BPF_REG_0, 0),
480 BPF_EXIT_INSN(),
482 .result = ACCEPT,
483 .prog_type = BPF_PROG_TYPE_XDP,
484 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
487 "XDP pkt read, pkt_meta' > pkt_data, bad access 1",
488 .insns = {
489 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
490 offsetof(struct xdp_md, data_meta)),
491 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
492 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
493 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
494 BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 1),
495 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -4),
496 BPF_MOV64_IMM(BPF_REG_0, 0),
497 BPF_EXIT_INSN(),
499 .errstr = "R1 offset is outside of the packet",
500 .result = REJECT,
501 .prog_type = BPF_PROG_TYPE_XDP,
502 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
505 "XDP pkt read, pkt_meta' > pkt_data, bad access 2",
506 .insns = {
507 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
508 offsetof(struct xdp_md, data_meta)),
509 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
510 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
511 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
512 BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 0),
513 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
514 BPF_MOV64_IMM(BPF_REG_0, 0),
515 BPF_EXIT_INSN(),
517 .errstr = "R1 offset is outside of the packet",
518 .result = REJECT,
519 .prog_type = BPF_PROG_TYPE_XDP,
520 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
523 "XDP pkt read, pkt_data > pkt_meta', good access",
524 .insns = {
525 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
526 offsetof(struct xdp_md, data_meta)),
527 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
528 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
529 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
530 BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_1, 1),
531 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
532 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
533 BPF_MOV64_IMM(BPF_REG_0, 0),
534 BPF_EXIT_INSN(),
536 .result = ACCEPT,
537 .prog_type = BPF_PROG_TYPE_XDP,
538 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
541 "XDP pkt read, pkt_data > pkt_meta', bad access 1",
542 .insns = {
543 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
544 offsetof(struct xdp_md, data_meta)),
545 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
546 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
547 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
548 BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_1, 1),
549 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
550 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
551 BPF_MOV64_IMM(BPF_REG_0, 0),
552 BPF_EXIT_INSN(),
554 .errstr = "R1 offset is outside of the packet",
555 .result = REJECT,
556 .prog_type = BPF_PROG_TYPE_XDP,
557 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
560 "XDP pkt read, pkt_data > pkt_meta', bad access 2",
561 .insns = {
562 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
563 offsetof(struct xdp_md, data_meta)),
564 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
565 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
566 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
567 BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_1, 1),
568 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
569 BPF_MOV64_IMM(BPF_REG_0, 0),
570 BPF_EXIT_INSN(),
572 .errstr = "R1 offset is outside of the packet",
573 .result = REJECT,
574 .prog_type = BPF_PROG_TYPE_XDP,
575 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
578 "XDP pkt read, pkt_meta' < pkt_data, good access",
579 .insns = {
580 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
581 offsetof(struct xdp_md, data_meta)),
582 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
583 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
584 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
585 BPF_JMP_REG(BPF_JLT, BPF_REG_1, BPF_REG_3, 1),
586 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
587 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
588 BPF_MOV64_IMM(BPF_REG_0, 0),
589 BPF_EXIT_INSN(),
591 .result = ACCEPT,
592 .prog_type = BPF_PROG_TYPE_XDP,
593 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
596 "XDP pkt read, pkt_meta' < pkt_data, bad access 1",
597 .insns = {
598 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
599 offsetof(struct xdp_md, data_meta)),
600 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
601 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
602 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
603 BPF_JMP_REG(BPF_JLT, BPF_REG_1, BPF_REG_3, 1),
604 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
605 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
606 BPF_MOV64_IMM(BPF_REG_0, 0),
607 BPF_EXIT_INSN(),
609 .errstr = "R1 offset is outside of the packet",
610 .result = REJECT,
611 .prog_type = BPF_PROG_TYPE_XDP,
612 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
615 "XDP pkt read, pkt_meta' < pkt_data, bad access 2",
616 .insns = {
617 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
618 offsetof(struct xdp_md, data_meta)),
619 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
620 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
621 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
622 BPF_JMP_REG(BPF_JLT, BPF_REG_1, BPF_REG_3, 1),
623 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
624 BPF_MOV64_IMM(BPF_REG_0, 0),
625 BPF_EXIT_INSN(),
627 .errstr = "R1 offset is outside of the packet",
628 .result = REJECT,
629 .prog_type = BPF_PROG_TYPE_XDP,
630 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
633 "XDP pkt read, pkt_data < pkt_meta', good access",
634 .insns = {
635 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
636 offsetof(struct xdp_md, data_meta)),
637 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
638 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
639 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
640 BPF_JMP_REG(BPF_JLT, BPF_REG_3, BPF_REG_1, 1),
641 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
642 BPF_MOV64_IMM(BPF_REG_0, 0),
643 BPF_EXIT_INSN(),
645 .result = ACCEPT,
646 .prog_type = BPF_PROG_TYPE_XDP,
647 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
650 "XDP pkt read, pkt_data < pkt_meta', bad access 1",
651 .insns = {
652 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
653 offsetof(struct xdp_md, data_meta)),
654 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
655 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
656 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
657 BPF_JMP_REG(BPF_JLT, BPF_REG_3, BPF_REG_1, 1),
658 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -4),
659 BPF_MOV64_IMM(BPF_REG_0, 0),
660 BPF_EXIT_INSN(),
662 .errstr = "R1 offset is outside of the packet",
663 .result = REJECT,
664 .prog_type = BPF_PROG_TYPE_XDP,
665 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
668 "XDP pkt read, pkt_data < pkt_meta', bad access 2",
669 .insns = {
670 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
671 offsetof(struct xdp_md, data_meta)),
672 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
673 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
674 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
675 BPF_JMP_REG(BPF_JLT, BPF_REG_3, BPF_REG_1, 0),
676 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
677 BPF_MOV64_IMM(BPF_REG_0, 0),
678 BPF_EXIT_INSN(),
680 .errstr = "R1 offset is outside of the packet",
681 .result = REJECT,
682 .prog_type = BPF_PROG_TYPE_XDP,
683 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
686 "XDP pkt read, pkt_meta' >= pkt_data, good access",
687 .insns = {
688 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
689 offsetof(struct xdp_md, data_meta)),
690 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
691 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
692 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
693 BPF_JMP_REG(BPF_JGE, BPF_REG_1, BPF_REG_3, 1),
694 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
695 BPF_MOV64_IMM(BPF_REG_0, 0),
696 BPF_EXIT_INSN(),
698 .result = ACCEPT,
699 .prog_type = BPF_PROG_TYPE_XDP,
700 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
703 "XDP pkt read, pkt_meta' >= pkt_data, bad access 1",
704 .insns = {
705 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
706 offsetof(struct xdp_md, data_meta)),
707 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
708 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
709 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
710 BPF_JMP_REG(BPF_JGE, BPF_REG_1, BPF_REG_3, 1),
711 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
712 BPF_MOV64_IMM(BPF_REG_0, 0),
713 BPF_EXIT_INSN(),
715 .errstr = "R1 offset is outside of the packet",
716 .result = REJECT,
717 .prog_type = BPF_PROG_TYPE_XDP,
718 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
721 "XDP pkt read, pkt_meta' >= pkt_data, bad access 2",
722 .insns = {
723 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
724 offsetof(struct xdp_md, data_meta)),
725 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
726 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
727 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
728 BPF_JMP_REG(BPF_JGE, BPF_REG_1, BPF_REG_3, 0),
729 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
730 BPF_MOV64_IMM(BPF_REG_0, 0),
731 BPF_EXIT_INSN(),
733 .errstr = "R1 offset is outside of the packet",
734 .result = REJECT,
735 .prog_type = BPF_PROG_TYPE_XDP,
736 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
739 "XDP pkt read, pkt_data >= pkt_meta', good access",
740 .insns = {
741 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
742 offsetof(struct xdp_md, data_meta)),
743 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
744 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
745 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
746 BPF_JMP_REG(BPF_JGE, BPF_REG_3, BPF_REG_1, 1),
747 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
748 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
749 BPF_MOV64_IMM(BPF_REG_0, 0),
750 BPF_EXIT_INSN(),
752 .result = ACCEPT,
753 .prog_type = BPF_PROG_TYPE_XDP,
754 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
757 "XDP pkt read, pkt_data >= pkt_meta', bad access 1",
758 .insns = {
759 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
760 offsetof(struct xdp_md, data_meta)),
761 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
762 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
763 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
764 BPF_JMP_REG(BPF_JGE, BPF_REG_3, BPF_REG_1, 1),
765 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
766 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -4),
767 BPF_MOV64_IMM(BPF_REG_0, 0),
768 BPF_EXIT_INSN(),
770 .errstr = "R1 offset is outside of the packet",
771 .result = REJECT,
772 .prog_type = BPF_PROG_TYPE_XDP,
773 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
776 "XDP pkt read, pkt_data >= pkt_meta', bad access 2",
777 .insns = {
778 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
779 offsetof(struct xdp_md, data_meta)),
780 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
781 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
782 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
783 BPF_JMP_REG(BPF_JGE, BPF_REG_3, BPF_REG_1, 1),
784 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
785 BPF_MOV64_IMM(BPF_REG_0, 0),
786 BPF_EXIT_INSN(),
788 .errstr = "R1 offset is outside of the packet",
789 .result = REJECT,
790 .prog_type = BPF_PROG_TYPE_XDP,
791 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
794 "XDP pkt read, pkt_meta' <= pkt_data, good access",
795 .insns = {
796 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
797 offsetof(struct xdp_md, data_meta)),
798 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
799 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
800 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
801 BPF_JMP_REG(BPF_JLE, BPF_REG_1, BPF_REG_3, 1),
802 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
803 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
804 BPF_MOV64_IMM(BPF_REG_0, 0),
805 BPF_EXIT_INSN(),
807 .result = ACCEPT,
808 .prog_type = BPF_PROG_TYPE_XDP,
809 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
812 "XDP pkt read, pkt_meta' <= pkt_data, bad access 1",
813 .insns = {
814 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
815 offsetof(struct xdp_md, data_meta)),
816 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
817 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
818 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
819 BPF_JMP_REG(BPF_JLE, BPF_REG_1, BPF_REG_3, 1),
820 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
821 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -4),
822 BPF_MOV64_IMM(BPF_REG_0, 0),
823 BPF_EXIT_INSN(),
825 .errstr = "R1 offset is outside of the packet",
826 .result = REJECT,
827 .prog_type = BPF_PROG_TYPE_XDP,
828 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
831 "XDP pkt read, pkt_meta' <= pkt_data, bad access 2",
832 .insns = {
833 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
834 offsetof(struct xdp_md, data_meta)),
835 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
836 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
837 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
838 BPF_JMP_REG(BPF_JLE, BPF_REG_1, BPF_REG_3, 1),
839 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
840 BPF_MOV64_IMM(BPF_REG_0, 0),
841 BPF_EXIT_INSN(),
843 .errstr = "R1 offset is outside of the packet",
844 .result = REJECT,
845 .prog_type = BPF_PROG_TYPE_XDP,
846 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
849 "XDP pkt read, pkt_data <= pkt_meta', good access",
850 .insns = {
851 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
852 offsetof(struct xdp_md, data_meta)),
853 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
854 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
855 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
856 BPF_JMP_REG(BPF_JLE, BPF_REG_3, BPF_REG_1, 1),
857 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
858 BPF_MOV64_IMM(BPF_REG_0, 0),
859 BPF_EXIT_INSN(),
861 .result = ACCEPT,
862 .prog_type = BPF_PROG_TYPE_XDP,
863 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
866 "XDP pkt read, pkt_data <= pkt_meta', bad access 1",
867 .insns = {
868 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
869 offsetof(struct xdp_md, data_meta)),
870 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
871 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
872 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
873 BPF_JMP_REG(BPF_JLE, BPF_REG_3, BPF_REG_1, 1),
874 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8),
875 BPF_MOV64_IMM(BPF_REG_0, 0),
876 BPF_EXIT_INSN(),
878 .errstr = "R1 offset is outside of the packet",
879 .result = REJECT,
880 .prog_type = BPF_PROG_TYPE_XDP,
881 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
884 "XDP pkt read, pkt_data <= pkt_meta', bad access 2",
885 .insns = {
886 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
887 offsetof(struct xdp_md, data_meta)),
888 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
889 BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
890 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
891 BPF_JMP_REG(BPF_JLE, BPF_REG_3, BPF_REG_1, 0),
892 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, -5),
893 BPF_MOV64_IMM(BPF_REG_0, 0),
894 BPF_EXIT_INSN(),
896 .errstr = "R1 offset is outside of the packet",
897 .result = REJECT,
898 .prog_type = BPF_PROG_TYPE_XDP,
899 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,