Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "ld_abs: check calling conv, r1",
0003     .insns = {
0004     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0005     BPF_MOV64_IMM(BPF_REG_1, 0),
0006     BPF_LD_ABS(BPF_W, -0x200000),
0007     BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0008     BPF_EXIT_INSN(),
0009     },
0010     .errstr = "R1 !read_ok",
0011     .result = REJECT,
0012 },
0013 {
0014     "ld_abs: check calling conv, r2",
0015     .insns = {
0016     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0017     BPF_MOV64_IMM(BPF_REG_2, 0),
0018     BPF_LD_ABS(BPF_W, -0x200000),
0019     BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
0020     BPF_EXIT_INSN(),
0021     },
0022     .errstr = "R2 !read_ok",
0023     .result = REJECT,
0024 },
0025 {
0026     "ld_abs: check calling conv, r3",
0027     .insns = {
0028     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0029     BPF_MOV64_IMM(BPF_REG_3, 0),
0030     BPF_LD_ABS(BPF_W, -0x200000),
0031     BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
0032     BPF_EXIT_INSN(),
0033     },
0034     .errstr = "R3 !read_ok",
0035     .result = REJECT,
0036 },
0037 {
0038     "ld_abs: check calling conv, r4",
0039     .insns = {
0040     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0041     BPF_MOV64_IMM(BPF_REG_4, 0),
0042     BPF_LD_ABS(BPF_W, -0x200000),
0043     BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
0044     BPF_EXIT_INSN(),
0045     },
0046     .errstr = "R4 !read_ok",
0047     .result = REJECT,
0048 },
0049 {
0050     "ld_abs: check calling conv, r5",
0051     .insns = {
0052     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0053     BPF_MOV64_IMM(BPF_REG_5, 0),
0054     BPF_LD_ABS(BPF_W, -0x200000),
0055     BPF_MOV64_REG(BPF_REG_0, BPF_REG_5),
0056     BPF_EXIT_INSN(),
0057     },
0058     .errstr = "R5 !read_ok",
0059     .result = REJECT,
0060 },
0061 {
0062     "ld_abs: check calling conv, r7",
0063     .insns = {
0064     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0065     BPF_MOV64_IMM(BPF_REG_7, 0),
0066     BPF_LD_ABS(BPF_W, -0x200000),
0067     BPF_MOV64_REG(BPF_REG_0, BPF_REG_7),
0068     BPF_EXIT_INSN(),
0069     },
0070     .result = ACCEPT,
0071 },
0072 {
0073     "ld_abs: tests on r6 and skb data reload helper",
0074     .insns = {
0075     BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0076     BPF_LD_ABS(BPF_B, 0),
0077     BPF_LD_ABS(BPF_H, 0),
0078     BPF_LD_ABS(BPF_W, 0),
0079     BPF_MOV64_REG(BPF_REG_7, BPF_REG_6),
0080     BPF_MOV64_IMM(BPF_REG_6, 0),
0081     BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
0082     BPF_MOV64_IMM(BPF_REG_2, 1),
0083     BPF_MOV64_IMM(BPF_REG_3, 2),
0084     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_vlan_push),
0085     BPF_MOV64_REG(BPF_REG_6, BPF_REG_7),
0086     BPF_LD_ABS(BPF_B, 0),
0087     BPF_LD_ABS(BPF_H, 0),
0088     BPF_LD_ABS(BPF_W, 0),
0089     BPF_MOV64_IMM(BPF_REG_0, 42),
0090     BPF_EXIT_INSN(),
0091     },
0092     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0093     .result = ACCEPT,
0094     .retval = 42 /* ultimate return value */,
0095 },
0096 {
0097     "ld_abs: invalid op 1",
0098     .insns = {
0099         BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0100         BPF_LD_ABS(BPF_DW, 0),
0101         BPF_EXIT_INSN(),
0102     },
0103     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0104     .result = REJECT,
0105     .errstr = "unknown opcode",
0106 },
0107 {
0108     "ld_abs: invalid op 2",
0109     .insns = {
0110         BPF_MOV32_IMM(BPF_REG_0, 256),
0111         BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0112         BPF_LD_IND(BPF_DW, BPF_REG_0, 0),
0113         BPF_EXIT_INSN(),
0114     },
0115     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0116     .result = REJECT,
0117     .errstr = "unknown opcode",
0118 },
0119 {
0120     "ld_abs: nmap reduced",
0121     .insns = {
0122         BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0123         BPF_LD_ABS(BPF_H, 12),
0124         BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0x806, 28),
0125         BPF_LD_ABS(BPF_H, 12),
0126         BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0x806, 26),
0127         BPF_MOV32_IMM(BPF_REG_0, 18),
0128         BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -64),
0129         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_10, -64),
0130         BPF_LD_IND(BPF_W, BPF_REG_7, 14),
0131         BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -60),
0132         BPF_MOV32_IMM(BPF_REG_0, 280971478),
0133         BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -56),
0134         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_10, -56),
0135         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -60),
0136         BPF_ALU32_REG(BPF_SUB, BPF_REG_0, BPF_REG_7),
0137         BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 15),
0138         BPF_LD_ABS(BPF_H, 12),
0139         BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0x806, 13),
0140         BPF_MOV32_IMM(BPF_REG_0, 22),
0141         BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -56),
0142         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_10, -56),
0143         BPF_LD_IND(BPF_H, BPF_REG_7, 14),
0144         BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -52),
0145         BPF_MOV32_IMM(BPF_REG_0, 17366),
0146         BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -48),
0147         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_10, -48),
0148         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -52),
0149         BPF_ALU32_REG(BPF_SUB, BPF_REG_0, BPF_REG_7),
0150         BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 2),
0151         BPF_MOV32_IMM(BPF_REG_0, 256),
0152         BPF_EXIT_INSN(),
0153         BPF_MOV32_IMM(BPF_REG_0, 0),
0154         BPF_EXIT_INSN(),
0155     },
0156     .data = {
0157         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x06, 0,
0158         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0159         0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6,
0160     },
0161     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0162     .result = ACCEPT,
0163     .retval = 256,
0164 },
0165 {
0166     "ld_abs: div + abs, test 1",
0167     .insns = {
0168         BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
0169         BPF_LD_ABS(BPF_B, 3),
0170         BPF_ALU64_IMM(BPF_MOV, BPF_REG_2, 2),
0171         BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_2),
0172         BPF_ALU64_REG(BPF_MOV, BPF_REG_8, BPF_REG_0),
0173         BPF_LD_ABS(BPF_B, 4),
0174         BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_0),
0175         BPF_LD_IND(BPF_B, BPF_REG_8, -70),
0176         BPF_EXIT_INSN(),
0177     },
0178     .data = {
0179         10, 20, 30, 40, 50,
0180     },
0181     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0182     .result = ACCEPT,
0183     .retval = 10,
0184 },
0185 {
0186     "ld_abs: div + abs, test 2",
0187     .insns = {
0188         BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
0189         BPF_LD_ABS(BPF_B, 3),
0190         BPF_ALU64_IMM(BPF_MOV, BPF_REG_2, 2),
0191         BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_2),
0192         BPF_ALU64_REG(BPF_MOV, BPF_REG_8, BPF_REG_0),
0193         BPF_LD_ABS(BPF_B, 128),
0194         BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_0),
0195         BPF_LD_IND(BPF_B, BPF_REG_8, -70),
0196         BPF_EXIT_INSN(),
0197     },
0198     .data = {
0199         10, 20, 30, 40, 50,
0200     },
0201     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0202     .result = ACCEPT,
0203     .retval = 0,
0204 },
0205 {
0206     "ld_abs: div + abs, test 3",
0207     .insns = {
0208         BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
0209         BPF_ALU64_IMM(BPF_MOV, BPF_REG_7, 0),
0210         BPF_LD_ABS(BPF_B, 3),
0211         BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_7),
0212         BPF_EXIT_INSN(),
0213     },
0214     .data = {
0215         10, 20, 30, 40, 50,
0216     },
0217     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0218     .result = ACCEPT,
0219     .retval = 0,
0220 },
0221 {
0222     "ld_abs: div + abs, test 4",
0223     .insns = {
0224         BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
0225         BPF_ALU64_IMM(BPF_MOV, BPF_REG_7, 0),
0226         BPF_LD_ABS(BPF_B, 256),
0227         BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_7),
0228         BPF_EXIT_INSN(),
0229     },
0230     .data = {
0231         10, 20, 30, 40, 50,
0232     },
0233     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0234     .result = ACCEPT,
0235     .retval = 0,
0236 },
0237 {
0238     "ld_abs: vlan + abs, test 1",
0239     .insns = { },
0240     .data = {
0241         0x34,
0242     },
0243     .fill_helper = bpf_fill_ld_abs_vlan_push_pop,
0244     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0245     .result = ACCEPT,
0246     .retval = 0xbef,
0247 },
0248 {
0249     "ld_abs: vlan + abs, test 2",
0250     .insns = {
0251         BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
0252         BPF_LD_ABS(BPF_B, 0),
0253         BPF_LD_ABS(BPF_H, 0),
0254         BPF_LD_ABS(BPF_W, 0),
0255         BPF_MOV64_REG(BPF_REG_7, BPF_REG_6),
0256         BPF_MOV64_IMM(BPF_REG_6, 0),
0257         BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
0258         BPF_MOV64_IMM(BPF_REG_2, 1),
0259         BPF_MOV64_IMM(BPF_REG_3, 2),
0260         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0,
0261                  BPF_FUNC_skb_vlan_push),
0262         BPF_MOV64_REG(BPF_REG_6, BPF_REG_7),
0263         BPF_LD_ABS(BPF_B, 0),
0264         BPF_LD_ABS(BPF_H, 0),
0265         BPF_LD_ABS(BPF_W, 0),
0266         BPF_MOV64_IMM(BPF_REG_0, 42),
0267         BPF_EXIT_INSN(),
0268     },
0269     .data = {
0270         0x34,
0271     },
0272     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0273     .result = ACCEPT,
0274     .retval = 42,
0275 },
0276 {
0277     "ld_abs: jump around ld_abs",
0278     .insns = { },
0279     .data = {
0280         10, 11,
0281     },
0282     .fill_helper = bpf_fill_jump_around_ld_abs,
0283     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0284     .result = ACCEPT,
0285     .retval = 10,
0286 },