WIP FPC-III support
[linux/fpc-iii.git] / tools / testing / selftests / bpf / verifier / cgroup_storage.c
blob97057c0a1b8aa1c9fbebcac14dac28e96b412b4a
2 "valid cgroup storage access",
3 .insns = {
4 BPF_MOV64_IMM(BPF_REG_2, 0),
5 BPF_LD_MAP_FD(BPF_REG_1, 0),
6 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
7 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
8 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
9 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
10 BPF_EXIT_INSN(),
12 .fixup_cgroup_storage = { 1 },
13 .result = ACCEPT,
14 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
17 "invalid cgroup storage access 1",
18 .insns = {
19 BPF_MOV64_IMM(BPF_REG_2, 0),
20 BPF_LD_MAP_FD(BPF_REG_1, 0),
21 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
22 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
23 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
24 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
25 BPF_EXIT_INSN(),
27 .fixup_map_hash_8b = { 1 },
28 .result = REJECT,
29 .errstr = "cannot pass map_type 1 into func bpf_get_local_storage",
30 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
33 "invalid cgroup storage access 2",
34 .insns = {
35 BPF_MOV64_IMM(BPF_REG_2, 0),
36 BPF_LD_MAP_FD(BPF_REG_1, 1),
37 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
38 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
39 BPF_EXIT_INSN(),
41 .result = REJECT,
42 .errstr = "fd 1 is not pointing to valid bpf_map",
43 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
46 "invalid cgroup storage access 3",
47 .insns = {
48 BPF_MOV64_IMM(BPF_REG_2, 0),
49 BPF_LD_MAP_FD(BPF_REG_1, 0),
50 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
51 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 256),
52 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 1),
53 BPF_MOV64_IMM(BPF_REG_0, 0),
54 BPF_EXIT_INSN(),
56 .fixup_cgroup_storage = { 1 },
57 .result = REJECT,
58 .errstr = "invalid access to map value, value_size=64 off=256 size=4",
59 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
62 "invalid cgroup storage access 4",
63 .insns = {
64 BPF_MOV64_IMM(BPF_REG_2, 0),
65 BPF_LD_MAP_FD(BPF_REG_1, 0),
66 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
67 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, -2),
68 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
69 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 1),
70 BPF_EXIT_INSN(),
72 .fixup_cgroup_storage = { 1 },
73 .result = REJECT,
74 .errstr = "invalid access to map value, value_size=64 off=-2 size=4",
75 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
76 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
79 "invalid cgroup storage access 5",
80 .insns = {
81 BPF_MOV64_IMM(BPF_REG_2, 7),
82 BPF_LD_MAP_FD(BPF_REG_1, 0),
83 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
84 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
85 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
86 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
87 BPF_EXIT_INSN(),
89 .fixup_cgroup_storage = { 1 },
90 .result = REJECT,
91 .errstr = "get_local_storage() doesn't support non-zero flags",
92 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
95 "invalid cgroup storage access 6",
96 .insns = {
97 BPF_MOV64_REG(BPF_REG_2, BPF_REG_1),
98 BPF_LD_MAP_FD(BPF_REG_1, 0),
99 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
100 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
101 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
102 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
103 BPF_EXIT_INSN(),
105 .fixup_cgroup_storage = { 1 },
106 .result = REJECT,
107 .errstr = "get_local_storage() doesn't support non-zero flags",
108 .errstr_unpriv = "R2 leaks addr into helper function",
109 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
112 "valid per-cpu cgroup storage access",
113 .insns = {
114 BPF_MOV64_IMM(BPF_REG_2, 0),
115 BPF_LD_MAP_FD(BPF_REG_1, 0),
116 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
117 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
118 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
119 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
120 BPF_EXIT_INSN(),
122 .fixup_percpu_cgroup_storage = { 1 },
123 .result = ACCEPT,
124 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
127 "invalid per-cpu cgroup storage access 1",
128 .insns = {
129 BPF_MOV64_IMM(BPF_REG_2, 0),
130 BPF_LD_MAP_FD(BPF_REG_1, 0),
131 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
132 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
133 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
134 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
135 BPF_EXIT_INSN(),
137 .fixup_map_hash_8b = { 1 },
138 .result = REJECT,
139 .errstr = "cannot pass map_type 1 into func bpf_get_local_storage",
140 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
143 "invalid per-cpu cgroup storage access 2",
144 .insns = {
145 BPF_MOV64_IMM(BPF_REG_2, 0),
146 BPF_LD_MAP_FD(BPF_REG_1, 1),
147 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
148 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
149 BPF_EXIT_INSN(),
151 .result = REJECT,
152 .errstr = "fd 1 is not pointing to valid bpf_map",
153 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
156 "invalid per-cpu cgroup storage access 3",
157 .insns = {
158 BPF_MOV64_IMM(BPF_REG_2, 0),
159 BPF_LD_MAP_FD(BPF_REG_1, 0),
160 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
161 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 256),
162 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 1),
163 BPF_MOV64_IMM(BPF_REG_0, 0),
164 BPF_EXIT_INSN(),
166 .fixup_percpu_cgroup_storage = { 1 },
167 .result = REJECT,
168 .errstr = "invalid access to map value, value_size=64 off=256 size=4",
169 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
172 "invalid per-cpu cgroup storage access 4",
173 .insns = {
174 BPF_MOV64_IMM(BPF_REG_2, 0),
175 BPF_LD_MAP_FD(BPF_REG_1, 0),
176 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
177 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, -2),
178 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
179 BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 1),
180 BPF_EXIT_INSN(),
182 .fixup_cgroup_storage = { 1 },
183 .result = REJECT,
184 .errstr = "invalid access to map value, value_size=64 off=-2 size=4",
185 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
186 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
189 "invalid per-cpu cgroup storage access 5",
190 .insns = {
191 BPF_MOV64_IMM(BPF_REG_2, 7),
192 BPF_LD_MAP_FD(BPF_REG_1, 0),
193 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
194 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
195 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
196 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
197 BPF_EXIT_INSN(),
199 .fixup_percpu_cgroup_storage = { 1 },
200 .result = REJECT,
201 .errstr = "get_local_storage() doesn't support non-zero flags",
202 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
205 "invalid per-cpu cgroup storage access 6",
206 .insns = {
207 BPF_MOV64_REG(BPF_REG_2, BPF_REG_1),
208 BPF_LD_MAP_FD(BPF_REG_1, 0),
209 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage),
210 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
211 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
212 BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1),
213 BPF_EXIT_INSN(),
215 .fixup_percpu_cgroup_storage = { 1 },
216 .result = REJECT,
217 .errstr = "get_local_storage() doesn't support non-zero flags",
218 .errstr_unpriv = "R2 leaks addr into helper function",
219 .prog_type = BPF_PROG_TYPE_CGROUP_SKB,