Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "map in map access",
0003     .insns = {
0004     BPF_ST_MEM(0, BPF_REG_10, -4, 0),
0005     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0006     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0007     BPF_LD_MAP_FD(BPF_REG_1, 0),
0008     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0009     BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 5),
0010     BPF_ST_MEM(0, BPF_REG_10, -4, 0),
0011     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0012     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0013     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0014     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0015     BPF_MOV64_IMM(BPF_REG_0, 0),
0016     BPF_EXIT_INSN(),
0017     },
0018     .fixup_map_in_map = { 3 },
0019     .result = ACCEPT,
0020 },
0021 {
0022     "map in map state pruning",
0023     .insns = {
0024     BPF_ST_MEM(0, BPF_REG_10, -4, 0),
0025     BPF_MOV64_REG(BPF_REG_6, BPF_REG_10),
0026     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, -4),
0027     BPF_MOV64_REG(BPF_REG_2, BPF_REG_6),
0028     BPF_LD_MAP_FD(BPF_REG_1, 0),
0029     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0030     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0031     BPF_EXIT_INSN(),
0032     BPF_MOV64_REG(BPF_REG_2, BPF_REG_6),
0033     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0034     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0035     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 11),
0036     BPF_MOV64_REG(BPF_REG_2, BPF_REG_6),
0037     BPF_LD_MAP_FD(BPF_REG_1, 0),
0038     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0039     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0040     BPF_EXIT_INSN(),
0041     BPF_MOV64_REG(BPF_REG_2, BPF_REG_6),
0042     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0043     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0044     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0045     BPF_EXIT_INSN(),
0046     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0, 0),
0047     BPF_EXIT_INSN(),
0048     },
0049     .fixup_map_in_map = { 4, 14 },
0050     .flags = BPF_F_TEST_STATE_FREQ,
0051     .result = VERBOSE_ACCEPT,
0052     .errstr = "processed 25 insns",
0053     .prog_type = BPF_PROG_TYPE_XDP,
0054 },
0055 {
0056     "invalid inner map pointer",
0057     .insns = {
0058     BPF_ST_MEM(0, BPF_REG_10, -4, 0),
0059     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0060     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0061     BPF_LD_MAP_FD(BPF_REG_1, 0),
0062     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0063     BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 6),
0064     BPF_ST_MEM(0, BPF_REG_10, -4, 0),
0065     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0066     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0067     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0068     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
0069     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0070     BPF_MOV64_IMM(BPF_REG_0, 0),
0071     BPF_EXIT_INSN(),
0072     },
0073     .fixup_map_in_map = { 3 },
0074     .errstr = "R1 pointer arithmetic on map_ptr prohibited",
0075     .result = REJECT,
0076 },
0077 {
0078     "forgot null checking on the inner map pointer",
0079     .insns = {
0080     BPF_ST_MEM(0, BPF_REG_10, -4, 0),
0081     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0082     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0083     BPF_LD_MAP_FD(BPF_REG_1, 0),
0084     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0085     BPF_ST_MEM(0, BPF_REG_10, -4, 0),
0086     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0087     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0088     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0089     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0090     BPF_MOV64_IMM(BPF_REG_0, 0),
0091     BPF_EXIT_INSN(),
0092     },
0093     .fixup_map_in_map = { 3 },
0094     .errstr = "R1 type=map_value_or_null expected=map_ptr",
0095     .result = REJECT,
0096 },