WIP FPC-III support
[linux/fpc-iii.git] / tools / testing / selftests / bpf / verifier / ctx_sk_lookup.c
blobfb13ca2d5606823507002ca4a7f5094287f20260
2 "valid 1,2,4,8-byte reads from bpf_sk_lookup",
3 .insns = {
4 /* 1-byte read from family field */
5 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
6 offsetof(struct bpf_sk_lookup, family)),
7 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
8 offsetof(struct bpf_sk_lookup, family) + 1),
9 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
10 offsetof(struct bpf_sk_lookup, family) + 2),
11 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
12 offsetof(struct bpf_sk_lookup, family) + 3),
13 /* 2-byte read from family field */
14 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
15 offsetof(struct bpf_sk_lookup, family)),
16 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
17 offsetof(struct bpf_sk_lookup, family) + 2),
18 /* 4-byte read from family field */
19 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
20 offsetof(struct bpf_sk_lookup, family)),
22 /* 1-byte read from protocol field */
23 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
24 offsetof(struct bpf_sk_lookup, protocol)),
25 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
26 offsetof(struct bpf_sk_lookup, protocol) + 1),
27 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
28 offsetof(struct bpf_sk_lookup, protocol) + 2),
29 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
30 offsetof(struct bpf_sk_lookup, protocol) + 3),
31 /* 2-byte read from protocol field */
32 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
33 offsetof(struct bpf_sk_lookup, protocol)),
34 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
35 offsetof(struct bpf_sk_lookup, protocol) + 2),
36 /* 4-byte read from protocol field */
37 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
38 offsetof(struct bpf_sk_lookup, protocol)),
40 /* 1-byte read from remote_ip4 field */
41 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
42 offsetof(struct bpf_sk_lookup, remote_ip4)),
43 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
44 offsetof(struct bpf_sk_lookup, remote_ip4) + 1),
45 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
46 offsetof(struct bpf_sk_lookup, remote_ip4) + 2),
47 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
48 offsetof(struct bpf_sk_lookup, remote_ip4) + 3),
49 /* 2-byte read from remote_ip4 field */
50 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
51 offsetof(struct bpf_sk_lookup, remote_ip4)),
52 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
53 offsetof(struct bpf_sk_lookup, remote_ip4) + 2),
54 /* 4-byte read from remote_ip4 field */
55 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
56 offsetof(struct bpf_sk_lookup, remote_ip4)),
58 /* 1-byte read from remote_ip6 field */
59 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
60 offsetof(struct bpf_sk_lookup, remote_ip6)),
61 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
62 offsetof(struct bpf_sk_lookup, remote_ip6) + 1),
63 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
64 offsetof(struct bpf_sk_lookup, remote_ip6) + 2),
65 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
66 offsetof(struct bpf_sk_lookup, remote_ip6) + 3),
67 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
68 offsetof(struct bpf_sk_lookup, remote_ip6) + 4),
69 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
70 offsetof(struct bpf_sk_lookup, remote_ip6) + 5),
71 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
72 offsetof(struct bpf_sk_lookup, remote_ip6) + 6),
73 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
74 offsetof(struct bpf_sk_lookup, remote_ip6) + 7),
75 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
76 offsetof(struct bpf_sk_lookup, remote_ip6) + 8),
77 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
78 offsetof(struct bpf_sk_lookup, remote_ip6) + 9),
79 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
80 offsetof(struct bpf_sk_lookup, remote_ip6) + 10),
81 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
82 offsetof(struct bpf_sk_lookup, remote_ip6) + 11),
83 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
84 offsetof(struct bpf_sk_lookup, remote_ip6) + 12),
85 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
86 offsetof(struct bpf_sk_lookup, remote_ip6) + 13),
87 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
88 offsetof(struct bpf_sk_lookup, remote_ip6) + 14),
89 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
90 offsetof(struct bpf_sk_lookup, remote_ip6) + 15),
91 /* 2-byte read from remote_ip6 field */
92 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
93 offsetof(struct bpf_sk_lookup, remote_ip6)),
94 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
95 offsetof(struct bpf_sk_lookup, remote_ip6) + 2),
96 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
97 offsetof(struct bpf_sk_lookup, remote_ip6) + 4),
98 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
99 offsetof(struct bpf_sk_lookup, remote_ip6) + 6),
100 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
101 offsetof(struct bpf_sk_lookup, remote_ip6) + 8),
102 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
103 offsetof(struct bpf_sk_lookup, remote_ip6) + 10),
104 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
105 offsetof(struct bpf_sk_lookup, remote_ip6) + 12),
106 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
107 offsetof(struct bpf_sk_lookup, remote_ip6) + 14),
108 /* 4-byte read from remote_ip6 field */
109 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
110 offsetof(struct bpf_sk_lookup, remote_ip6)),
111 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
112 offsetof(struct bpf_sk_lookup, remote_ip6) + 4),
113 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
114 offsetof(struct bpf_sk_lookup, remote_ip6) + 8),
115 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
116 offsetof(struct bpf_sk_lookup, remote_ip6) + 12),
118 /* 1-byte read from remote_port field */
119 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
120 offsetof(struct bpf_sk_lookup, remote_port)),
121 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
122 offsetof(struct bpf_sk_lookup, remote_port) + 1),
123 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
124 offsetof(struct bpf_sk_lookup, remote_port) + 2),
125 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
126 offsetof(struct bpf_sk_lookup, remote_port) + 3),
127 /* 2-byte read from remote_port field */
128 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
129 offsetof(struct bpf_sk_lookup, remote_port)),
130 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
131 offsetof(struct bpf_sk_lookup, remote_port) + 2),
132 /* 4-byte read from remote_port field */
133 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
134 offsetof(struct bpf_sk_lookup, remote_port)),
136 /* 1-byte read from local_ip4 field */
137 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
138 offsetof(struct bpf_sk_lookup, local_ip4)),
139 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
140 offsetof(struct bpf_sk_lookup, local_ip4) + 1),
141 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
142 offsetof(struct bpf_sk_lookup, local_ip4) + 2),
143 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
144 offsetof(struct bpf_sk_lookup, local_ip4) + 3),
145 /* 2-byte read from local_ip4 field */
146 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
147 offsetof(struct bpf_sk_lookup, local_ip4)),
148 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
149 offsetof(struct bpf_sk_lookup, local_ip4) + 2),
150 /* 4-byte read from local_ip4 field */
151 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
152 offsetof(struct bpf_sk_lookup, local_ip4)),
154 /* 1-byte read from local_ip6 field */
155 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
156 offsetof(struct bpf_sk_lookup, local_ip6)),
157 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
158 offsetof(struct bpf_sk_lookup, local_ip6) + 1),
159 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
160 offsetof(struct bpf_sk_lookup, local_ip6) + 2),
161 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
162 offsetof(struct bpf_sk_lookup, local_ip6) + 3),
163 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
164 offsetof(struct bpf_sk_lookup, local_ip6) + 4),
165 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
166 offsetof(struct bpf_sk_lookup, local_ip6) + 5),
167 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
168 offsetof(struct bpf_sk_lookup, local_ip6) + 6),
169 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
170 offsetof(struct bpf_sk_lookup, local_ip6) + 7),
171 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
172 offsetof(struct bpf_sk_lookup, local_ip6) + 8),
173 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
174 offsetof(struct bpf_sk_lookup, local_ip6) + 9),
175 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
176 offsetof(struct bpf_sk_lookup, local_ip6) + 10),
177 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
178 offsetof(struct bpf_sk_lookup, local_ip6) + 11),
179 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
180 offsetof(struct bpf_sk_lookup, local_ip6) + 12),
181 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
182 offsetof(struct bpf_sk_lookup, local_ip6) + 13),
183 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
184 offsetof(struct bpf_sk_lookup, local_ip6) + 14),
185 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
186 offsetof(struct bpf_sk_lookup, local_ip6) + 15),
187 /* 2-byte read from local_ip6 field */
188 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
189 offsetof(struct bpf_sk_lookup, local_ip6)),
190 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
191 offsetof(struct bpf_sk_lookup, local_ip6) + 2),
192 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
193 offsetof(struct bpf_sk_lookup, local_ip6) + 4),
194 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
195 offsetof(struct bpf_sk_lookup, local_ip6) + 6),
196 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
197 offsetof(struct bpf_sk_lookup, local_ip6) + 8),
198 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
199 offsetof(struct bpf_sk_lookup, local_ip6) + 10),
200 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
201 offsetof(struct bpf_sk_lookup, local_ip6) + 12),
202 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
203 offsetof(struct bpf_sk_lookup, local_ip6) + 14),
204 /* 4-byte read from local_ip6 field */
205 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
206 offsetof(struct bpf_sk_lookup, local_ip6)),
207 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
208 offsetof(struct bpf_sk_lookup, local_ip6) + 4),
209 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
210 offsetof(struct bpf_sk_lookup, local_ip6) + 8),
211 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
212 offsetof(struct bpf_sk_lookup, local_ip6) + 12),
214 /* 1-byte read from local_port field */
215 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
216 offsetof(struct bpf_sk_lookup, local_port)),
217 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
218 offsetof(struct bpf_sk_lookup, local_port) + 1),
219 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
220 offsetof(struct bpf_sk_lookup, local_port) + 2),
221 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
222 offsetof(struct bpf_sk_lookup, local_port) + 3),
223 /* 2-byte read from local_port field */
224 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
225 offsetof(struct bpf_sk_lookup, local_port)),
226 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
227 offsetof(struct bpf_sk_lookup, local_port) + 2),
228 /* 4-byte read from local_port field */
229 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
230 offsetof(struct bpf_sk_lookup, local_port)),
232 /* 8-byte read from sk field */
233 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
234 offsetof(struct bpf_sk_lookup, sk)),
236 BPF_MOV32_IMM(BPF_REG_0, 0),
237 BPF_EXIT_INSN(),
239 .result = ACCEPT,
240 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
241 .expected_attach_type = BPF_SK_LOOKUP,
243 /* invalid 8-byte reads from a 4-byte fields in bpf_sk_lookup */
245 "invalid 8-byte read from bpf_sk_lookup family field",
246 .insns = {
247 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
248 offsetof(struct bpf_sk_lookup, family)),
249 BPF_MOV32_IMM(BPF_REG_0, 0),
250 BPF_EXIT_INSN(),
252 .errstr = "invalid bpf_context access",
253 .result = REJECT,
254 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
255 .expected_attach_type = BPF_SK_LOOKUP,
258 "invalid 8-byte read from bpf_sk_lookup protocol field",
259 .insns = {
260 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
261 offsetof(struct bpf_sk_lookup, protocol)),
262 BPF_MOV32_IMM(BPF_REG_0, 0),
263 BPF_EXIT_INSN(),
265 .errstr = "invalid bpf_context access",
266 .result = REJECT,
267 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
268 .expected_attach_type = BPF_SK_LOOKUP,
269 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
272 "invalid 8-byte read from bpf_sk_lookup remote_ip4 field",
273 .insns = {
274 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
275 offsetof(struct bpf_sk_lookup, remote_ip4)),
276 BPF_MOV32_IMM(BPF_REG_0, 0),
277 BPF_EXIT_INSN(),
279 .errstr = "invalid bpf_context access",
280 .result = REJECT,
281 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
282 .expected_attach_type = BPF_SK_LOOKUP,
285 "invalid 8-byte read from bpf_sk_lookup remote_ip6 field",
286 .insns = {
287 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
288 offsetof(struct bpf_sk_lookup, remote_ip6)),
289 BPF_MOV32_IMM(BPF_REG_0, 0),
290 BPF_EXIT_INSN(),
292 .errstr = "invalid bpf_context access",
293 .result = REJECT,
294 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
295 .expected_attach_type = BPF_SK_LOOKUP,
296 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
299 "invalid 8-byte read from bpf_sk_lookup remote_port field",
300 .insns = {
301 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
302 offsetof(struct bpf_sk_lookup, remote_port)),
303 BPF_MOV32_IMM(BPF_REG_0, 0),
304 BPF_EXIT_INSN(),
306 .errstr = "invalid bpf_context access",
307 .result = REJECT,
308 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
309 .expected_attach_type = BPF_SK_LOOKUP,
310 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
313 "invalid 8-byte read from bpf_sk_lookup local_ip4 field",
314 .insns = {
315 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
316 offsetof(struct bpf_sk_lookup, local_ip4)),
317 BPF_MOV32_IMM(BPF_REG_0, 0),
318 BPF_EXIT_INSN(),
320 .errstr = "invalid bpf_context access",
321 .result = REJECT,
322 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
323 .expected_attach_type = BPF_SK_LOOKUP,
326 "invalid 8-byte read from bpf_sk_lookup local_ip6 field",
327 .insns = {
328 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
329 offsetof(struct bpf_sk_lookup, local_ip6)),
330 BPF_MOV32_IMM(BPF_REG_0, 0),
331 BPF_EXIT_INSN(),
333 .errstr = "invalid bpf_context access",
334 .result = REJECT,
335 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
336 .expected_attach_type = BPF_SK_LOOKUP,
337 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
340 "invalid 8-byte read from bpf_sk_lookup local_port field",
341 .insns = {
342 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
343 offsetof(struct bpf_sk_lookup, local_port)),
344 BPF_MOV32_IMM(BPF_REG_0, 0),
345 BPF_EXIT_INSN(),
347 .errstr = "invalid bpf_context access",
348 .result = REJECT,
349 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
350 .expected_attach_type = BPF_SK_LOOKUP,
351 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
353 /* invalid 1,2,4-byte reads from 8-byte fields in bpf_sk_lookup */
355 "invalid 4-byte read from bpf_sk_lookup sk field",
356 .insns = {
357 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
358 offsetof(struct bpf_sk_lookup, sk)),
359 BPF_MOV32_IMM(BPF_REG_0, 0),
360 BPF_EXIT_INSN(),
362 .errstr = "invalid bpf_context access",
363 .result = REJECT,
364 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
365 .expected_attach_type = BPF_SK_LOOKUP,
368 "invalid 2-byte read from bpf_sk_lookup sk field",
369 .insns = {
370 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
371 offsetof(struct bpf_sk_lookup, sk)),
372 BPF_MOV32_IMM(BPF_REG_0, 0),
373 BPF_EXIT_INSN(),
375 .errstr = "invalid bpf_context access",
376 .result = REJECT,
377 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
378 .expected_attach_type = BPF_SK_LOOKUP,
381 "invalid 1-byte read from bpf_sk_lookup sk field",
382 .insns = {
383 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
384 offsetof(struct bpf_sk_lookup, sk)),
385 BPF_MOV32_IMM(BPF_REG_0, 0),
386 BPF_EXIT_INSN(),
388 .errstr = "invalid bpf_context access",
389 .result = REJECT,
390 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
391 .expected_attach_type = BPF_SK_LOOKUP,
393 /* out of bounds and unaligned reads from bpf_sk_lookup */
395 "invalid 4-byte read past end of bpf_sk_lookup",
396 .insns = {
397 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
398 sizeof(struct bpf_sk_lookup)),
399 BPF_MOV32_IMM(BPF_REG_0, 0),
400 BPF_EXIT_INSN(),
402 .errstr = "invalid bpf_context access",
403 .result = REJECT,
404 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
405 .expected_attach_type = BPF_SK_LOOKUP,
408 "invalid 4-byte unaligned read from bpf_sk_lookup at odd offset",
409 .insns = {
410 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 1),
411 BPF_MOV32_IMM(BPF_REG_0, 0),
412 BPF_EXIT_INSN(),
414 .errstr = "invalid bpf_context access",
415 .result = REJECT,
416 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
417 .expected_attach_type = BPF_SK_LOOKUP,
418 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
421 "invalid 4-byte unaligned read from bpf_sk_lookup at even offset",
422 .insns = {
423 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 2),
424 BPF_MOV32_IMM(BPF_REG_0, 0),
425 BPF_EXIT_INSN(),
427 .errstr = "invalid bpf_context access",
428 .result = REJECT,
429 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
430 .expected_attach_type = BPF_SK_LOOKUP,
431 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
433 /* in-bound and out-of-bound writes to bpf_sk_lookup */
435 "invalid 8-byte write to bpf_sk_lookup",
436 .insns = {
437 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
438 BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 0),
439 BPF_MOV32_IMM(BPF_REG_0, 0),
440 BPF_EXIT_INSN(),
442 .errstr = "invalid bpf_context access",
443 .result = REJECT,
444 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
445 .expected_attach_type = BPF_SK_LOOKUP,
448 "invalid 4-byte write to bpf_sk_lookup",
449 .insns = {
450 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
451 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
452 BPF_MOV32_IMM(BPF_REG_0, 0),
453 BPF_EXIT_INSN(),
455 .errstr = "invalid bpf_context access",
456 .result = REJECT,
457 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
458 .expected_attach_type = BPF_SK_LOOKUP,
461 "invalid 2-byte write to bpf_sk_lookup",
462 .insns = {
463 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
464 BPF_STX_MEM(BPF_H, BPF_REG_1, BPF_REG_0, 0),
465 BPF_MOV32_IMM(BPF_REG_0, 0),
466 BPF_EXIT_INSN(),
468 .errstr = "invalid bpf_context access",
469 .result = REJECT,
470 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
471 .expected_attach_type = BPF_SK_LOOKUP,
474 "invalid 1-byte write to bpf_sk_lookup",
475 .insns = {
476 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
477 BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0, 0),
478 BPF_MOV32_IMM(BPF_REG_0, 0),
479 BPF_EXIT_INSN(),
481 .errstr = "invalid bpf_context access",
482 .result = REJECT,
483 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
484 .expected_attach_type = BPF_SK_LOOKUP,
487 "invalid 4-byte write past end of bpf_sk_lookup",
488 .insns = {
489 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
490 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_0,
491 sizeof(struct bpf_sk_lookup)),
492 BPF_MOV32_IMM(BPF_REG_0, 0),
493 BPF_EXIT_INSN(),
495 .errstr = "invalid bpf_context access",
496 .result = REJECT,
497 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
498 .expected_attach_type = BPF_SK_LOOKUP,