Merge branch 'mhi-net-immutable' of https://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / tools / testing / selftests / bpf / verifier / meta_access.c
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_ATOMIC_OP(BPF_DW, BPF_ADD, 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_ATOMIC_OP(BPF_DW, BPF_ADD, 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 },