0001 {
0002 "masking, test out of bounds 1",
0003 .insns = {
0004 BPF_MOV32_IMM(BPF_REG_1, 5),
0005 BPF_MOV32_IMM(BPF_REG_2, 5 - 1),
0006 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0007 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0008 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0009 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0010 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0011 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0012 BPF_EXIT_INSN(),
0013 },
0014 .result = ACCEPT,
0015 .retval = 0,
0016 },
0017 {
0018 "masking, test out of bounds 2",
0019 .insns = {
0020 BPF_MOV32_IMM(BPF_REG_1, 1),
0021 BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
0022 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0023 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0024 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0025 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0026 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0027 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0028 BPF_EXIT_INSN(),
0029 },
0030 .result = ACCEPT,
0031 .retval = 0,
0032 },
0033 {
0034 "masking, test out of bounds 3",
0035 .insns = {
0036 BPF_MOV32_IMM(BPF_REG_1, 0xffffffff),
0037 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
0038 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0039 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0040 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0041 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0042 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0043 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0044 BPF_EXIT_INSN(),
0045 },
0046 .result = ACCEPT,
0047 .retval = 0,
0048 },
0049 {
0050 "masking, test out of bounds 4",
0051 .insns = {
0052 BPF_MOV32_IMM(BPF_REG_1, 0xffffffff),
0053 BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
0054 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0055 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0056 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0057 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0058 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0059 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0060 BPF_EXIT_INSN(),
0061 },
0062 .result = ACCEPT,
0063 .retval = 0,
0064 },
0065 {
0066 "masking, test out of bounds 5",
0067 .insns = {
0068 BPF_MOV32_IMM(BPF_REG_1, -1),
0069 BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
0070 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0071 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0072 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0073 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0074 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0075 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0076 BPF_EXIT_INSN(),
0077 },
0078 .result = ACCEPT,
0079 .retval = 0,
0080 },
0081 {
0082 "masking, test out of bounds 6",
0083 .insns = {
0084 BPF_MOV32_IMM(BPF_REG_1, -1),
0085 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
0086 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0087 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0088 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0089 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0090 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0091 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0092 BPF_EXIT_INSN(),
0093 },
0094 .result = ACCEPT,
0095 .retval = 0,
0096 },
0097 {
0098 "masking, test out of bounds 7",
0099 .insns = {
0100 BPF_MOV64_IMM(BPF_REG_1, 5),
0101 BPF_MOV32_IMM(BPF_REG_2, 5 - 1),
0102 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0103 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0104 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0105 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0106 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0107 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0108 BPF_EXIT_INSN(),
0109 },
0110 .result = ACCEPT,
0111 .retval = 0,
0112 },
0113 {
0114 "masking, test out of bounds 8",
0115 .insns = {
0116 BPF_MOV64_IMM(BPF_REG_1, 1),
0117 BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
0118 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0119 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0120 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0121 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0122 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0123 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0124 BPF_EXIT_INSN(),
0125 },
0126 .result = ACCEPT,
0127 .retval = 0,
0128 },
0129 {
0130 "masking, test out of bounds 9",
0131 .insns = {
0132 BPF_MOV64_IMM(BPF_REG_1, 0xffffffff),
0133 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
0134 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0135 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0136 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0137 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0138 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0139 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0140 BPF_EXIT_INSN(),
0141 },
0142 .result = ACCEPT,
0143 .retval = 0,
0144 },
0145 {
0146 "masking, test out of bounds 10",
0147 .insns = {
0148 BPF_MOV64_IMM(BPF_REG_1, 0xffffffff),
0149 BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
0150 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0151 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0152 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0153 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0154 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0155 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0156 BPF_EXIT_INSN(),
0157 },
0158 .result = ACCEPT,
0159 .retval = 0,
0160 },
0161 {
0162 "masking, test out of bounds 11",
0163 .insns = {
0164 BPF_MOV64_IMM(BPF_REG_1, -1),
0165 BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
0166 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0167 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0168 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0169 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0170 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0171 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0172 BPF_EXIT_INSN(),
0173 },
0174 .result = ACCEPT,
0175 .retval = 0,
0176 },
0177 {
0178 "masking, test out of bounds 12",
0179 .insns = {
0180 BPF_MOV64_IMM(BPF_REG_1, -1),
0181 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
0182 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0183 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0184 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0185 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0186 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0187 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0188 BPF_EXIT_INSN(),
0189 },
0190 .result = ACCEPT,
0191 .retval = 0,
0192 },
0193 {
0194 "masking, test in bounds 1",
0195 .insns = {
0196 BPF_MOV32_IMM(BPF_REG_1, 4),
0197 BPF_MOV32_IMM(BPF_REG_2, 5 - 1),
0198 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0199 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0200 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0201 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0202 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0203 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0204 BPF_EXIT_INSN(),
0205 },
0206 .result = ACCEPT,
0207 .retval = 4,
0208 },
0209 {
0210 "masking, test in bounds 2",
0211 .insns = {
0212 BPF_MOV32_IMM(BPF_REG_1, 0),
0213 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
0214 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0215 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0216 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0217 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0218 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0219 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0220 BPF_EXIT_INSN(),
0221 },
0222 .result = ACCEPT,
0223 .retval = 0,
0224 },
0225 {
0226 "masking, test in bounds 3",
0227 .insns = {
0228 BPF_MOV32_IMM(BPF_REG_1, 0xfffffffe),
0229 BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
0230 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0231 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0232 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0233 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0234 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0235 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0236 BPF_EXIT_INSN(),
0237 },
0238 .result = ACCEPT,
0239 .retval = 0xfffffffe,
0240 },
0241 {
0242 "masking, test in bounds 4",
0243 .insns = {
0244 BPF_MOV32_IMM(BPF_REG_1, 0xabcde),
0245 BPF_MOV32_IMM(BPF_REG_2, 0xabcdef - 1),
0246 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0247 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0248 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0249 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0250 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0251 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0252 BPF_EXIT_INSN(),
0253 },
0254 .result = ACCEPT,
0255 .retval = 0xabcde,
0256 },
0257 {
0258 "masking, test in bounds 5",
0259 .insns = {
0260 BPF_MOV32_IMM(BPF_REG_1, 0),
0261 BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
0262 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0263 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0264 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0265 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0266 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0267 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0268 BPF_EXIT_INSN(),
0269 },
0270 .result = ACCEPT,
0271 .retval = 0,
0272 },
0273 {
0274 "masking, test in bounds 6",
0275 .insns = {
0276 BPF_MOV32_IMM(BPF_REG_1, 46),
0277 BPF_MOV32_IMM(BPF_REG_2, 47 - 1),
0278 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
0279 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
0280 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0281 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0282 BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
0283 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0284 BPF_EXIT_INSN(),
0285 },
0286 .result = ACCEPT,
0287 .retval = 46,
0288 },
0289 {
0290 "masking, test in bounds 7",
0291 .insns = {
0292 BPF_MOV64_IMM(BPF_REG_3, -46),
0293 BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, -1),
0294 BPF_MOV32_IMM(BPF_REG_2, 47 - 1),
0295 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_3),
0296 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_3),
0297 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0298 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0299 BPF_ALU64_REG(BPF_AND, BPF_REG_3, BPF_REG_2),
0300 BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
0301 BPF_EXIT_INSN(),
0302 },
0303 .result = ACCEPT,
0304 .retval = 46,
0305 },
0306 {
0307 "masking, test in bounds 8",
0308 .insns = {
0309 BPF_MOV64_IMM(BPF_REG_3, -47),
0310 BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, -1),
0311 BPF_MOV32_IMM(BPF_REG_2, 47 - 1),
0312 BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_3),
0313 BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_3),
0314 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
0315 BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
0316 BPF_ALU64_REG(BPF_AND, BPF_REG_3, BPF_REG_2),
0317 BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
0318 BPF_EXIT_INSN(),
0319 },
0320 .result = ACCEPT,
0321 .retval = 0,
0322 },