1 { 2 "direct map access, write test 1", 3 .insns = { 4 BPF_MOV64_IMM(BPF_REG_0, 1), 5 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 0), 6 BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 4242), 7 BPF_EXIT_INSN(), 8 }, 9 .fixup_map_array_48b = { 1 }, 10 .result = ACCEPT, 11 .retval = 1, 12 }, 13 { 14 "direct map access, write test 2", 15 .insns = { 16 BPF_MOV64_IMM(BPF_REG_0, 1), 17 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 8), 18 BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 4242), 19 BPF_EXIT_INSN(), 20 }, 21 .fixup_map_array_48b = { 1 }, 22 .result = ACCEPT, 23 .retval = 1, 24 }, 25 { 26 "direct map access, write test 3", 27 .insns = { 28 BPF_MOV64_IMM(BPF_REG_0, 1), 29 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 8), 30 BPF_ST_MEM(BPF_DW, BPF_REG_1, 8, 4242), 31 BPF_EXIT_INSN(), 32 }, 33 .fixup_map_array_48b = { 1 }, 34 .result = ACCEPT, 35 .retval = 1, 36 }, 37 { 38 "direct map access, write test 4", 39 .insns = { 40 BPF_MOV64_IMM(BPF_REG_0, 1), 41 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 40), 42 BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 4242), 43 BPF_EXIT_INSN(), 44 }, 45 .fixup_map_array_48b = { 1 }, 46 .result = ACCEPT, 47 .retval = 1, 48 }, 49 { 50 "direct map access, write test 5", 51 .insns = { 52 BPF_MOV64_IMM(BPF_REG_0, 1), 53 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 32), 54 BPF_ST_MEM(BPF_DW, BPF_REG_1, 8, 4242), 55 BPF_EXIT_INSN(), 56 }, 57 .fixup_map_array_48b = { 1 }, 58 .result = ACCEPT, 59 .retval = 1, 60 }, 61 { 62 "direct map access, write test 6", 63 .insns = { 64 BPF_MOV64_IMM(BPF_REG_0, 1), 65 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 40), 66 BPF_ST_MEM(BPF_DW, BPF_REG_1, 4, 4242), 67 BPF_EXIT_INSN(), 68 }, 69 .fixup_map_array_48b = { 1 }, 70 .result = REJECT, 71 .errstr = "R1 min value is outside of the allowed memory range", 72 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 73 }, 74 { 75 "direct map access, write test 7", 76 .insns = { 77 BPF_MOV64_IMM(BPF_REG_0, 1), 78 BPF_LD_MAP_VALUE(BPF_REG_1, 0, -1), 79 BPF_ST_MEM(BPF_DW, BPF_REG_1, 4, 4242), 80 BPF_EXIT_INSN(), 81 }, 82 .fixup_map_array_48b = { 1 }, 83 .result = REJECT, 84 .errstr = "direct value offset of 4294967295 is not allowed", 85 }, 86 { 87 "direct map access, write test 8", 88 .insns = { 89 BPF_MOV64_IMM(BPF_REG_0, 1), 90 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 1), 91 BPF_ST_MEM(BPF_DW, BPF_REG_1, -1, 4242), 92 BPF_EXIT_INSN(), 93 }, 94 .fixup_map_array_48b = { 1 }, 95 .result = ACCEPT, 96 .retval = 1, 97 }, 98 { 99 "direct map access, write test 9", 100 .insns = { 101 BPF_MOV64_IMM(BPF_REG_0, 1), 102 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 48), 103 BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 4242), 104 BPF_EXIT_INSN(), 105 }, 106 .fixup_map_array_48b = { 1 }, 107 .result = REJECT, 108 .errstr = "invalid access to map value pointer", 109 }, 110 { 111 "direct map access, write test 10", 112 .insns = { 113 BPF_MOV64_IMM(BPF_REG_0, 1), 114 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 47), 115 BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 4), 116 BPF_EXIT_INSN(), 117 }, 118 .fixup_map_array_48b = { 1 }, 119 .result = ACCEPT, 120 .retval = 1, 121 }, 122 { 123 "direct map access, write test 11", 124 .insns = { 125 BPF_MOV64_IMM(BPF_REG_0, 1), 126 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 48), 127 BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 4), 128 BPF_EXIT_INSN(), 129 }, 130 .fixup_map_array_48b = { 1 }, 131 .result = REJECT, 132 .errstr = "invalid access to map value pointer", 133 }, 134 { 135 "direct map access, write test 12", 136 .insns = { 137 BPF_MOV64_IMM(BPF_REG_0, 1), 138 BPF_LD_MAP_VALUE(BPF_REG_1, 0, (1<<29)), 139 BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 4), 140 BPF_EXIT_INSN(), 141 }, 142 .fixup_map_array_48b = { 1 }, 143 .result = REJECT, 144 .errstr = "direct value offset of 536870912 is not allowed", 145 }, 146 { 147 "direct map access, write test 13", 148 .insns = { 149 BPF_MOV64_IMM(BPF_REG_0, 1), 150 BPF_LD_MAP_VALUE(BPF_REG_1, 0, (1<<29)-1), 151 BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 4), 152 BPF_EXIT_INSN(), 153 }, 154 .fixup_map_array_48b = { 1 }, 155 .result = REJECT, 156 .errstr = "invalid access to map value pointer, value_size=48 off=536870911", 157 }, 158 { 159 "direct map access, write test 14", 160 .insns = { 161 BPF_MOV64_IMM(BPF_REG_0, 1), 162 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 47), 163 BPF_LD_MAP_VALUE(BPF_REG_2, 0, 46), 164 BPF_ST_MEM(BPF_H, BPF_REG_2, 0, 0xffff), 165 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 0), 166 BPF_EXIT_INSN(), 167 }, 168 .fixup_map_array_48b = { 1, 3 }, 169 .result = ACCEPT, 170 .retval = 0xff, 171 }, 172 { 173 "direct map access, write test 15", 174 .insns = { 175 BPF_MOV64_IMM(BPF_REG_0, 1), 176 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 46), 177 BPF_LD_MAP_VALUE(BPF_REG_2, 0, 46), 178 BPF_ST_MEM(BPF_H, BPF_REG_2, 0, 0xffff), 179 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 0), 180 BPF_EXIT_INSN(), 181 }, 182 .fixup_map_array_48b = { 1, 3 }, 183 .result = ACCEPT, 184 .retval = 0xffff, 185 }, 186 { 187 "direct map access, write test 16", 188 .insns = { 189 BPF_MOV64_IMM(BPF_REG_0, 1), 190 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 46), 191 BPF_LD_MAP_VALUE(BPF_REG_2, 0, 47), 192 BPF_ST_MEM(BPF_H, BPF_REG_2, 0, 0xffff), 193 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 0), 194 BPF_EXIT_INSN(), 195 }, 196 .fixup_map_array_48b = { 1, 3 }, 197 .result = REJECT, 198 .errstr = "invalid access to map value, value_size=48 off=47 size=2", 199 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 200 }, 201 { 202 "direct map access, write test 17", 203 .insns = { 204 BPF_MOV64_IMM(BPF_REG_0, 1), 205 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 46), 206 BPF_LD_MAP_VALUE(BPF_REG_2, 0, 46), 207 BPF_ST_MEM(BPF_H, BPF_REG_2, 1, 0xffff), 208 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 0), 209 BPF_EXIT_INSN(), 210 }, 211 .fixup_map_array_48b = { 1, 3 }, 212 .result = REJECT, 213 .errstr = "invalid access to map value, value_size=48 off=47 size=2", 214 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 215 }, 216 { 217 "direct map access, write test 18", 218 .insns = { 219 BPF_MOV64_IMM(BPF_REG_0, 1), 220 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 0), 221 BPF_ST_MEM(BPF_H, BPF_REG_1, 0, 42), 222 BPF_EXIT_INSN(), 223 }, 224 .fixup_map_array_small = { 1 }, 225 .result = REJECT, 226 .errstr = "R1 min value is outside of the allowed memory range", 227 }, 228 { 229 "direct map access, write test 19", 230 .insns = { 231 BPF_MOV64_IMM(BPF_REG_0, 1), 232 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 0), 233 BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 42), 234 BPF_EXIT_INSN(), 235 }, 236 .fixup_map_array_small = { 1 }, 237 .result = ACCEPT, 238 .retval = 1, 239 }, 240 { 241 "direct map access, write test 20", 242 .insns = { 243 BPF_MOV64_IMM(BPF_REG_0, 1), 244 BPF_LD_MAP_VALUE(BPF_REG_1, 0, 1), 245 BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 42), 246 BPF_EXIT_INSN(), 247 }, 248 .fixup_map_array_small = { 1 }, 249 .result = REJECT, 250 .errstr = "invalid access to map value pointer", 251 }, 252 { 253 "direct map access, invalid insn test 1", 254 .insns = { 255 BPF_MOV64_IMM(BPF_REG_0, 1), 256 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, 0, 1, 0, 47), 257 BPF_EXIT_INSN(), 258 }, 259 .fixup_map_array_48b = { 1 }, 260 .result = REJECT, 261 .errstr = "invalid bpf_ld_imm64 insn", 262 }, 263 { 264 "direct map access, invalid insn test 2", 265 .insns = { 266 BPF_MOV64_IMM(BPF_REG_0, 1), 267 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, 1, 0, 0, 47), 268 BPF_EXIT_INSN(), 269 }, 270 .fixup_map_array_48b = { 1 }, 271 .result = REJECT, 272 .errstr = "BPF_LD_IMM64 uses reserved fields", 273 }, 274 { 275 "direct map access, invalid insn test 3", 276 .insns = { 277 BPF_MOV64_IMM(BPF_REG_0, 1), 278 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, ~0, 0, 0, 47), 279 BPF_EXIT_INSN(), 280 }, 281 .fixup_map_array_48b = { 1 }, 282 .result = REJECT, 283 .errstr = "BPF_LD_IMM64 uses reserved fields", 284 }, 285 { 286 "direct map access, invalid insn test 4", 287 .insns = { 288 BPF_MOV64_IMM(BPF_REG_0, 1), 289 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, 0, ~0, 0, 47), 290 BPF_EXIT_INSN(), 291 }, 292 .fixup_map_array_48b = { 1 }, 293 .result = REJECT, 294 .errstr = "invalid bpf_ld_imm64 insn", 295 }, 296 { 297 "direct map access, invalid insn test 5", 298 .insns = { 299 BPF_MOV64_IMM(BPF_REG_0, 1), 300 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, ~0, ~0, 0, 47), 301 BPF_EXIT_INSN(), 302 }, 303 .fixup_map_array_48b = { 1 }, 304 .result = REJECT, 305 .errstr = "invalid bpf_ld_imm64 insn", 306 }, 307 { 308 "direct map access, invalid insn test 6", 309 .insns = { 310 BPF_MOV64_IMM(BPF_REG_0, 1), 311 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_FD, ~0, 0, 0, 0), 312 BPF_EXIT_INSN(), 313 }, 314 .fixup_map_array_48b = { 1 }, 315 .result = REJECT, 316 .errstr = "BPF_LD_IMM64 uses reserved fields", 317 }, 318 { 319 "direct map access, invalid insn test 7", 320 .insns = { 321 BPF_MOV64_IMM(BPF_REG_0, 1), 322 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_FD, 0, ~0, 0, 0), 323 BPF_EXIT_INSN(), 324 }, 325 .fixup_map_array_48b = { 1 }, 326 .result = REJECT, 327 .errstr = "invalid bpf_ld_imm64 insn", 328 }, 329 { 330 "direct map access, invalid insn test 8", 331 .insns = { 332 BPF_MOV64_IMM(BPF_REG_0, 1), 333 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_FD, ~0, ~0, 0, 0), 334 BPF_EXIT_INSN(), 335 }, 336 .fixup_map_array_48b = { 1 }, 337 .result = REJECT, 338 .errstr = "invalid bpf_ld_imm64 insn", 339 }, 340 { 341 "direct map access, invalid insn test 9", 342 .insns = { 343 BPF_MOV64_IMM(BPF_REG_0, 1), 344 BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_FD, 0, 0, 0, 47), 345 BPF_EXIT_INSN(), 346 }, 347 .fixup_map_array_48b = { 1 }, 348 .result = REJECT, 349 .errstr = "unrecognized bpf_ld_imm64 insn", 350 }, 351