18c2ecf20Sopenharmony_ci{ 28c2ecf20Sopenharmony_ci "regalloc basic", 38c2ecf20Sopenharmony_ci .insns = { 48c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 58c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 68c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 78c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 88c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 98c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 108c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 8), 118c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 128c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 138c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 148c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_0, 20, 4), 158c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLT, BPF_REG_2, 0, 3), 168c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_0), 178c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_2), 188c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0), 198c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 208c2ecf20Sopenharmony_ci }, 218c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 228c2ecf20Sopenharmony_ci .result = ACCEPT, 238c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 248c2ecf20Sopenharmony_ci}, 258c2ecf20Sopenharmony_ci{ 268c2ecf20Sopenharmony_ci "regalloc negative", 278c2ecf20Sopenharmony_ci .insns = { 288c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 298c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 308c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 318c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 328c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 338c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 348c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 8), 358c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 368c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 378c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 388c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_0, 24, 4), 398c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLT, BPF_REG_2, 0, 3), 408c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_0), 418c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_2), 428c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_7, 0), 438c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 448c2ecf20Sopenharmony_ci }, 458c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 468c2ecf20Sopenharmony_ci .result = REJECT, 478c2ecf20Sopenharmony_ci .errstr = "invalid access to map value, value_size=48 off=48 size=1", 488c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 498c2ecf20Sopenharmony_ci}, 508c2ecf20Sopenharmony_ci{ 518c2ecf20Sopenharmony_ci "regalloc src_reg mark", 528c2ecf20Sopenharmony_ci .insns = { 538c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 548c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 558c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 568c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 578c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 588c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 598c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9), 608c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 618c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 628c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 638c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_0, 20, 5), 648c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_3, 0), 658c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSGE, BPF_REG_3, BPF_REG_2, 3), 668c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_0), 678c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_2), 688c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0), 698c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 708c2ecf20Sopenharmony_ci }, 718c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 728c2ecf20Sopenharmony_ci .result = ACCEPT, 738c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 748c2ecf20Sopenharmony_ci}, 758c2ecf20Sopenharmony_ci{ 768c2ecf20Sopenharmony_ci "regalloc src_reg negative", 778c2ecf20Sopenharmony_ci .insns = { 788c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 798c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 808c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 818c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 828c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 838c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 848c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9), 858c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 868c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 878c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 888c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_0, 22, 5), 898c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_3, 0), 908c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSGE, BPF_REG_3, BPF_REG_2, 3), 918c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_0), 928c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_2), 938c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0), 948c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 958c2ecf20Sopenharmony_ci }, 968c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 978c2ecf20Sopenharmony_ci .result = REJECT, 988c2ecf20Sopenharmony_ci .errstr = "invalid access to map value, value_size=48 off=44 size=8", 998c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 1008c2ecf20Sopenharmony_ci}, 1018c2ecf20Sopenharmony_ci{ 1028c2ecf20Sopenharmony_ci "regalloc and spill", 1038c2ecf20Sopenharmony_ci .insns = { 1048c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 1058c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 1068c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 1078c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 1088c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 1098c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 1108c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 11), 1118c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 1128c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 1138c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 1148c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_0, 20, 7), 1158c2ecf20Sopenharmony_ci /* r0 has upper bound that should propagate into r2 */ 1168c2ecf20Sopenharmony_ci BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_2, -8), /* spill r2 */ 1178c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 1188c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_2, 0), /* clear r0 and r2 */ 1198c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_10, -8), /* fill r3 */ 1208c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSGE, BPF_REG_0, BPF_REG_3, 2), 1218c2ecf20Sopenharmony_ci /* r3 has lower and upper bounds */ 1228c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_3), 1238c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0), 1248c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1258c2ecf20Sopenharmony_ci }, 1268c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 1278c2ecf20Sopenharmony_ci .result = ACCEPT, 1288c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 1298c2ecf20Sopenharmony_ci}, 1308c2ecf20Sopenharmony_ci{ 1318c2ecf20Sopenharmony_ci "regalloc and spill negative", 1328c2ecf20Sopenharmony_ci .insns = { 1338c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 1348c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 1358c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 1368c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 1378c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 1388c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 1398c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 11), 1408c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 1418c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 1428c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 1438c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_0, 48, 7), 1448c2ecf20Sopenharmony_ci /* r0 has upper bound that should propagate into r2 */ 1458c2ecf20Sopenharmony_ci BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_2, -8), /* spill r2 */ 1468c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 1478c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_2, 0), /* clear r0 and r2 */ 1488c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_10, -8), /* fill r3 */ 1498c2ecf20Sopenharmony_ci BPF_JMP_REG(BPF_JSGE, BPF_REG_0, BPF_REG_3, 2), 1508c2ecf20Sopenharmony_ci /* r3 has lower and upper bounds */ 1518c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_3), 1528c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0), 1538c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1548c2ecf20Sopenharmony_ci }, 1558c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 1568c2ecf20Sopenharmony_ci .result = REJECT, 1578c2ecf20Sopenharmony_ci .errstr = "invalid access to map value, value_size=48 off=48 size=8", 1588c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 1598c2ecf20Sopenharmony_ci}, 1608c2ecf20Sopenharmony_ci{ 1618c2ecf20Sopenharmony_ci "regalloc three regs", 1628c2ecf20Sopenharmony_ci .insns = { 1638c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 1648c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 1658c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 1668c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 1678c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 1688c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 1698c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10), 1708c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 1718c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 1728c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 1738c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_4, BPF_REG_2), 1748c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_0, 12, 5), 1758c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLT, BPF_REG_2, 0, 4), 1768c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_0), 1778c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_2), 1788c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_4), 1798c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0), 1808c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 1818c2ecf20Sopenharmony_ci }, 1828c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 1838c2ecf20Sopenharmony_ci .result = ACCEPT, 1848c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 1858c2ecf20Sopenharmony_ci}, 1868c2ecf20Sopenharmony_ci{ 1878c2ecf20Sopenharmony_ci "regalloc after call", 1888c2ecf20Sopenharmony_ci .insns = { 1898c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 1908c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 1918c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 1928c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 1938c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 1948c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 1958c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10), 1968c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 1978c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 1988c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_8, BPF_REG_0), 1998c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_9, BPF_REG_0), 2008c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 6), 2018c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_8, 20, 4), 2028c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLT, BPF_REG_9, 0, 3), 2038c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_8), 2048c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_9), 2058c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0), 2068c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2078c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 2088c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2098c2ecf20Sopenharmony_ci }, 2108c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 2118c2ecf20Sopenharmony_ci .result = ACCEPT, 2128c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 2138c2ecf20Sopenharmony_ci}, 2148c2ecf20Sopenharmony_ci{ 2158c2ecf20Sopenharmony_ci "regalloc in callee", 2168c2ecf20Sopenharmony_ci .insns = { 2178c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 2188c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 2198c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 2208c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 2218c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 2228c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 2238c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 6), 2248c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_7, BPF_REG_0), 2258c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 2268c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 2278c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 2288c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_3, BPF_REG_7), 2298c2ecf20Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1), 2308c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2318c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 20, 5), 2328c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JSLT, BPF_REG_2, 0, 4), 2338c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_1), 2348c2ecf20Sopenharmony_ci BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_2), 2358c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_3, 0), 2368c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2378c2ecf20Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 2388c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2398c2ecf20Sopenharmony_ci }, 2408c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 2418c2ecf20Sopenharmony_ci .result = ACCEPT, 2428c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 2438c2ecf20Sopenharmony_ci}, 2448c2ecf20Sopenharmony_ci{ 2458c2ecf20Sopenharmony_ci "regalloc, spill, JEQ", 2468c2ecf20Sopenharmony_ci .insns = { 2478c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 2488c2ecf20Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 2498c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 2508c2ecf20Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 2518c2ecf20Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_1, 0), 2528c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 2538c2ecf20Sopenharmony_ci BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_0, -8), /* spill r0 */ 2548c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 0), 2558c2ecf20Sopenharmony_ci /* The verifier will walk the rest twice with r0 == 0 and r0 == map_value */ 2568c2ecf20Sopenharmony_ci BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 2578c2ecf20Sopenharmony_ci BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 2588c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_2, 20, 0), 2598c2ecf20Sopenharmony_ci /* The verifier will walk the rest two more times with r0 == 20 and r0 == unknown */ 2608c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_10, -8), /* fill r3 with map_value */ 2618c2ecf20Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_3, 0, 1), /* skip ldx if map_value == NULL */ 2628c2ecf20Sopenharmony_ci /* Buggy verifier will think that r3 == 20 here */ 2638c2ecf20Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_3, 0), /* read from map_value */ 2648c2ecf20Sopenharmony_ci BPF_EXIT_INSN(), 2658c2ecf20Sopenharmony_ci }, 2668c2ecf20Sopenharmony_ci .fixup_map_hash_48b = { 4 }, 2678c2ecf20Sopenharmony_ci .result = ACCEPT, 2688c2ecf20Sopenharmony_ci .prog_type = BPF_PROG_TYPE_TRACEPOINT, 2698c2ecf20Sopenharmony_ci}, 270