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
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
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 },