Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: verifier/cgroup_storage.c converted to inline assembly

Test verifier/cgroup_storage.c automatically converted to use inline assembly.

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20230325025524.144043-15-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Eduard Zingerman and committed by
Alexei Starovoitov
8f16f3c0 b1b63725

+310 -220
+2
tools/testing/selftests/bpf/prog_tests/verifier.c
··· 11 11 #include "verifier_cfg.skel.h" 12 12 #include "verifier_cgroup_inv_retcode.skel.h" 13 13 #include "verifier_cgroup_skb.skel.h" 14 + #include "verifier_cgroup_storage.skel.h" 14 15 15 16 __maybe_unused 16 17 static void run_tests_aux(const char *skel_name, skel_elf_bytes_fn elf_bytes_factory) ··· 45 44 void test_verifier_cfg(void) { RUN(verifier_cfg); } 46 45 void test_verifier_cgroup_inv_retcode(void) { RUN(verifier_cgroup_inv_retcode); } 47 46 void test_verifier_cgroup_skb(void) { RUN(verifier_cgroup_skb); } 47 + void test_verifier_cgroup_storage(void) { RUN(verifier_cgroup_storage); }
+308
tools/testing/selftests/bpf/progs/verifier_cgroup_storage.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* Converted from tools/testing/selftests/bpf/verifier/cgroup_storage.c */ 3 + 4 + #include <linux/bpf.h> 5 + #include <bpf/bpf_helpers.h> 6 + #include "../../../include/linux/filter.h" 7 + #include "bpf_misc.h" 8 + 9 + struct { 10 + __uint(type, BPF_MAP_TYPE_CGROUP_STORAGE); 11 + __uint(max_entries, 0); 12 + __type(key, struct bpf_cgroup_storage_key); 13 + __type(value, char[TEST_DATA_LEN]); 14 + } cgroup_storage SEC(".maps"); 15 + 16 + struct { 17 + __uint(type, BPF_MAP_TYPE_HASH); 18 + __uint(max_entries, 1); 19 + __type(key, long long); 20 + __type(value, long long); 21 + } map_hash_8b SEC(".maps"); 22 + 23 + struct { 24 + __uint(type, BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE); 25 + __uint(max_entries, 0); 26 + __type(key, struct bpf_cgroup_storage_key); 27 + __type(value, char[64]); 28 + } percpu_cgroup_storage SEC(".maps"); 29 + 30 + SEC("cgroup/skb") 31 + __description("valid cgroup storage access") 32 + __success __success_unpriv __retval(0) 33 + __naked void valid_cgroup_storage_access(void) 34 + { 35 + asm volatile (" \ 36 + r2 = 0; \ 37 + r1 = %[cgroup_storage] ll; \ 38 + call %[bpf_get_local_storage]; \ 39 + r1 = *(u32*)(r0 + 0); \ 40 + r0 = r1; \ 41 + r0 &= 1; \ 42 + exit; \ 43 + " : 44 + : __imm(bpf_get_local_storage), 45 + __imm_addr(cgroup_storage) 46 + : __clobber_all); 47 + } 48 + 49 + SEC("cgroup/skb") 50 + __description("invalid cgroup storage access 1") 51 + __failure __msg("cannot pass map_type 1 into func bpf_get_local_storage") 52 + __failure_unpriv 53 + __naked void invalid_cgroup_storage_access_1(void) 54 + { 55 + asm volatile (" \ 56 + r2 = 0; \ 57 + r1 = %[map_hash_8b] ll; \ 58 + call %[bpf_get_local_storage]; \ 59 + r1 = *(u32*)(r0 + 0); \ 60 + r0 = r1; \ 61 + r0 &= 1; \ 62 + exit; \ 63 + " : 64 + : __imm(bpf_get_local_storage), 65 + __imm_addr(map_hash_8b) 66 + : __clobber_all); 67 + } 68 + 69 + SEC("cgroup/skb") 70 + __description("invalid cgroup storage access 2") 71 + __failure __msg("fd 1 is not pointing to valid bpf_map") 72 + __failure_unpriv 73 + __naked void invalid_cgroup_storage_access_2(void) 74 + { 75 + asm volatile (" \ 76 + r2 = 0; \ 77 + .8byte %[ld_map_fd]; \ 78 + .8byte 0; \ 79 + call %[bpf_get_local_storage]; \ 80 + r0 &= 1; \ 81 + exit; \ 82 + " : 83 + : __imm(bpf_get_local_storage), 84 + __imm_insn(ld_map_fd, BPF_RAW_INSN(BPF_LD | BPF_DW | BPF_IMM, BPF_REG_1, BPF_PSEUDO_MAP_FD, 0, 1)) 85 + : __clobber_all); 86 + } 87 + 88 + SEC("cgroup/skb") 89 + __description("invalid cgroup storage access 3") 90 + __failure __msg("invalid access to map value, value_size=64 off=256 size=4") 91 + __failure_unpriv 92 + __naked void invalid_cgroup_storage_access_3(void) 93 + { 94 + asm volatile (" \ 95 + r2 = 0; \ 96 + r1 = %[cgroup_storage] ll; \ 97 + call %[bpf_get_local_storage]; \ 98 + r1 = *(u32*)(r0 + 256); \ 99 + r1 += 1; \ 100 + r0 = 0; \ 101 + exit; \ 102 + " : 103 + : __imm(bpf_get_local_storage), 104 + __imm_addr(cgroup_storage) 105 + : __clobber_all); 106 + } 107 + 108 + SEC("cgroup/skb") 109 + __description("invalid cgroup storage access 4") 110 + __failure __msg("invalid access to map value, value_size=64 off=-2 size=4") 111 + __failure_unpriv 112 + __flag(BPF_F_ANY_ALIGNMENT) 113 + __naked void invalid_cgroup_storage_access_4(void) 114 + { 115 + asm volatile (" \ 116 + r2 = 0; \ 117 + r1 = %[cgroup_storage] ll; \ 118 + call %[bpf_get_local_storage]; \ 119 + r1 = *(u32*)(r0 - 2); \ 120 + r0 = r1; \ 121 + r1 += 1; \ 122 + exit; \ 123 + " : 124 + : __imm(bpf_get_local_storage), 125 + __imm_addr(cgroup_storage) 126 + : __clobber_all); 127 + } 128 + 129 + SEC("cgroup/skb") 130 + __description("invalid cgroup storage access 5") 131 + __failure __msg("get_local_storage() doesn't support non-zero flags") 132 + __failure_unpriv 133 + __naked void invalid_cgroup_storage_access_5(void) 134 + { 135 + asm volatile (" \ 136 + r2 = 7; \ 137 + r1 = %[cgroup_storage] ll; \ 138 + call %[bpf_get_local_storage]; \ 139 + r1 = *(u32*)(r0 + 0); \ 140 + r0 = r1; \ 141 + r0 &= 1; \ 142 + exit; \ 143 + " : 144 + : __imm(bpf_get_local_storage), 145 + __imm_addr(cgroup_storage) 146 + : __clobber_all); 147 + } 148 + 149 + SEC("cgroup/skb") 150 + __description("invalid cgroup storage access 6") 151 + __failure __msg("get_local_storage() doesn't support non-zero flags") 152 + __msg_unpriv("R2 leaks addr into helper function") 153 + __naked void invalid_cgroup_storage_access_6(void) 154 + { 155 + asm volatile (" \ 156 + r2 = r1; \ 157 + r1 = %[cgroup_storage] ll; \ 158 + call %[bpf_get_local_storage]; \ 159 + r1 = *(u32*)(r0 + 0); \ 160 + r0 = r1; \ 161 + r0 &= 1; \ 162 + exit; \ 163 + " : 164 + : __imm(bpf_get_local_storage), 165 + __imm_addr(cgroup_storage) 166 + : __clobber_all); 167 + } 168 + 169 + SEC("cgroup/skb") 170 + __description("valid per-cpu cgroup storage access") 171 + __success __success_unpriv __retval(0) 172 + __naked void per_cpu_cgroup_storage_access(void) 173 + { 174 + asm volatile (" \ 175 + r2 = 0; \ 176 + r1 = %[percpu_cgroup_storage] ll; \ 177 + call %[bpf_get_local_storage]; \ 178 + r1 = *(u32*)(r0 + 0); \ 179 + r0 = r1; \ 180 + r0 &= 1; \ 181 + exit; \ 182 + " : 183 + : __imm(bpf_get_local_storage), 184 + __imm_addr(percpu_cgroup_storage) 185 + : __clobber_all); 186 + } 187 + 188 + SEC("cgroup/skb") 189 + __description("invalid per-cpu cgroup storage access 1") 190 + __failure __msg("cannot pass map_type 1 into func bpf_get_local_storage") 191 + __failure_unpriv 192 + __naked void cpu_cgroup_storage_access_1(void) 193 + { 194 + asm volatile (" \ 195 + r2 = 0; \ 196 + r1 = %[map_hash_8b] ll; \ 197 + call %[bpf_get_local_storage]; \ 198 + r1 = *(u32*)(r0 + 0); \ 199 + r0 = r1; \ 200 + r0 &= 1; \ 201 + exit; \ 202 + " : 203 + : __imm(bpf_get_local_storage), 204 + __imm_addr(map_hash_8b) 205 + : __clobber_all); 206 + } 207 + 208 + SEC("cgroup/skb") 209 + __description("invalid per-cpu cgroup storage access 2") 210 + __failure __msg("fd 1 is not pointing to valid bpf_map") 211 + __failure_unpriv 212 + __naked void cpu_cgroup_storage_access_2(void) 213 + { 214 + asm volatile (" \ 215 + r2 = 0; \ 216 + .8byte %[ld_map_fd]; \ 217 + .8byte 0; \ 218 + call %[bpf_get_local_storage]; \ 219 + r0 &= 1; \ 220 + exit; \ 221 + " : 222 + : __imm(bpf_get_local_storage), 223 + __imm_insn(ld_map_fd, BPF_RAW_INSN(BPF_LD | BPF_DW | BPF_IMM, BPF_REG_1, BPF_PSEUDO_MAP_FD, 0, 1)) 224 + : __clobber_all); 225 + } 226 + 227 + SEC("cgroup/skb") 228 + __description("invalid per-cpu cgroup storage access 3") 229 + __failure __msg("invalid access to map value, value_size=64 off=256 size=4") 230 + __failure_unpriv 231 + __naked void cpu_cgroup_storage_access_3(void) 232 + { 233 + asm volatile (" \ 234 + r2 = 0; \ 235 + r1 = %[percpu_cgroup_storage] ll; \ 236 + call %[bpf_get_local_storage]; \ 237 + r1 = *(u32*)(r0 + 256); \ 238 + r1 += 1; \ 239 + r0 = 0; \ 240 + exit; \ 241 + " : 242 + : __imm(bpf_get_local_storage), 243 + __imm_addr(percpu_cgroup_storage) 244 + : __clobber_all); 245 + } 246 + 247 + SEC("cgroup/skb") 248 + __description("invalid per-cpu cgroup storage access 4") 249 + __failure __msg("invalid access to map value, value_size=64 off=-2 size=4") 250 + __failure_unpriv 251 + __flag(BPF_F_ANY_ALIGNMENT) 252 + __naked void cpu_cgroup_storage_access_4(void) 253 + { 254 + asm volatile (" \ 255 + r2 = 0; \ 256 + r1 = %[cgroup_storage] ll; \ 257 + call %[bpf_get_local_storage]; \ 258 + r1 = *(u32*)(r0 - 2); \ 259 + r0 = r1; \ 260 + r1 += 1; \ 261 + exit; \ 262 + " : 263 + : __imm(bpf_get_local_storage), 264 + __imm_addr(cgroup_storage) 265 + : __clobber_all); 266 + } 267 + 268 + SEC("cgroup/skb") 269 + __description("invalid per-cpu cgroup storage access 5") 270 + __failure __msg("get_local_storage() doesn't support non-zero flags") 271 + __failure_unpriv 272 + __naked void cpu_cgroup_storage_access_5(void) 273 + { 274 + asm volatile (" \ 275 + r2 = 7; \ 276 + r1 = %[percpu_cgroup_storage] ll; \ 277 + call %[bpf_get_local_storage]; \ 278 + r1 = *(u32*)(r0 + 0); \ 279 + r0 = r1; \ 280 + r0 &= 1; \ 281 + exit; \ 282 + " : 283 + : __imm(bpf_get_local_storage), 284 + __imm_addr(percpu_cgroup_storage) 285 + : __clobber_all); 286 + } 287 + 288 + SEC("cgroup/skb") 289 + __description("invalid per-cpu cgroup storage access 6") 290 + __failure __msg("get_local_storage() doesn't support non-zero flags") 291 + __msg_unpriv("R2 leaks addr into helper function") 292 + __naked void cpu_cgroup_storage_access_6(void) 293 + { 294 + asm volatile (" \ 295 + r2 = r1; \ 296 + r1 = %[percpu_cgroup_storage] ll; \ 297 + call %[bpf_get_local_storage]; \ 298 + r1 = *(u32*)(r0 + 0); \ 299 + r0 = r1; \ 300 + r0 &= 1; \ 301 + exit; \ 302 + " : 303 + : __imm(bpf_get_local_storage), 304 + __imm_addr(percpu_cgroup_storage) 305 + : __clobber_all); 306 + } 307 + 308 + char _license[] SEC("license") = "GPL";
-220
tools/testing/selftests/bpf/verifier/cgroup_storage.c
··· 1 - { 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(), 11 - }, 12 - .fixup_cgroup_storage = { 1 }, 13 - .result = ACCEPT, 14 - .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 15 - }, 16 - { 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(), 26 - }, 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, 31 - }, 32 - { 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(), 40 - }, 41 - .result = REJECT, 42 - .errstr = "fd 1 is not pointing to valid bpf_map", 43 - .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 44 - }, 45 - { 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(), 55 - }, 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, 60 - }, 61 - { 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(), 71 - }, 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, 77 - }, 78 - { 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(), 88 - }, 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, 93 - }, 94 - { 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(), 104 - }, 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, 110 - }, 111 - { 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(), 121 - }, 122 - .fixup_percpu_cgroup_storage = { 1 }, 123 - .result = ACCEPT, 124 - .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 125 - }, 126 - { 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(), 136 - }, 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, 141 - }, 142 - { 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(), 150 - }, 151 - .result = REJECT, 152 - .errstr = "fd 1 is not pointing to valid bpf_map", 153 - .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 154 - }, 155 - { 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(), 165 - }, 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, 170 - }, 171 - { 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(), 181 - }, 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, 187 - }, 188 - { 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(), 198 - }, 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, 203 - }, 204 - { 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(), 214 - }, 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, 220 - },