18c2ecf20Sopenharmony_ci{ 28c2ecf20Sopenharmony_ci "invalid and of negative number", 38c2ecf20Sopenharmony_ci .insns = { 48c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 58c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 68c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 78c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 88c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 98c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 4), 108c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_1, BPF_REG_0, 0), 118c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, BPF_REG_1, -4), 128c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 2), 138c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1), 148c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, offsetof(struct test_val, foo)), 158c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 168c2ecf20Sopenharmony_ci }, 178c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 3 }, 188c2ecf20Sopenharmony_ci .errstr = "R0 max value is outside of the allowed memory range", 198c2ecf20Sopenharmony_ci .result = REJECT, 208c2ecf20Sopenharmony_ci .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 218c2ecf20Sopenharmony_ci}, 228c2ecf20Sopenharmony_ci{ 238c2ecf20Sopenharmony_ci "invalid range check", 248c2ecf20Sopenharmony_ci .insns = { 258c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 268c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 278c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 288c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 298c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 308c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 12), 318c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), 328c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_9, 1), 338c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MOD, BPF_REG_1, 2), 348c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, BPF_REG_1, 1), 358c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_AND, BPF_REG_9, BPF_REG_1), 368c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_ADD, BPF_REG_9, 1), 378c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_RSH, BPF_REG_9, 1), 388c2ecf20Sopenharmony_ci BPF_MOV32_IMM(BPF_REG_3, 1), 398c2ecf20Sopenharmony_ci BPF_ALU32_REG(BPF_SUB, BPF_REG_3, BPF_REG_9), 408c2ecf20Sopenharmony_ci BPF_ALU32_IMM(BPF_MUL, BPF_REG_3, 0x10000000), 418c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_3), 428c2ecf20Sopenharmony_ci BPF_STX_MEM(BPF_W, BPF_REG_0, BPF_REG_3, 0), 438c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_0, 0), 448c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 458c2ecf20Sopenharmony_ci }, 468c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 3 }, 478c2ecf20Sopenharmony_ci .errstr = "R0 max value is outside of the allowed memory range", 488c2ecf20Sopenharmony_ci .result = REJECT, 498c2ecf20Sopenharmony_ci .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 508c2ecf20Sopenharmony_ci}, 518c2ecf20Sopenharmony_ci{ 528c2ecf20Sopenharmony_ci "check known subreg with unknown reg", 538c2ecf20Sopenharmony_ci .insns = { 548c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 558c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 32), 568c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 1), 578c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFFFF1234), 588c2ecf20Sopenharmony_ci /* Upper bits are unknown but AND above masks out 1 zero'ing lower bits */ 598c2ecf20Sopenharmony_ci BPF_JMP32_IMM(BPF_JLT, BPF_REG_0, 1, 1), 608c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_1, 512), 618c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 628c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 638c2ecf20Sopenharmony_ci }, 648c2ecf20Sopenharmony_ci .errstr_unpriv = "R1 !read_ok", 658c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 668c2ecf20Sopenharmony_ci .result = ACCEPT, 678c2ecf20Sopenharmony_ci .retval = 0 688c2ecf20Sopenharmony_ci}, 69