18c2ecf20Sopenharmony_ci{ 28c2ecf20Sopenharmony_ci "jset: functional", 38c2ecf20Sopenharmony_ci .insns = { 48c2ecf20Sopenharmony_ci BPF_DIRECT_PKT_R2, 58c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0), 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci /* reg, bit 63 or bit 0 set, taken */ 88c2ecf20Sopenharmony_ci BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001), 98c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1), 108c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci /* reg, bit 62, not taken */ 138c2ecf20Sopenharmony_ci BPF_LD_IMM64(BPF_REG_8, 0x4000000000000000), 148c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1), 158c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JA, 0, 0, 1), 168c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci /* imm, any bit set, taken */ 198c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_7, -1, 1), 208c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci /* imm, bit 31 set, taken */ 238c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1), 248c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci /* all good - return r0 == 2 */ 278c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 298c2ecf20Sopenharmony_ci }, 308c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 318c2ecf20Sopenharmony_ci .result = ACCEPT, 328c2ecf20Sopenharmony_ci .runs = 7, 338c2ecf20Sopenharmony_ci .retvals = { 348c2ecf20Sopenharmony_ci { .retval = 2, 358c2ecf20Sopenharmony_ci .data64 = { (1ULL << 63) | (1U << 31) | (1U << 0), } 368c2ecf20Sopenharmony_ci }, 378c2ecf20Sopenharmony_ci { .retval = 2, 388c2ecf20Sopenharmony_ci .data64 = { (1ULL << 63) | (1U << 31), } 398c2ecf20Sopenharmony_ci }, 408c2ecf20Sopenharmony_ci { .retval = 2, 418c2ecf20Sopenharmony_ci .data64 = { (1ULL << 31) | (1U << 0), } 428c2ecf20Sopenharmony_ci }, 438c2ecf20Sopenharmony_ci { .retval = 2, 448c2ecf20Sopenharmony_ci .data64 = { (__u32)-1, } 458c2ecf20Sopenharmony_ci }, 468c2ecf20Sopenharmony_ci { .retval = 2, 478c2ecf20Sopenharmony_ci .data64 = { ~0x4000000000000000ULL, } 488c2ecf20Sopenharmony_ci }, 498c2ecf20Sopenharmony_ci { .retval = 0, 508c2ecf20Sopenharmony_ci .data64 = { 0, } 518c2ecf20Sopenharmony_ci }, 528c2ecf20Sopenharmony_ci { .retval = 0, 538c2ecf20Sopenharmony_ci .data64 = { ~0ULL, } 548c2ecf20Sopenharmony_ci }, 558c2ecf20Sopenharmony_ci }, 568c2ecf20Sopenharmony_ci .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 578c2ecf20Sopenharmony_ci}, 588c2ecf20Sopenharmony_ci{ 598c2ecf20Sopenharmony_ci "jset: sign-extend", 608c2ecf20Sopenharmony_ci .insns = { 618c2ecf20Sopenharmony_ci BPF_DIRECT_PKT_R2, 628c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0), 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1), 658c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 688c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 698c2ecf20Sopenharmony_ci }, 708c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 718c2ecf20Sopenharmony_ci .result = ACCEPT, 728c2ecf20Sopenharmony_ci .retval = 2, 738c2ecf20Sopenharmony_ci .data = { 1, 0, 0, 0, 0, 0, 0, 1, }, 748c2ecf20Sopenharmony_ci .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 758c2ecf20Sopenharmony_ci}, 768c2ecf20Sopenharmony_ci{ 778c2ecf20Sopenharmony_ci "jset: known const compare", 788c2ecf20Sopenharmony_ci .insns = { 798c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 808c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 818c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 828c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 838c2ecf20Sopenharmony_ci }, 848c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 858c2ecf20Sopenharmony_ci .errstr_unpriv = "R9 !read_ok", 868c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 878c2ecf20Sopenharmony_ci .retval = 1, 888c2ecf20Sopenharmony_ci .result = ACCEPT, 898c2ecf20Sopenharmony_ci}, 908c2ecf20Sopenharmony_ci{ 918c2ecf20Sopenharmony_ci "jset: known const compare bad", 928c2ecf20Sopenharmony_ci .insns = { 938c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 948c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 958c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 968c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 978c2ecf20Sopenharmony_ci }, 988c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 998c2ecf20Sopenharmony_ci .errstr_unpriv = "!read_ok", 1008c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 1018c2ecf20Sopenharmony_ci .errstr = "!read_ok", 1028c2ecf20Sopenharmony_ci .result = REJECT, 1038c2ecf20Sopenharmony_ci}, 1048c2ecf20Sopenharmony_ci{ 1058c2ecf20Sopenharmony_ci "jset: unknown const compare taken", 1068c2ecf20Sopenharmony_ci .insns = { 1078c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 1088c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 1098c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JA, 0, 0, 1), 1108c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 1118c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1128c2ecf20Sopenharmony_ci }, 1138c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 1148c2ecf20Sopenharmony_ci .errstr_unpriv = "!read_ok", 1158c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 1168c2ecf20Sopenharmony_ci .errstr = "!read_ok", 1178c2ecf20Sopenharmony_ci .result = REJECT, 1188c2ecf20Sopenharmony_ci}, 1198c2ecf20Sopenharmony_ci{ 1208c2ecf20Sopenharmony_ci "jset: unknown const compare not taken", 1218c2ecf20Sopenharmony_ci .insns = { 1228c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 1238c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 1248c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 1258c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1268c2ecf20Sopenharmony_ci }, 1278c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 1288c2ecf20Sopenharmony_ci .errstr_unpriv = "!read_ok", 1298c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 1308c2ecf20Sopenharmony_ci .errstr = "!read_ok", 1318c2ecf20Sopenharmony_ci .result = REJECT, 1328c2ecf20Sopenharmony_ci}, 1338c2ecf20Sopenharmony_ci{ 1348c2ecf20Sopenharmony_ci "jset: half-known const compare", 1358c2ecf20Sopenharmony_ci .insns = { 1368c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 1378c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_OR, BPF_REG_0, 2), 1388c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 3, 1), 1398c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 1408c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 1418c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1428c2ecf20Sopenharmony_ci }, 1438c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 1448c2ecf20Sopenharmony_ci .errstr_unpriv = "R9 !read_ok", 1458c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 1468c2ecf20Sopenharmony_ci .result = ACCEPT, 1478c2ecf20Sopenharmony_ci}, 1488c2ecf20Sopenharmony_ci{ 1498c2ecf20Sopenharmony_ci "jset: range", 1508c2ecf20Sopenharmony_ci .insns = { 1518c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 1528c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 1538c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 1548c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_AND, BPF_REG_1, 0xff), 1558c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0xf0, 3), 1568c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JLT, BPF_REG_1, 0x10, 1), 1578c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 1588c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1598c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0x10, 1), 1608c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1618c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0x10, 1), 1628c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 1638c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1648c2ecf20Sopenharmony_ci }, 1658c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 1668c2ecf20Sopenharmony_ci .errstr_unpriv = "R9 !read_ok", 1678c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 1688c2ecf20Sopenharmony_ci .result = ACCEPT, 1698c2ecf20Sopenharmony_ci}, 170