Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "add+sub+mul",
0003     .insns = {
0004     BPF_MOV64_IMM(BPF_REG_1, 1),
0005     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 2),
0006     BPF_MOV64_IMM(BPF_REG_2, 3),
0007     BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_2),
0008     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -1),
0009     BPF_ALU64_IMM(BPF_MUL, BPF_REG_1, 3),
0010     BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0011     BPF_EXIT_INSN(),
0012     },
0013     .result = ACCEPT,
0014     .retval = -3,
0015 },
0016 {
0017     "xor32 zero extend check",
0018     .insns = {
0019     BPF_MOV32_IMM(BPF_REG_2, -1),
0020     BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 32),
0021     BPF_ALU64_IMM(BPF_OR, BPF_REG_2, 0xffff),
0022     BPF_ALU32_REG(BPF_XOR, BPF_REG_2, BPF_REG_2),
0023     BPF_MOV32_IMM(BPF_REG_0, 2),
0024     BPF_JMP_IMM(BPF_JNE, BPF_REG_2, 0, 1),
0025     BPF_MOV32_IMM(BPF_REG_0, 1),
0026     BPF_EXIT_INSN(),
0027     },
0028     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0029     .result = ACCEPT,
0030     .retval = 1,
0031 },
0032 {
0033     "arsh32 on imm",
0034     .insns = {
0035     BPF_MOV64_IMM(BPF_REG_0, 1),
0036     BPF_ALU32_IMM(BPF_ARSH, BPF_REG_0, 5),
0037     BPF_EXIT_INSN(),
0038     },
0039     .result = ACCEPT,
0040     .retval = 0,
0041 },
0042 {
0043     "arsh32 on imm 2",
0044     .insns = {
0045     BPF_LD_IMM64(BPF_REG_0, 0x1122334485667788),
0046     BPF_ALU32_IMM(BPF_ARSH, BPF_REG_0, 7),
0047     BPF_EXIT_INSN(),
0048     },
0049     .result = ACCEPT,
0050     .retval = -16069393,
0051 },
0052 {
0053     "arsh32 on reg",
0054     .insns = {
0055     BPF_MOV64_IMM(BPF_REG_0, 1),
0056     BPF_MOV64_IMM(BPF_REG_1, 5),
0057     BPF_ALU32_REG(BPF_ARSH, BPF_REG_0, BPF_REG_1),
0058     BPF_EXIT_INSN(),
0059     },
0060     .result = ACCEPT,
0061     .retval = 0,
0062 },
0063 {
0064     "arsh32 on reg 2",
0065     .insns = {
0066     BPF_LD_IMM64(BPF_REG_0, 0xffff55667788),
0067     BPF_MOV64_IMM(BPF_REG_1, 15),
0068     BPF_ALU32_REG(BPF_ARSH, BPF_REG_0, BPF_REG_1),
0069     BPF_EXIT_INSN(),
0070     },
0071     .result = ACCEPT,
0072     .retval = 43724,
0073 },
0074 {
0075     "arsh64 on imm",
0076     .insns = {
0077     BPF_MOV64_IMM(BPF_REG_0, 1),
0078     BPF_ALU64_IMM(BPF_ARSH, BPF_REG_0, 5),
0079     BPF_EXIT_INSN(),
0080     },
0081     .result = ACCEPT,
0082 },
0083 {
0084     "arsh64 on reg",
0085     .insns = {
0086     BPF_MOV64_IMM(BPF_REG_0, 1),
0087     BPF_MOV64_IMM(BPF_REG_1, 5),
0088     BPF_ALU64_REG(BPF_ARSH, BPF_REG_0, BPF_REG_1),
0089     BPF_EXIT_INSN(),
0090     },
0091     .result = ACCEPT,
0092 },
0093 {
0094     "lsh64 by 0 imm",
0095     .insns = {
0096     BPF_LD_IMM64(BPF_REG_0, 1),
0097     BPF_LD_IMM64(BPF_REG_1, 1),
0098     BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 0),
0099     BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 1),
0100     BPF_MOV64_IMM(BPF_REG_0, 2),
0101     BPF_EXIT_INSN(),
0102     },
0103     .result = ACCEPT,
0104     .retval = 1,
0105 },
0106 {
0107     "rsh64 by 0 imm",
0108     .insns = {
0109     BPF_LD_IMM64(BPF_REG_0, 1),
0110     BPF_LD_IMM64(BPF_REG_1, 0x100000000LL),
0111     BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_1),
0112     BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 0),
0113     BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
0114     BPF_MOV64_IMM(BPF_REG_0, 2),
0115     BPF_EXIT_INSN(),
0116     },
0117     .result = ACCEPT,
0118     .retval = 1,
0119 },
0120 {
0121     "arsh64 by 0 imm",
0122     .insns = {
0123     BPF_LD_IMM64(BPF_REG_0, 1),
0124     BPF_LD_IMM64(BPF_REG_1, 0x100000000LL),
0125     BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_1),
0126     BPF_ALU64_IMM(BPF_ARSH, BPF_REG_1, 0),
0127     BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
0128     BPF_MOV64_IMM(BPF_REG_0, 2),
0129     BPF_EXIT_INSN(),
0130     },
0131     .result = ACCEPT,
0132     .retval = 1,
0133 },
0134 {
0135     "lsh64 by 0 reg",
0136     .insns = {
0137     BPF_LD_IMM64(BPF_REG_0, 1),
0138     BPF_LD_IMM64(BPF_REG_1, 1),
0139     BPF_LD_IMM64(BPF_REG_2, 0),
0140     BPF_ALU64_REG(BPF_LSH, BPF_REG_1, BPF_REG_2),
0141     BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 1),
0142     BPF_MOV64_IMM(BPF_REG_0, 2),
0143     BPF_EXIT_INSN(),
0144     },
0145     .result = ACCEPT,
0146     .retval = 1,
0147 },
0148 {
0149     "rsh64 by 0 reg",
0150     .insns = {
0151     BPF_LD_IMM64(BPF_REG_0, 1),
0152     BPF_LD_IMM64(BPF_REG_1, 0x100000000LL),
0153     BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_1),
0154     BPF_LD_IMM64(BPF_REG_3, 0),
0155     BPF_ALU64_REG(BPF_RSH, BPF_REG_1, BPF_REG_3),
0156     BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
0157     BPF_MOV64_IMM(BPF_REG_0, 2),
0158     BPF_EXIT_INSN(),
0159     },
0160     .result = ACCEPT,
0161     .retval = 1,
0162 },
0163 {
0164     "arsh64 by 0 reg",
0165     .insns = {
0166     BPF_LD_IMM64(BPF_REG_0, 1),
0167     BPF_LD_IMM64(BPF_REG_1, 0x100000000LL),
0168     BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_1),
0169     BPF_LD_IMM64(BPF_REG_3, 0),
0170     BPF_ALU64_REG(BPF_ARSH, BPF_REG_1, BPF_REG_3),
0171     BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
0172     BPF_MOV64_IMM(BPF_REG_0, 2),
0173     BPF_EXIT_INSN(),
0174     },
0175     .result = ACCEPT,
0176     .retval = 1,
0177 },
0178 {
0179     "invalid 64-bit BPF_END",
0180     .insns = {
0181     BPF_MOV32_IMM(BPF_REG_0, 0),
0182     {
0183         .code  = BPF_ALU64 | BPF_END | BPF_TO_LE,
0184         .dst_reg = BPF_REG_0,
0185         .src_reg = 0,
0186         .off   = 0,
0187         .imm   = 32,
0188     },
0189     BPF_EXIT_INSN(),
0190     },
0191     .errstr = "unknown opcode d7",
0192     .result = REJECT,
0193 },
0194 {
0195     "mov64 src == dst",
0196     .insns = {
0197     BPF_MOV64_IMM(BPF_REG_2, 0),
0198     BPF_MOV64_REG(BPF_REG_2, BPF_REG_2),
0199     // Check bounds are OK
0200     BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_2),
0201     BPF_MOV64_IMM(BPF_REG_0, 0),
0202     BPF_EXIT_INSN(),
0203     },
0204     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0205     .result = ACCEPT,
0206 },
0207 {
0208     "mov64 src != dst",
0209     .insns = {
0210     BPF_MOV64_IMM(BPF_REG_3, 0),
0211     BPF_MOV64_REG(BPF_REG_2, BPF_REG_3),
0212     // Check bounds are OK
0213     BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_2),
0214     BPF_MOV64_IMM(BPF_REG_0, 0),
0215     BPF_EXIT_INSN(),
0216     },
0217     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0218     .result = ACCEPT,
0219 },