Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "map element value store of cleared call register",
0003     .insns = {
0004     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0005     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
0006     BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
0007     BPF_LD_MAP_FD(BPF_REG_1, 0),
0008     BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
0009     BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1),
0010     BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 0),
0011     BPF_EXIT_INSN(),
0012     },
0013     .fixup_map_hash_48b = { 3 },
0014     .errstr_unpriv = "R1 !read_ok",
0015     .errstr = "R1 !read_ok",
0016     .result = REJECT,
0017     .result_unpriv = REJECT,
0018 },
0019 {
0020     "map element value with unaligned store",
0021     .insns = {
0022     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0023     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
0024     BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
0025     BPF_LD_MAP_FD(BPF_REG_1, 0),
0026     BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
0027     BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 17),
0028     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 3),
0029     BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 42),
0030     BPF_ST_MEM(BPF_DW, BPF_REG_0, 2, 43),
0031     BPF_ST_MEM(BPF_DW, BPF_REG_0, -2, 44),
0032     BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
0033     BPF_ST_MEM(BPF_DW, BPF_REG_8, 0, 32),
0034     BPF_ST_MEM(BPF_DW, BPF_REG_8, 2, 33),
0035     BPF_ST_MEM(BPF_DW, BPF_REG_8, -2, 34),
0036     BPF_ALU64_IMM(BPF_ADD, BPF_REG_8, 5),
0037     BPF_ST_MEM(BPF_DW, BPF_REG_8, 0, 22),
0038     BPF_ST_MEM(BPF_DW, BPF_REG_8, 4, 23),
0039     BPF_ST_MEM(BPF_DW, BPF_REG_8, -7, 24),
0040     BPF_MOV64_REG(BPF_REG_7, BPF_REG_8),
0041     BPF_ALU64_IMM(BPF_ADD, BPF_REG_7, 3),
0042     BPF_ST_MEM(BPF_DW, BPF_REG_7, 0, 22),
0043     BPF_ST_MEM(BPF_DW, BPF_REG_7, 4, 23),
0044     BPF_ST_MEM(BPF_DW, BPF_REG_7, -4, 24),
0045     BPF_EXIT_INSN(),
0046     },
0047     .fixup_map_hash_48b = { 3 },
0048     .errstr_unpriv = "R0 leaks addr",
0049     .result = ACCEPT,
0050     .result_unpriv = REJECT,
0051     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0052 },
0053 {
0054     "map element value with unaligned load",
0055     .insns = {
0056     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0057     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
0058     BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
0059     BPF_LD_MAP_FD(BPF_REG_1, 0),
0060     BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
0061     BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 11),
0062     BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
0063     BPF_JMP_IMM(BPF_JGE, BPF_REG_1, MAX_ENTRIES, 9),
0064     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 3),
0065     BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_0, 0),
0066     BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_0, 2),
0067     BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
0068     BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_8, 0),
0069     BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_8, 2),
0070     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 5),
0071     BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_0, 0),
0072     BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_0, 4),
0073     BPF_EXIT_INSN(),
0074     },
0075     .fixup_map_hash_48b = { 3 },
0076     .errstr_unpriv = "R0 leaks addr",
0077     .result = ACCEPT,
0078     .result_unpriv = REJECT,
0079     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0080 },
0081 {
0082     "map element value is preserved across register spilling",
0083     .insns = {
0084     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0085     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
0086     BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
0087     BPF_LD_MAP_FD(BPF_REG_1, 0),
0088     BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
0089     BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 7),
0090     BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, offsetof(struct test_val, foo)),
0091     BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 42),
0092     BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
0093     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -184),
0094     BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 0),
0095     BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_1, 0),
0096     BPF_ST_MEM(BPF_DW, BPF_REG_3, 0, 42),
0097     BPF_EXIT_INSN(),
0098     },
0099     .fixup_map_hash_48b = { 3 },
0100     .errstr_unpriv = "R0 leaks addr",
0101     .result = ACCEPT,
0102     .result_unpriv = REJECT,
0103     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0104 },