1 { 2 "jit: lsh, rsh, arsh by 1", 3 .insns = { 4 BPF_MOV64_IMM(BPF_REG_0, 1), 5 BPF_MOV64_IMM(BPF_REG_1, 0xff), 6 BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 1), 7 BPF_ALU32_IMM(BPF_LSH, BPF_REG_1, 1), 8 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x3fc, 1), 9 BPF_EXIT_INSN(), 10 BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 1), 11 BPF_ALU32_IMM(BPF_RSH, BPF_REG_1, 1), 12 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0xff, 1), 13 BPF_EXIT_INSN(), 14 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_1, 1), 15 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x7f, 1), 16 BPF_EXIT_INSN(), 17 BPF_MOV64_IMM(BPF_REG_0, 2), 18 BPF_EXIT_INSN(), 19 }, 20 .result = ACCEPT, 21 .retval = 2, 22 }, 23 { 24 "jit: lsh, rsh, arsh by reg", 25 .insns = { 26 BPF_MOV64_IMM(BPF_REG_0, 1), 27 BPF_MOV64_IMM(BPF_REG_4, 1), 28 BPF_MOV64_IMM(BPF_REG_1, 0xff), 29 BPF_ALU64_REG(BPF_LSH, BPF_REG_1, BPF_REG_0), 30 BPF_ALU32_REG(BPF_LSH, BPF_REG_1, BPF_REG_4), 31 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x3fc, 1), 32 BPF_EXIT_INSN(), 33 BPF_ALU64_REG(BPF_RSH, BPF_REG_1, BPF_REG_4), 34 BPF_MOV64_REG(BPF_REG_4, BPF_REG_1), 35 BPF_ALU32_REG(BPF_RSH, BPF_REG_4, BPF_REG_0), 36 BPF_JMP_IMM(BPF_JEQ, BPF_REG_4, 0xff, 1), 37 BPF_EXIT_INSN(), 38 BPF_ALU64_REG(BPF_ARSH, BPF_REG_4, BPF_REG_4), 39 BPF_JMP_IMM(BPF_JEQ, BPF_REG_4, 0, 1), 40 BPF_EXIT_INSN(), 41 BPF_MOV64_IMM(BPF_REG_0, 2), 42 BPF_EXIT_INSN(), 43 }, 44 .result = ACCEPT, 45 .retval = 2, 46 }, 47 { 48 "jit: mov32 for ldimm64, 1", 49 .insns = { 50 BPF_MOV64_IMM(BPF_REG_0, 2), 51 BPF_LD_IMM64(BPF_REG_1, 0xfeffffffffffffffULL), 52 BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 32), 53 BPF_LD_IMM64(BPF_REG_2, 0xfeffffffULL), 54 BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1), 55 BPF_MOV64_IMM(BPF_REG_0, 1), 56 BPF_EXIT_INSN(), 57 }, 58 .result = ACCEPT, 59 .retval = 2, 60 }, 61 { 62 "jit: mov32 for ldimm64, 2", 63 .insns = { 64 BPF_MOV64_IMM(BPF_REG_0, 1), 65 BPF_LD_IMM64(BPF_REG_1, 0x1ffffffffULL), 66 BPF_LD_IMM64(BPF_REG_2, 0xffffffffULL), 67 BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1), 68 BPF_MOV64_IMM(BPF_REG_0, 2), 69 BPF_EXIT_INSN(), 70 }, 71 .result = ACCEPT, 72 .retval = 2, 73 }, 74 { 75 "jit: various mul tests", 76 .insns = { 77 BPF_LD_IMM64(BPF_REG_2, 0xeeff0d413122ULL), 78 BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL), 79 BPF_LD_IMM64(BPF_REG_1, 0xefefefULL), 80 BPF_ALU64_REG(BPF_MUL, BPF_REG_0, BPF_REG_1), 81 BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2), 82 BPF_MOV64_IMM(BPF_REG_0, 1), 83 BPF_EXIT_INSN(), 84 BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL), 85 BPF_ALU64_REG(BPF_MUL, BPF_REG_3, BPF_REG_1), 86 BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 87 BPF_MOV64_IMM(BPF_REG_0, 1), 88 BPF_EXIT_INSN(), 89 BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL), 90 BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, 0xefefef), 91 BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 92 BPF_MOV64_IMM(BPF_REG_0, 1), 93 BPF_EXIT_INSN(), 94 BPF_MOV32_REG(BPF_REG_2, BPF_REG_2), 95 BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL), 96 BPF_ALU32_REG(BPF_MUL, BPF_REG_0, BPF_REG_1), 97 BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2), 98 BPF_MOV64_IMM(BPF_REG_0, 1), 99 BPF_EXIT_INSN(), 100 BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL), 101 BPF_ALU32_REG(BPF_MUL, BPF_REG_3, BPF_REG_1), 102 BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 103 BPF_MOV64_IMM(BPF_REG_0, 1), 104 BPF_EXIT_INSN(), 105 BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL), 106 BPF_ALU32_IMM(BPF_MUL, BPF_REG_3, 0xefefef), 107 BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 108 BPF_MOV64_IMM(BPF_REG_0, 1), 109 BPF_EXIT_INSN(), 110 BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL), 111 BPF_LD_IMM64(BPF_REG_2, 0x2ad4d4aaULL), 112 BPF_ALU32_IMM(BPF_MUL, BPF_REG_0, 0x2b), 113 BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2), 114 BPF_MOV64_IMM(BPF_REG_0, 1), 115 BPF_EXIT_INSN(), 116 BPF_LD_IMM64(BPF_REG_0, 0x952a7bbcULL), 117 BPF_LD_IMM64(BPF_REG_1, 0xfefefeULL), 118 BPF_LD_IMM64(BPF_REG_5, 0xeeff0d413122ULL), 119 BPF_ALU32_REG(BPF_MUL, BPF_REG_5, BPF_REG_1), 120 BPF_JMP_REG(BPF_JEQ, BPF_REG_5, BPF_REG_0, 2), 121 BPF_MOV64_IMM(BPF_REG_0, 1), 122 BPF_EXIT_INSN(), 123 BPF_MOV64_IMM(BPF_REG_0, 2), 124 BPF_EXIT_INSN(), 125 }, 126 .result = ACCEPT, 127 .retval = 2, 128 }, 129 { 130 "jit: various div tests", 131 .insns = { 132 BPF_LD_IMM64(BPF_REG_2, 0xefeffeULL), 133 BPF_LD_IMM64(BPF_REG_0, 0xeeff0d413122ULL), 134 BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL), 135 BPF_ALU64_REG(BPF_DIV, BPF_REG_0, BPF_REG_1), 136 BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2), 137 BPF_MOV64_IMM(BPF_REG_0, 1), 138 BPF_EXIT_INSN(), 139 BPF_LD_IMM64(BPF_REG_3, 0xeeff0d413122ULL), 140 BPF_ALU64_IMM(BPF_DIV, BPF_REG_3, 0xfefeeeULL), 141 BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2), 142 BPF_MOV64_IMM(BPF_REG_0, 1), 143 BPF_EXIT_INSN(), 144 BPF_LD_IMM64(BPF_REG_2, 0xaa93ULL), 145 BPF_ALU64_IMM(BPF_MOD, BPF_REG_1, 0xbeefULL), 146 BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2), 147 BPF_MOV64_IMM(BPF_REG_0, 1), 148 BPF_EXIT_INSN(), 149 BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL), 150 BPF_LD_IMM64(BPF_REG_3, 0xbeefULL), 151 BPF_ALU64_REG(BPF_MOD, BPF_REG_1, BPF_REG_3), 152 BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2), 153 BPF_MOV64_IMM(BPF_REG_0, 1), 154 BPF_EXIT_INSN(), 155 BPF_LD_IMM64(BPF_REG_2, 0x5ee1dULL), 156 BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL), 157 BPF_LD_IMM64(BPF_REG_3, 0x2bULL), 158 BPF_ALU32_REG(BPF_DIV, BPF_REG_1, BPF_REG_3), 159 BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2), 160 BPF_MOV64_IMM(BPF_REG_0, 1), 161 BPF_EXIT_INSN(), 162 BPF_ALU32_REG(BPF_DIV, BPF_REG_1, BPF_REG_1), 163 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 2), 164 BPF_MOV64_IMM(BPF_REG_0, 1), 165 BPF_EXIT_INSN(), 166 BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_2), 167 BPF_JMP_IMM(BPF_JEQ, BPF_REG_2, 0, 2), 168 BPF_MOV64_IMM(BPF_REG_0, 1), 169 BPF_EXIT_INSN(), 170 BPF_MOV64_IMM(BPF_REG_0, 2), 171 BPF_EXIT_INSN(), 172 }, 173 .result = ACCEPT, 174 .retval = 2, 175 }, 176 { 177 "jit: jsgt, jslt", 178 .insns = { 179 BPF_LD_IMM64(BPF_REG_1, 0x80000000ULL), 180 BPF_LD_IMM64(BPF_REG_2, 0x0ULL), 181 BPF_JMP_REG(BPF_JSGT, BPF_REG_1, BPF_REG_2, 2), 182 BPF_MOV64_IMM(BPF_REG_0, 1), 183 BPF_EXIT_INSN(), 184 185 BPF_JMP_REG(BPF_JSLT, BPF_REG_2, BPF_REG_1, 2), 186 BPF_MOV64_IMM(BPF_REG_0, 1), 187 BPF_EXIT_INSN(), 188 189 BPF_MOV64_IMM(BPF_REG_0, 2), 190 BPF_EXIT_INSN(), 191 }, 192 .result = ACCEPT, 193 .retval = 2, 194 }, 195 { 196 "jit: torturous jumps, imm8 nop jmp and pure jump padding", 197 .insns = { }, 198 .fill_helper = bpf_fill_torturous_jumps, 199 .prog_type = BPF_PROG_TYPE_SCHED_CLS, 200 .result = ACCEPT, 201 .retval = 1, 202 }, 203 { 204 "jit: torturous jumps, imm32 nop jmp and jmp_cond padding", 205 .insns = { }, 206 .fill_helper = bpf_fill_torturous_jumps, 207 .prog_type = BPF_PROG_TYPE_SCHED_CLS, 208 .result = ACCEPT, 209 .retval = 2, 210 }, 211 { 212 "jit: torturous jumps in subprog", 213 .insns = { }, 214 .fill_helper = bpf_fill_torturous_jumps, 215 .prog_type = BPF_PROG_TYPE_SCHED_CLS, 216 .result = ACCEPT, 217 .retval = 3, 218 }, 219