Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "spin_lock: test1 success",
0003     .insns = {
0004     BPF_ST_MEM(BPF_W, 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,
0008               0),
0009     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0010     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0011     BPF_EXIT_INSN(),
0012     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0013     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0014     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0015     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0016     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0017     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0018     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0),
0019     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0020     BPF_MOV64_IMM(BPF_REG_0, 0),
0021     BPF_EXIT_INSN(),
0022     },
0023     .fixup_map_spin_lock = { 3 },
0024     .result = ACCEPT,
0025     .result_unpriv = REJECT,
0026     .errstr_unpriv = "",
0027     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0028 },
0029 {
0030     "spin_lock: test2 direct ld/st",
0031     .insns = {
0032     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0033     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0034     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0035     BPF_LD_MAP_FD(BPF_REG_1,
0036               0),
0037     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0038     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0039     BPF_EXIT_INSN(),
0040     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0041     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0042     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0043     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0044     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0045     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0046     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 0),
0047     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0048     BPF_MOV64_IMM(BPF_REG_0, 0),
0049     BPF_EXIT_INSN(),
0050     },
0051     .fixup_map_spin_lock = { 3 },
0052     .result = REJECT,
0053     .errstr = "cannot be accessed directly",
0054     .result_unpriv = REJECT,
0055     .errstr_unpriv = "",
0056     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0057 },
0058 {
0059     "spin_lock: test3 direct ld/st",
0060     .insns = {
0061     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0062     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0063     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0064     BPF_LD_MAP_FD(BPF_REG_1,
0065               0),
0066     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0067     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0068     BPF_EXIT_INSN(),
0069     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0070     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0071     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0072     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0073     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0074     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0075     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 1),
0076     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0077     BPF_MOV64_IMM(BPF_REG_0, 0),
0078     BPF_EXIT_INSN(),
0079     },
0080     .fixup_map_spin_lock = { 3 },
0081     .result = REJECT,
0082     .errstr = "cannot be accessed directly",
0083     .result_unpriv = REJECT,
0084     .errstr_unpriv = "",
0085     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0086     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0087 },
0088 {
0089     "spin_lock: test4 direct ld/st",
0090     .insns = {
0091     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0092     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0093     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0094     BPF_LD_MAP_FD(BPF_REG_1,
0095               0),
0096     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0097     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0098     BPF_EXIT_INSN(),
0099     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0100     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0101     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0102     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0103     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0104     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0105     BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_6, 3),
0106     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0107     BPF_MOV64_IMM(BPF_REG_0, 0),
0108     BPF_EXIT_INSN(),
0109     },
0110     .fixup_map_spin_lock = { 3 },
0111     .result = REJECT,
0112     .errstr = "cannot be accessed directly",
0113     .result_unpriv = REJECT,
0114     .errstr_unpriv = "",
0115     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0116     .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0117 },
0118 {
0119     "spin_lock: test5 call within a locked region",
0120     .insns = {
0121     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0122     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0123     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0124     BPF_LD_MAP_FD(BPF_REG_1,
0125               0),
0126     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0127     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0128     BPF_EXIT_INSN(),
0129     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0130     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0131     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0132     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0133     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
0134     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0135     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0136     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0137     BPF_MOV64_IMM(BPF_REG_0, 0),
0138     BPF_EXIT_INSN(),
0139     },
0140     .fixup_map_spin_lock = { 3 },
0141     .result = REJECT,
0142     .errstr = "calls are not allowed",
0143     .result_unpriv = REJECT,
0144     .errstr_unpriv = "",
0145     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0146 },
0147 {
0148     "spin_lock: test6 missing unlock",
0149     .insns = {
0150     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0151     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0152     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0153     BPF_LD_MAP_FD(BPF_REG_1,
0154               0),
0155     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0156     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0157     BPF_EXIT_INSN(),
0158     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0159     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0160     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0161     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0162     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0163     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0164     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0),
0165     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0166     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0167     BPF_MOV64_IMM(BPF_REG_0, 0),
0168     BPF_EXIT_INSN(),
0169     },
0170     .fixup_map_spin_lock = { 3 },
0171     .result = REJECT,
0172     .errstr = "unlock is missing",
0173     .result_unpriv = REJECT,
0174     .errstr_unpriv = "",
0175     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0176 },
0177 {
0178     "spin_lock: test7 unlock without lock",
0179     .insns = {
0180     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0181     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0182     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0183     BPF_LD_MAP_FD(BPF_REG_1,
0184               0),
0185     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0186     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0187     BPF_EXIT_INSN(),
0188     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0189     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0190     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0191     BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 1),
0192     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0193     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0194     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0195     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0),
0196     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0197     BPF_MOV64_IMM(BPF_REG_0, 0),
0198     BPF_EXIT_INSN(),
0199     },
0200     .fixup_map_spin_lock = { 3 },
0201     .result = REJECT,
0202     .errstr = "without taking a lock",
0203     .result_unpriv = REJECT,
0204     .errstr_unpriv = "",
0205     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0206 },
0207 {
0208     "spin_lock: test8 double lock",
0209     .insns = {
0210     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0211     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0212     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0213     BPF_LD_MAP_FD(BPF_REG_1,
0214               0),
0215     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0216     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0217     BPF_EXIT_INSN(),
0218     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0219     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0220     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0221     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0222     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0223     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0224     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0225     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0226     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0227     BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0),
0228     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0229     BPF_MOV64_IMM(BPF_REG_0, 0),
0230     BPF_EXIT_INSN(),
0231     },
0232     .fixup_map_spin_lock = { 3 },
0233     .result = REJECT,
0234     .errstr = "calls are not allowed",
0235     .result_unpriv = REJECT,
0236     .errstr_unpriv = "",
0237     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0238 },
0239 {
0240     "spin_lock: test9 different lock",
0241     .insns = {
0242     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0243     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0244     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0245     BPF_LD_MAP_FD(BPF_REG_1,
0246               0),
0247     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0248     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0249     BPF_EXIT_INSN(),
0250     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0251     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0252     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0253     BPF_LD_MAP_FD(BPF_REG_1,
0254               0),
0255     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0256     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0257     BPF_EXIT_INSN(),
0258     BPF_MOV64_REG(BPF_REG_7, BPF_REG_0),
0259     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0260     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0261     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0262     BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
0263     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0264     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0265     BPF_MOV64_IMM(BPF_REG_0, 0),
0266     BPF_EXIT_INSN(),
0267     },
0268     .fixup_map_spin_lock = { 3, 11 },
0269     .result = REJECT,
0270     .errstr = "unlock of different lock",
0271     .result_unpriv = REJECT,
0272     .errstr_unpriv = "",
0273     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0274 },
0275 {
0276     "spin_lock: test10 lock in subprog without unlock",
0277     .insns = {
0278     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0279     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0280     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0281     BPF_LD_MAP_FD(BPF_REG_1,
0282               0),
0283     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0284     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0285     BPF_EXIT_INSN(),
0286     BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
0287     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0288     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0289     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 5),
0290     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0291     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0292     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0293     BPF_MOV64_IMM(BPF_REG_0, 1),
0294     BPF_EXIT_INSN(),
0295     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0296     BPF_MOV64_IMM(BPF_REG_0, 0),
0297     BPF_EXIT_INSN(),
0298     },
0299     .fixup_map_spin_lock = { 3 },
0300     .result = REJECT,
0301     .errstr = "unlock is missing",
0302     .result_unpriv = REJECT,
0303     .errstr_unpriv = "",
0304     .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
0305 },
0306 {
0307     "spin_lock: test11 ld_abs under lock",
0308     .insns = {
0309     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0310     BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0),
0311     BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
0312     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
0313     BPF_LD_MAP_FD(BPF_REG_1,
0314               0),
0315     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0316     BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
0317     BPF_EXIT_INSN(),
0318     BPF_MOV64_REG(BPF_REG_7, BPF_REG_0),
0319     BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
0320     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0321     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_lock),
0322     BPF_LD_ABS(BPF_B, 0),
0323     BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
0324     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),
0325     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_spin_unlock),
0326     BPF_MOV64_IMM(BPF_REG_0, 0),
0327     BPF_EXIT_INSN(),
0328     },
0329     .fixup_map_spin_lock = { 4 },
0330     .result = REJECT,
0331     .errstr = "inside bpf_spin_lock",
0332     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0333 },