162306a36Sopenharmony_ci{ 262306a36Sopenharmony_ci "jset: functional", 362306a36Sopenharmony_ci .insns = { 462306a36Sopenharmony_ci BPF_DIRECT_PKT_R2, 562306a36Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0), 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci /* reg, bit 63 or bit 0 set, taken */ 862306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001), 962306a36Sopenharmony_ci BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1), 1062306a36Sopenharmony_ci BPF_EXIT_INSN(), 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci /* reg, bit 62, not taken */ 1362306a36Sopenharmony_ci BPF_LD_IMM64(BPF_REG_8, 0x4000000000000000), 1462306a36Sopenharmony_ci BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1), 1562306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JA, 0, 0, 1), 1662306a36Sopenharmony_ci BPF_EXIT_INSN(), 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci /* imm, any bit set, taken */ 1962306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_7, -1, 1), 2062306a36Sopenharmony_ci BPF_EXIT_INSN(), 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci /* imm, bit 31 set, taken */ 2362306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1), 2462306a36Sopenharmony_ci BPF_EXIT_INSN(), 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci /* all good - return r0 == 2 */ 2762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 2862306a36Sopenharmony_ci BPF_EXIT_INSN(), 2962306a36Sopenharmony_ci }, 3062306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 3162306a36Sopenharmony_ci .result = ACCEPT, 3262306a36Sopenharmony_ci .runs = 7, 3362306a36Sopenharmony_ci .retvals = { 3462306a36Sopenharmony_ci { .retval = 2, 3562306a36Sopenharmony_ci .data64 = { (1ULL << 63) | (1U << 31) | (1U << 0), } 3662306a36Sopenharmony_ci }, 3762306a36Sopenharmony_ci { .retval = 2, 3862306a36Sopenharmony_ci .data64 = { (1ULL << 63) | (1U << 31), } 3962306a36Sopenharmony_ci }, 4062306a36Sopenharmony_ci { .retval = 2, 4162306a36Sopenharmony_ci .data64 = { (1ULL << 31) | (1U << 0), } 4262306a36Sopenharmony_ci }, 4362306a36Sopenharmony_ci { .retval = 2, 4462306a36Sopenharmony_ci .data64 = { (__u32)-1, } 4562306a36Sopenharmony_ci }, 4662306a36Sopenharmony_ci { .retval = 2, 4762306a36Sopenharmony_ci .data64 = { ~0x4000000000000000ULL, } 4862306a36Sopenharmony_ci }, 4962306a36Sopenharmony_ci { .retval = 0, 5062306a36Sopenharmony_ci .data64 = { 0, } 5162306a36Sopenharmony_ci }, 5262306a36Sopenharmony_ci { .retval = 0, 5362306a36Sopenharmony_ci .data64 = { ~0ULL, } 5462306a36Sopenharmony_ci }, 5562306a36Sopenharmony_ci }, 5662306a36Sopenharmony_ci .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 5762306a36Sopenharmony_ci}, 5862306a36Sopenharmony_ci{ 5962306a36Sopenharmony_ci "jset: sign-extend", 6062306a36Sopenharmony_ci .insns = { 6162306a36Sopenharmony_ci BPF_DIRECT_PKT_R2, 6262306a36Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0), 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1), 6562306a36Sopenharmony_ci BPF_EXIT_INSN(), 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 6862306a36Sopenharmony_ci BPF_EXIT_INSN(), 6962306a36Sopenharmony_ci }, 7062306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 7162306a36Sopenharmony_ci .result = ACCEPT, 7262306a36Sopenharmony_ci .retval = 2, 7362306a36Sopenharmony_ci .data = { 1, 0, 0, 0, 0, 0, 0, 1, }, 7462306a36Sopenharmony_ci .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 7562306a36Sopenharmony_ci}, 7662306a36Sopenharmony_ci{ 7762306a36Sopenharmony_ci "jset: known const compare", 7862306a36Sopenharmony_ci .insns = { 7962306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 8062306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 8162306a36Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 8262306a36Sopenharmony_ci BPF_EXIT_INSN(), 8362306a36Sopenharmony_ci }, 8462306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 8562306a36Sopenharmony_ci .errstr_unpriv = "R9 !read_ok", 8662306a36Sopenharmony_ci .result_unpriv = REJECT, 8762306a36Sopenharmony_ci .retval = 1, 8862306a36Sopenharmony_ci .result = ACCEPT, 8962306a36Sopenharmony_ci}, 9062306a36Sopenharmony_ci{ 9162306a36Sopenharmony_ci "jset: known const compare bad", 9262306a36Sopenharmony_ci .insns = { 9362306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 9462306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 9562306a36Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 9662306a36Sopenharmony_ci BPF_EXIT_INSN(), 9762306a36Sopenharmony_ci }, 9862306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 9962306a36Sopenharmony_ci .errstr_unpriv = "!read_ok", 10062306a36Sopenharmony_ci .result_unpriv = REJECT, 10162306a36Sopenharmony_ci .errstr = "!read_ok", 10262306a36Sopenharmony_ci .result = REJECT, 10362306a36Sopenharmony_ci}, 10462306a36Sopenharmony_ci{ 10562306a36Sopenharmony_ci "jset: unknown const compare taken", 10662306a36Sopenharmony_ci .insns = { 10762306a36Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 10862306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 10962306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JA, 0, 0, 1), 11062306a36Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 11162306a36Sopenharmony_ci BPF_EXIT_INSN(), 11262306a36Sopenharmony_ci }, 11362306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 11462306a36Sopenharmony_ci .errstr_unpriv = "!read_ok", 11562306a36Sopenharmony_ci .result_unpriv = REJECT, 11662306a36Sopenharmony_ci .errstr = "!read_ok", 11762306a36Sopenharmony_ci .result = REJECT, 11862306a36Sopenharmony_ci}, 11962306a36Sopenharmony_ci{ 12062306a36Sopenharmony_ci "jset: unknown const compare not taken", 12162306a36Sopenharmony_ci .insns = { 12262306a36Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 12362306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 12462306a36Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 12562306a36Sopenharmony_ci BPF_EXIT_INSN(), 12662306a36Sopenharmony_ci }, 12762306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 12862306a36Sopenharmony_ci .errstr_unpriv = "!read_ok", 12962306a36Sopenharmony_ci .result_unpriv = REJECT, 13062306a36Sopenharmony_ci .errstr = "!read_ok", 13162306a36Sopenharmony_ci .result = REJECT, 13262306a36Sopenharmony_ci}, 13362306a36Sopenharmony_ci{ 13462306a36Sopenharmony_ci "jset: half-known const compare", 13562306a36Sopenharmony_ci .insns = { 13662306a36Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 13762306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_OR, BPF_REG_0, 2), 13862306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 3, 1), 13962306a36Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 14062306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 14162306a36Sopenharmony_ci BPF_EXIT_INSN(), 14262306a36Sopenharmony_ci }, 14362306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 14462306a36Sopenharmony_ci .errstr_unpriv = "R9 !read_ok", 14562306a36Sopenharmony_ci .result_unpriv = REJECT, 14662306a36Sopenharmony_ci .result = ACCEPT, 14762306a36Sopenharmony_ci}, 14862306a36Sopenharmony_ci{ 14962306a36Sopenharmony_ci "jset: range", 15062306a36Sopenharmony_ci .insns = { 15162306a36Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 15262306a36Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 15362306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 15462306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, BPF_REG_1, 0xff), 15562306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0xf0, 3), 15662306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JLT, BPF_REG_1, 0x10, 1), 15762306a36Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 15862306a36Sopenharmony_ci BPF_EXIT_INSN(), 15962306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0x10, 1), 16062306a36Sopenharmony_ci BPF_EXIT_INSN(), 16162306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0x10, 1), 16262306a36Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 16362306a36Sopenharmony_ci BPF_EXIT_INSN(), 16462306a36Sopenharmony_ci }, 16562306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 16662306a36Sopenharmony_ci .errstr_unpriv = "R9 !read_ok", 16762306a36Sopenharmony_ci .result_unpriv = REJECT, 16862306a36Sopenharmony_ci .result = ACCEPT, 16962306a36Sopenharmony_ci}, 170