18c2ecf20Sopenharmony_ci{ 28c2ecf20Sopenharmony_ci "spin_lock: test1 success", 38c2ecf20Sopenharmony_ci .insns = { 48c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 58c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 68c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 78c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 88c2ecf20Sopenharmony_ci 0), 98c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 108c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 118c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 128c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 138c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 148c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 158c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 168c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 178c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 188c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0), 198c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 208c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 218c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 228c2ecf20Sopenharmony_ci }, 238c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 248c2ecf20Sopenharmony_ci .result = ACCEPT, 258c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 268c2ecf20Sopenharmony_ci .errstr_unpriv = "", 278c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 288c2ecf20Sopenharmony_ci}, 298c2ecf20Sopenharmony_ci{ 308c2ecf20Sopenharmony_ci "spin_lock: test2 direct ld/st", 318c2ecf20Sopenharmony_ci .insns = { 328c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 338c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 348c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 358c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 368c2ecf20Sopenharmony_ci 0), 378c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 388c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 398c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 408c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 418c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 428c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 438c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 448c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 458c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 468c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 0), 478c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 488c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 498c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 508c2ecf20Sopenharmony_ci }, 518c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 528c2ecf20Sopenharmony_ci .result = REJECT, 538c2ecf20Sopenharmony_ci .errstr = "cannot be accessed directly", 548c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 558c2ecf20Sopenharmony_ci .errstr_unpriv = "", 568c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 578c2ecf20Sopenharmony_ci}, 588c2ecf20Sopenharmony_ci{ 598c2ecf20Sopenharmony_ci "spin_lock: test3 direct ld/st", 608c2ecf20Sopenharmony_ci .insns = { 618c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 628c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 638c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 648c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 658c2ecf20Sopenharmony_ci 0), 668c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 678c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 688c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 698c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 708c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 718c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 728c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 738c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 748c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 758c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 1), 768c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 778c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 788c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 798c2ecf20Sopenharmony_ci }, 808c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 818c2ecf20Sopenharmony_ci .result = REJECT, 828c2ecf20Sopenharmony_ci .errstr = "cannot be accessed directly", 838c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 848c2ecf20Sopenharmony_ci .errstr_unpriv = "", 858c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 868c2ecf20Sopenharmony_ci .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 878c2ecf20Sopenharmony_ci}, 888c2ecf20Sopenharmony_ci{ 898c2ecf20Sopenharmony_ci "spin_lock: test4 direct ld/st", 908c2ecf20Sopenharmony_ci .insns = { 918c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 928c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 938c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 948c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 958c2ecf20Sopenharmony_ci 0), 968c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 978c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 988c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 998c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 1008c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 1018c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 1028c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 1038c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 1048c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 1058c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_6, 3), 1068c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 1078c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 1088c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1098c2ecf20Sopenharmony_ci }, 1108c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 1118c2ecf20Sopenharmony_ci .result = REJECT, 1128c2ecf20Sopenharmony_ci .errstr = "cannot be accessed directly", 1138c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 1148c2ecf20Sopenharmony_ci .errstr_unpriv = "", 1158c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 1168c2ecf20Sopenharmony_ci .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 1178c2ecf20Sopenharmony_ci}, 1188c2ecf20Sopenharmony_ci{ 1198c2ecf20Sopenharmony_ci "spin_lock: test5 call within a locked region", 1208c2ecf20Sopenharmony_ci .insns = { 1218c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 1228c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 1238c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 1248c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 1258c2ecf20Sopenharmony_ci 0), 1268c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 1278c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 1288c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1298c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 1308c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 1318c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 1328c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 1338c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 1348c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 1358c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 1368c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 1378c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 1388c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1398c2ecf20Sopenharmony_ci }, 1408c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 1418c2ecf20Sopenharmony_ci .result = REJECT, 1428c2ecf20Sopenharmony_ci .errstr = "calls are not allowed", 1438c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 1448c2ecf20Sopenharmony_ci .errstr_unpriv = "", 1458c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 1468c2ecf20Sopenharmony_ci}, 1478c2ecf20Sopenharmony_ci{ 1488c2ecf20Sopenharmony_ci "spin_lock: test6 missing unlock", 1498c2ecf20Sopenharmony_ci .insns = { 1508c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 1518c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 1528c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 1538c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 1548c2ecf20Sopenharmony_ci 0), 1558c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 1568c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 1578c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1588c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 1598c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 1608c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 1618c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 1628c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 1638c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 1648c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0), 1658c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 1668c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 1678c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 1688c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1698c2ecf20Sopenharmony_ci }, 1708c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 1718c2ecf20Sopenharmony_ci .result = REJECT, 1728c2ecf20Sopenharmony_ci .errstr = "unlock is missing", 1738c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 1748c2ecf20Sopenharmony_ci .errstr_unpriv = "", 1758c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 1768c2ecf20Sopenharmony_ci}, 1778c2ecf20Sopenharmony_ci{ 1788c2ecf20Sopenharmony_ci "spin_lock: test7 unlock without lock", 1798c2ecf20Sopenharmony_ci .insns = { 1808c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 1818c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 1828c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 1838c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 1848c2ecf20Sopenharmony_ci 0), 1858c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 1868c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 1878c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1888c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 1898c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 1908c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 1918c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 1), 1928c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 1938c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 1948c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 1958c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0), 1968c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 1978c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 1988c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1998c2ecf20Sopenharmony_ci }, 2008c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 2018c2ecf20Sopenharmony_ci .result = REJECT, 2028c2ecf20Sopenharmony_ci .errstr = "without taking a lock", 2038c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 2048c2ecf20Sopenharmony_ci .errstr_unpriv = "", 2058c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 2068c2ecf20Sopenharmony_ci}, 2078c2ecf20Sopenharmony_ci{ 2088c2ecf20Sopenharmony_ci "spin_lock: test8 double lock", 2098c2ecf20Sopenharmony_ci .insns = { 2108c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 2118c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 2128c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 2138c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 2148c2ecf20Sopenharmony_ci 0), 2158c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 2168c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 2178c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2188c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 2198c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 2208c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 2218c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 2228c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 2238c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 2248c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 2258c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 2268c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 2278c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0), 2288c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 2298c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 2308c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2318c2ecf20Sopenharmony_ci }, 2328c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 2338c2ecf20Sopenharmony_ci .result = REJECT, 2348c2ecf20Sopenharmony_ci .errstr = "calls are not allowed", 2358c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 2368c2ecf20Sopenharmony_ci .errstr_unpriv = "", 2378c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 2388c2ecf20Sopenharmony_ci}, 2398c2ecf20Sopenharmony_ci{ 2408c2ecf20Sopenharmony_ci "spin_lock: test9 different lock", 2418c2ecf20Sopenharmony_ci .insns = { 2428c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 2438c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 2448c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 2458c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 2468c2ecf20Sopenharmony_ci 0), 2478c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 2488c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 2498c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2508c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 2518c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 2528c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 2538c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 2548c2ecf20Sopenharmony_ci 0), 2558c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 2568c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 2578c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2588c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 2598c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 2608c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 2618c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 2628c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_7), 2638c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 2648c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 2658c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 2668c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2678c2ecf20Sopenharmony_ci }, 2688c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3, 11 }, 2698c2ecf20Sopenharmony_ci .result = REJECT, 2708c2ecf20Sopenharmony_ci .errstr = "unlock of different lock", 2718c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 2728c2ecf20Sopenharmony_ci .errstr_unpriv = "", 2738c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 2748c2ecf20Sopenharmony_ci}, 2758c2ecf20Sopenharmony_ci{ 2768c2ecf20Sopenharmony_ci "spin_lock: test10 lock in subprog without unlock", 2778c2ecf20Sopenharmony_ci .insns = { 2788c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 2798c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 2808c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 2818c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 2828c2ecf20Sopenharmony_ci 0), 2838c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 2848c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 2858c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2868c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 2878c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 2888c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 2898c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 5), 2908c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 2918c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 2928c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 2938c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 2948c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2958c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 2968c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 2978c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2988c2ecf20Sopenharmony_ci }, 2998c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 3 }, 3008c2ecf20Sopenharmony_ci .result = REJECT, 3018c2ecf20Sopenharmony_ci .errstr = "unlock is missing", 3028c2ecf20Sopenharmony_ci .result_unpriv = REJECT, 3038c2ecf20Sopenharmony_ci .errstr_unpriv = "", 3048c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 3058c2ecf20Sopenharmony_ci}, 3068c2ecf20Sopenharmony_ci{ 3078c2ecf20Sopenharmony_ci "spin_lock: test11 ld_abs under lock", 3088c2ecf20Sopenharmony_ci .insns = { 3098c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 3108c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0), 3118c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 3128c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), 3138c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 3148c2ecf20Sopenharmony_ci 0), 3158c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 3168c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 3178c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 3188c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 3198c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 3208c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 3218c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock), 3228c2ecf20Sopenharmony_ci BPF_LD_ABS(BPF_B, 0), 3238c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_7), 3248c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4), 3258c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock), 3268c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 3278c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 3288c2ecf20Sopenharmony_ci }, 3298c2ecf20Sopenharmony_ci .fixup_map_spin_lock = { 4 }, 3308c2ecf20Sopenharmony_ci .result = REJECT, 3318c2ecf20Sopenharmony_ci .errstr = "inside bpf_spin_lock", 3328c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 3338c2ecf20Sopenharmony_ci}, 334