1 {
2 	"meta access, test1",
3 	.insns = {
4 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
5 		    offsetof(struct xdp_md, data_meta)),
6 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
7 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
8 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
9 	BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
10 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
11 	BPF_MOV64_IMM(BPF_REG_0, 0),
12 	BPF_EXIT_INSN(),
13 	},
14 	.result = ACCEPT,
15 	.prog_type = BPF_PROG_TYPE_XDP,
16 },
17 {
18 	"meta access, test2",
19 	.insns = {
20 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
21 		    offsetof(struct xdp_md, data_meta)),
22 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
23 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
24 	BPF_ALU64_IMM(BPF_SUB, BPF_REG_0, 8),
25 	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
26 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
27 	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1),
28 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_0, 0),
29 	BPF_MOV64_IMM(BPF_REG_0, 0),
30 	BPF_EXIT_INSN(),
31 	},
32 	.result = REJECT,
33 	.errstr = "invalid access to packet, off=-8",
34 	.prog_type = BPF_PROG_TYPE_XDP,
35 },
36 {
37 	"meta access, test3",
38 	.insns = {
39 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
40 		    offsetof(struct xdp_md, data_meta)),
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_0, BPF_REG_2),
44 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
45 	BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
46 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
47 	BPF_MOV64_IMM(BPF_REG_0, 0),
48 	BPF_EXIT_INSN(),
49 	},
50 	.result = REJECT,
51 	.errstr = "invalid access to packet",
52 	.prog_type = BPF_PROG_TYPE_XDP,
53 },
54 {
55 	"meta access, test4",
56 	.insns = {
57 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
58 		    offsetof(struct xdp_md, data_meta)),
59 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
60 		    offsetof(struct xdp_md, data_end)),
61 	BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, offsetof(struct xdp_md, data)),
62 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
63 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
64 	BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
65 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
66 	BPF_MOV64_IMM(BPF_REG_0, 0),
67 	BPF_EXIT_INSN(),
68 	},
69 	.result = REJECT,
70 	.errstr = "invalid access to packet",
71 	.prog_type = BPF_PROG_TYPE_XDP,
72 },
73 {
74 	"meta access, test5",
75 	.insns = {
76 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
77 		    offsetof(struct xdp_md, data_meta)),
78 	BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, offsetof(struct xdp_md, data)),
79 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
80 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
81 	BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_4, 3),
82 	BPF_MOV64_IMM(BPF_REG_2, -8),
83 	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_xdp_adjust_meta),
84 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_3, 0),
85 	BPF_MOV64_IMM(BPF_REG_0, 0),
86 	BPF_EXIT_INSN(),
87 	},
88 	.result = REJECT,
89 	.errstr = "R3 !read_ok",
90 	.prog_type = BPF_PROG_TYPE_XDP,
91 },
92 {
93 	"meta access, test6",
94 	.insns = {
95 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
96 		    offsetof(struct xdp_md, data_meta)),
97 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
98 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
99 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
100 	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
101 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
102 	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_0, 1),
103 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
104 	BPF_MOV64_IMM(BPF_REG_0, 0),
105 	BPF_EXIT_INSN(),
106 	},
107 	.result = REJECT,
108 	.errstr = "invalid access to packet",
109 	.prog_type = BPF_PROG_TYPE_XDP,
110 },
111 {
112 	"meta access, test7",
113 	.insns = {
114 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
115 		    offsetof(struct xdp_md, data_meta)),
116 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
117 	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
118 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
119 	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
120 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
121 	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1),
122 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
123 	BPF_MOV64_IMM(BPF_REG_0, 0),
124 	BPF_EXIT_INSN(),
125 	},
126 	.result = ACCEPT,
127 	.prog_type = BPF_PROG_TYPE_XDP,
128 },
129 {
130 	"meta access, test8",
131 	.insns = {
132 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
133 		    offsetof(struct xdp_md, data_meta)),
134 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
135 	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
136 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 0xFFFF),
137 	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1),
138 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
139 	BPF_MOV64_IMM(BPF_REG_0, 0),
140 	BPF_EXIT_INSN(),
141 	},
142 	.result = ACCEPT,
143 	.prog_type = BPF_PROG_TYPE_XDP,
144 },
145 {
146 	"meta access, test9",
147 	.insns = {
148 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
149 		    offsetof(struct xdp_md, data_meta)),
150 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
151 	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
152 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 0xFFFF),
153 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 1),
154 	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1),
155 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
156 	BPF_MOV64_IMM(BPF_REG_0, 0),
157 	BPF_EXIT_INSN(),
158 	},
159 	.result = REJECT,
160 	.errstr = "invalid access to packet",
161 	.prog_type = BPF_PROG_TYPE_XDP,
162 },
163 {
164 	"meta access, test10",
165 	.insns = {
166 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
167 		    offsetof(struct xdp_md, data_meta)),
168 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
169 	BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1,
170 		    offsetof(struct xdp_md, data_end)),
171 	BPF_MOV64_IMM(BPF_REG_5, 42),
172 	BPF_MOV64_IMM(BPF_REG_6, 24),
173 	BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_5, -8),
174 	BPF_STX_XADD(BPF_DW, BPF_REG_10, BPF_REG_6, -8),
175 	BPF_LDX_MEM(BPF_DW, BPF_REG_5, BPF_REG_10, -8),
176 	BPF_JMP_IMM(BPF_JGT, BPF_REG_5, 100, 6),
177 	BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_5),
178 	BPF_MOV64_REG(BPF_REG_5, BPF_REG_3),
179 	BPF_MOV64_REG(BPF_REG_6, BPF_REG_2),
180 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8),
181 	BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_5, 1),
182 	BPF_LDX_MEM(BPF_B, BPF_REG_2, BPF_REG_2, 0),
183 	BPF_MOV64_IMM(BPF_REG_0, 0),
184 	BPF_EXIT_INSN(),
185 	},
186 	.result = REJECT,
187 	.errstr = "invalid access to packet",
188 	.prog_type = BPF_PROG_TYPE_XDP,
189 },
190 {
191 	"meta access, test11",
192 	.insns = {
193 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
194 		    offsetof(struct xdp_md, data_meta)),
195 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
196 	BPF_MOV64_IMM(BPF_REG_5, 42),
197 	BPF_MOV64_IMM(BPF_REG_6, 24),
198 	BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_5, -8),
199 	BPF_STX_XADD(BPF_DW, BPF_REG_10, BPF_REG_6, -8),
200 	BPF_LDX_MEM(BPF_DW, BPF_REG_5, BPF_REG_10, -8),
201 	BPF_JMP_IMM(BPF_JGT, BPF_REG_5, 100, 6),
202 	BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_5),
203 	BPF_MOV64_REG(BPF_REG_5, BPF_REG_2),
204 	BPF_MOV64_REG(BPF_REG_6, BPF_REG_2),
205 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8),
206 	BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_3, 1),
207 	BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_5, 0),
208 	BPF_MOV64_IMM(BPF_REG_0, 0),
209 	BPF_EXIT_INSN(),
210 	},
211 	.result = ACCEPT,
212 	.prog_type = BPF_PROG_TYPE_XDP,
213 },
214 {
215 	"meta access, test12",
216 	.insns = {
217 	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
218 		    offsetof(struct xdp_md, data_meta)),
219 	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
220 	BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1,
221 		    offsetof(struct xdp_md, data_end)),
222 	BPF_MOV64_REG(BPF_REG_5, BPF_REG_3),
223 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 16),
224 	BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_4, 5),
225 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_3, 0),
226 	BPF_MOV64_REG(BPF_REG_5, BPF_REG_2),
227 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 16),
228 	BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 1),
229 	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
230 	BPF_MOV64_IMM(BPF_REG_0, 0),
231 	BPF_EXIT_INSN(),
232 	},
233 	.result = ACCEPT,
234 	.prog_type = BPF_PROG_TYPE_XDP,
235 },
236