1 { 2 "masking, test out of bounds 1", 3 .insns = { 4 BPF_MOV32_IMM(BPF_REG_1, 5), 5 BPF_MOV32_IMM(BPF_REG_2, 5 - 1), 6 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 7 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 8 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 9 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 10 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 11 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 12 BPF_EXIT_INSN(), 13 }, 14 .result = ACCEPT, 15 .retval = 0, 16 }, 17 { 18 "masking, test out of bounds 2", 19 .insns = { 20 BPF_MOV32_IMM(BPF_REG_1, 1), 21 BPF_MOV32_IMM(BPF_REG_2, 1 - 1), 22 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 23 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 24 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 25 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 26 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 27 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 28 BPF_EXIT_INSN(), 29 }, 30 .result = ACCEPT, 31 .retval = 0, 32 }, 33 { 34 "masking, test out of bounds 3", 35 .insns = { 36 BPF_MOV32_IMM(BPF_REG_1, 0xffffffff), 37 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1), 38 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 39 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 40 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 41 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 42 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 43 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 44 BPF_EXIT_INSN(), 45 }, 46 .result = ACCEPT, 47 .retval = 0, 48 }, 49 { 50 "masking, test out of bounds 4", 51 .insns = { 52 BPF_MOV32_IMM(BPF_REG_1, 0xffffffff), 53 BPF_MOV32_IMM(BPF_REG_2, 1 - 1), 54 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 55 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 56 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 57 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 58 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 59 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 60 BPF_EXIT_INSN(), 61 }, 62 .result = ACCEPT, 63 .retval = 0, 64 }, 65 { 66 "masking, test out of bounds 5", 67 .insns = { 68 BPF_MOV32_IMM(BPF_REG_1, -1), 69 BPF_MOV32_IMM(BPF_REG_2, 1 - 1), 70 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 71 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 72 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 73 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 74 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 75 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 76 BPF_EXIT_INSN(), 77 }, 78 .result = ACCEPT, 79 .retval = 0, 80 }, 81 { 82 "masking, test out of bounds 6", 83 .insns = { 84 BPF_MOV32_IMM(BPF_REG_1, -1), 85 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1), 86 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 87 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 88 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 89 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 90 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 91 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 92 BPF_EXIT_INSN(), 93 }, 94 .result = ACCEPT, 95 .retval = 0, 96 }, 97 { 98 "masking, test out of bounds 7", 99 .insns = { 100 BPF_MOV64_IMM(BPF_REG_1, 5), 101 BPF_MOV32_IMM(BPF_REG_2, 5 - 1), 102 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 103 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 104 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 105 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 106 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 107 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 108 BPF_EXIT_INSN(), 109 }, 110 .result = ACCEPT, 111 .retval = 0, 112 }, 113 { 114 "masking, test out of bounds 8", 115 .insns = { 116 BPF_MOV64_IMM(BPF_REG_1, 1), 117 BPF_MOV32_IMM(BPF_REG_2, 1 - 1), 118 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 119 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 120 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 121 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 122 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 123 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 124 BPF_EXIT_INSN(), 125 }, 126 .result = ACCEPT, 127 .retval = 0, 128 }, 129 { 130 "masking, test out of bounds 9", 131 .insns = { 132 BPF_MOV64_IMM(BPF_REG_1, 0xffffffff), 133 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1), 134 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 135 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 136 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 137 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 138 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 139 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 140 BPF_EXIT_INSN(), 141 }, 142 .result = ACCEPT, 143 .retval = 0, 144 }, 145 { 146 "masking, test out of bounds 10", 147 .insns = { 148 BPF_MOV64_IMM(BPF_REG_1, 0xffffffff), 149 BPF_MOV32_IMM(BPF_REG_2, 1 - 1), 150 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 151 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 152 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 153 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 154 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 155 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 156 BPF_EXIT_INSN(), 157 }, 158 .result = ACCEPT, 159 .retval = 0, 160 }, 161 { 162 "masking, test out of bounds 11", 163 .insns = { 164 BPF_MOV64_IMM(BPF_REG_1, -1), 165 BPF_MOV32_IMM(BPF_REG_2, 1 - 1), 166 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 167 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 168 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 169 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 170 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 171 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 172 BPF_EXIT_INSN(), 173 }, 174 .result = ACCEPT, 175 .retval = 0, 176 }, 177 { 178 "masking, test out of bounds 12", 179 .insns = { 180 BPF_MOV64_IMM(BPF_REG_1, -1), 181 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1), 182 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 183 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 184 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 185 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 186 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 187 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 188 BPF_EXIT_INSN(), 189 }, 190 .result = ACCEPT, 191 .retval = 0, 192 }, 193 { 194 "masking, test in bounds 1", 195 .insns = { 196 BPF_MOV32_IMM(BPF_REG_1, 4), 197 BPF_MOV32_IMM(BPF_REG_2, 5 - 1), 198 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 199 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 200 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 201 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 202 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 203 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 204 BPF_EXIT_INSN(), 205 }, 206 .result = ACCEPT, 207 .retval = 4, 208 }, 209 { 210 "masking, test in bounds 2", 211 .insns = { 212 BPF_MOV32_IMM(BPF_REG_1, 0), 213 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1), 214 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 215 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 216 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 217 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 218 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 219 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 220 BPF_EXIT_INSN(), 221 }, 222 .result = ACCEPT, 223 .retval = 0, 224 }, 225 { 226 "masking, test in bounds 3", 227 .insns = { 228 BPF_MOV32_IMM(BPF_REG_1, 0xfffffffe), 229 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1), 230 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 231 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 232 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 233 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 234 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 235 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 236 BPF_EXIT_INSN(), 237 }, 238 .result = ACCEPT, 239 .retval = 0xfffffffe, 240 }, 241 { 242 "masking, test in bounds 4", 243 .insns = { 244 BPF_MOV32_IMM(BPF_REG_1, 0xabcde), 245 BPF_MOV32_IMM(BPF_REG_2, 0xabcdef - 1), 246 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 247 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 248 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 249 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 250 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 251 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 252 BPF_EXIT_INSN(), 253 }, 254 .result = ACCEPT, 255 .retval = 0xabcde, 256 }, 257 { 258 "masking, test in bounds 5", 259 .insns = { 260 BPF_MOV32_IMM(BPF_REG_1, 0), 261 BPF_MOV32_IMM(BPF_REG_2, 1 - 1), 262 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 263 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 264 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 265 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 266 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 267 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 268 BPF_EXIT_INSN(), 269 }, 270 .result = ACCEPT, 271 .retval = 0, 272 }, 273 { 274 "masking, test in bounds 6", 275 .insns = { 276 BPF_MOV32_IMM(BPF_REG_1, 46), 277 BPF_MOV32_IMM(BPF_REG_2, 47 - 1), 278 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 279 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1), 280 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 281 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 282 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2), 283 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 284 BPF_EXIT_INSN(), 285 }, 286 .result = ACCEPT, 287 .retval = 46, 288 }, 289 { 290 "masking, test in bounds 7", 291 .insns = { 292 BPF_MOV64_IMM(BPF_REG_3, -46), 293 BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, -1), 294 BPF_MOV32_IMM(BPF_REG_2, 47 - 1), 295 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_3), 296 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_3), 297 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 298 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 299 BPF_ALU64_REG(BPF_AND, BPF_REG_3, BPF_REG_2), 300 BPF_MOV64_REG(BPF_REG_0, BPF_REG_3), 301 BPF_EXIT_INSN(), 302 }, 303 .result = ACCEPT, 304 .retval = 46, 305 }, 306 { 307 "masking, test in bounds 8", 308 .insns = { 309 BPF_MOV64_IMM(BPF_REG_3, -47), 310 BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, -1), 311 BPF_MOV32_IMM(BPF_REG_2, 47 - 1), 312 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_3), 313 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_3), 314 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0), 315 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63), 316 BPF_ALU64_REG(BPF_AND, BPF_REG_3, BPF_REG_2), 317 BPF_MOV64_REG(BPF_REG_0, BPF_REG_3), 318 BPF_EXIT_INSN(), 319 }, 320 .result = ACCEPT, 321 .retval = 0, 322 },