896 lines · c
1{2 "jset32: BPF_K",3 .insns = {4 BPF_DIRECT_PKT_R2,5 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),6 /* reg, high bits shouldn't be tested */7 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, -2, 1),8 BPF_JMP_IMM(BPF_JA, 0, 0, 1),9 BPF_EXIT_INSN(),10 11 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, 1, 1),12 BPF_EXIT_INSN(),13 BPF_MOV64_IMM(BPF_REG_0, 2),14 BPF_EXIT_INSN(),15 },16 .prog_type = BPF_PROG_TYPE_SCHED_CLS,17 .result = ACCEPT,18 .runs = 3,19 .retvals = {20 { .retval = 0,21 .data64 = { 1ULL << 63, }22 },23 { .retval = 2,24 .data64 = { 1, }25 },26 { .retval = 2,27 .data64 = { 1ULL << 63 | 1, }28 },29 },30 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,31},32{33 "jset32: BPF_X",34 .insns = {35 BPF_DIRECT_PKT_R2,36 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),37 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000000),38 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),39 BPF_JMP_IMM(BPF_JA, 0, 0, 1),40 BPF_EXIT_INSN(),41 42 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),43 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),44 BPF_EXIT_INSN(),45 BPF_MOV64_IMM(BPF_REG_0, 2),46 BPF_EXIT_INSN(),47 },48 .prog_type = BPF_PROG_TYPE_SCHED_CLS,49 .result = ACCEPT,50 .runs = 3,51 .retvals = {52 { .retval = 0,53 .data64 = { 1ULL << 63, }54 },55 { .retval = 2,56 .data64 = { 1, }57 },58 { .retval = 2,59 .data64 = { 1ULL << 63 | 1, }60 },61 },62 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,63},64{65 "jset32: ignores upper bits",66 .insns = {67 BPF_MOV64_IMM(BPF_REG_0, 0),68 BPF_LD_IMM64(BPF_REG_7, 0x8000000000000000),69 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000000),70 BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),71 BPF_EXIT_INSN(),72 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),73 BPF_MOV64_IMM(BPF_REG_0, 2),74 BPF_EXIT_INSN(),75 },76 .result = ACCEPT,77 .retval = 2,78},79{80 "jset32: min/max deduction",81 .insns = {82 BPF_RAND_UEXT_R7,83 BPF_MOV64_IMM(BPF_REG_0, 0),84 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, 0x10, 1),85 BPF_EXIT_INSN(),86 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, 0x10, 1),87 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),88 BPF_EXIT_INSN(),89 },90 .errstr_unpriv = "R9 !read_ok",91 .result_unpriv = REJECT,92 .result = ACCEPT,93},94{95 "jeq32: BPF_K",96 .insns = {97 BPF_DIRECT_PKT_R2,98 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),99 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_7, -1, 1),100 BPF_EXIT_INSN(),101 BPF_MOV64_IMM(BPF_REG_0, 2),102 BPF_EXIT_INSN(),103 },104 .prog_type = BPF_PROG_TYPE_SCHED_CLS,105 .result = ACCEPT,106 .runs = 2,107 .retvals = {108 { .retval = 0,109 .data64 = { -2, }110 },111 { .retval = 2,112 .data64 = { -1, }113 },114 },115 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,116},117{118 "jeq32: BPF_X",119 .insns = {120 BPF_DIRECT_PKT_R2,121 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),122 BPF_LD_IMM64(BPF_REG_8, 0x7000000000000001),123 BPF_JMP32_REG(BPF_JEQ, BPF_REG_7, BPF_REG_8, 1),124 BPF_EXIT_INSN(),125 BPF_MOV64_IMM(BPF_REG_0, 2),126 BPF_EXIT_INSN(),127 },128 .prog_type = BPF_PROG_TYPE_SCHED_CLS,129 .result = ACCEPT,130 .runs = 3,131 .retvals = {132 { .retval = 0,133 .data64 = { 2, }134 },135 { .retval = 2,136 .data64 = { 1, }137 },138 { .retval = 2,139 .data64 = { 1ULL << 63 | 1, }140 },141 },142 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,143},144{145 "jeq32: min/max deduction",146 .insns = {147 BPF_RAND_UEXT_R7,148 BPF_MOV64_IMM(BPF_REG_0, 0),149 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_7, 0x10, 1),150 BPF_EXIT_INSN(),151 BPF_JMP32_IMM(BPF_JSGE, BPF_REG_7, 0xf, 1),152 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),153 BPF_EXIT_INSN(),154 },155 .errstr_unpriv = "R9 !read_ok",156 .result_unpriv = REJECT,157 .result = ACCEPT,158},159{160 "jne32: BPF_K",161 .insns = {162 BPF_DIRECT_PKT_R2,163 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),164 BPF_JMP32_IMM(BPF_JNE, BPF_REG_7, -1, 1),165 BPF_EXIT_INSN(),166 BPF_MOV64_IMM(BPF_REG_0, 2),167 BPF_EXIT_INSN(),168 },169 .prog_type = BPF_PROG_TYPE_SCHED_CLS,170 .result = ACCEPT,171 .runs = 2,172 .retvals = {173 { .retval = 2,174 .data64 = { 1, }175 },176 { .retval = 0,177 .data64 = { -1, }178 },179 },180 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,181},182{183 "jne32: BPF_X",184 .insns = {185 BPF_DIRECT_PKT_R2,186 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),187 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),188 BPF_JMP32_REG(BPF_JNE, BPF_REG_7, BPF_REG_8, 1),189 BPF_EXIT_INSN(),190 BPF_MOV64_IMM(BPF_REG_0, 2),191 BPF_EXIT_INSN(),192 },193 .prog_type = BPF_PROG_TYPE_SCHED_CLS,194 .result = ACCEPT,195 .runs = 3,196 .retvals = {197 { .retval = 0,198 .data64 = { 1, }199 },200 { .retval = 2,201 .data64 = { 2, }202 },203 { .retval = 2,204 .data64 = { 1ULL << 63 | 2, }205 },206 },207 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,208},209{210 "jne32: min/max deduction",211 .insns = {212 BPF_RAND_UEXT_R7,213 BPF_MOV64_IMM(BPF_REG_0, 0),214 BPF_JMP32_IMM(BPF_JNE, BPF_REG_7, 0x10, 1),215 BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0x10, 1),216 BPF_EXIT_INSN(),217 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),218 BPF_EXIT_INSN(),219 },220 .errstr_unpriv = "R9 !read_ok",221 .result_unpriv = REJECT,222 .result = ACCEPT,223},224{225 "jge32: BPF_K",226 .insns = {227 BPF_DIRECT_PKT_R2,228 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),229 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, UINT_MAX - 1, 1),230 BPF_EXIT_INSN(),231 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),232 BPF_EXIT_INSN(),233 },234 .prog_type = BPF_PROG_TYPE_SCHED_CLS,235 .result = ACCEPT,236 .runs = 3,237 .retvals = {238 { .retval = 2,239 .data64 = { UINT_MAX, }240 },241 { .retval = 2,242 .data64 = { UINT_MAX - 1, }243 },244 { .retval = 0,245 .data64 = { 0, }246 },247 },248 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,249},250{251 "jge32: BPF_X",252 .insns = {253 BPF_DIRECT_PKT_R2,254 BPF_LD_IMM64(BPF_REG_8, UINT_MAX | 1ULL << 32),255 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),256 BPF_JMP32_REG(BPF_JGE, BPF_REG_7, BPF_REG_8, 1),257 BPF_EXIT_INSN(),258 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),259 BPF_EXIT_INSN(),260 },261 .prog_type = BPF_PROG_TYPE_SCHED_CLS,262 .result = ACCEPT,263 .runs = 3,264 .retvals = {265 { .retval = 2,266 .data64 = { UINT_MAX, }267 },268 { .retval = 0,269 .data64 = { INT_MAX, }270 },271 { .retval = 0,272 .data64 = { (UINT_MAX - 1) | 2ULL << 32, }273 },274 },275 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,276},277{278 "jge32: min/max deduction",279 .insns = {280 BPF_RAND_UEXT_R7,281 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),282 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),283 BPF_JMP32_REG(BPF_JGE, BPF_REG_7, BPF_REG_8, 1),284 BPF_EXIT_INSN(),285 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, 0x7ffffff0, 1),286 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),287 BPF_EXIT_INSN(),288 },289 .errstr_unpriv = "R0 invalid mem access 'scalar'",290 .result_unpriv = REJECT,291 .result = ACCEPT,292 .retval = 2,293 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,294},295{296 "jgt32: BPF_K",297 .insns = {298 BPF_DIRECT_PKT_R2,299 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),300 BPF_JMP32_IMM(BPF_JGT, BPF_REG_7, UINT_MAX - 1, 1),301 BPF_EXIT_INSN(),302 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),303 BPF_EXIT_INSN(),304 },305 .prog_type = BPF_PROG_TYPE_SCHED_CLS,306 .result = ACCEPT,307 .runs = 3,308 .retvals = {309 { .retval = 2,310 .data64 = { UINT_MAX, }311 },312 { .retval = 0,313 .data64 = { UINT_MAX - 1, }314 },315 { .retval = 0,316 .data64 = { 0, }317 },318 },319 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,320},321{322 "jgt32: BPF_X",323 .insns = {324 BPF_DIRECT_PKT_R2,325 BPF_LD_IMM64(BPF_REG_8, (UINT_MAX - 1) | 1ULL << 32),326 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),327 BPF_JMP32_REG(BPF_JGT, BPF_REG_7, BPF_REG_8, 1),328 BPF_EXIT_INSN(),329 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),330 BPF_EXIT_INSN(),331 },332 .prog_type = BPF_PROG_TYPE_SCHED_CLS,333 .result = ACCEPT,334 .runs = 3,335 .retvals = {336 { .retval = 2,337 .data64 = { UINT_MAX, }338 },339 { .retval = 0,340 .data64 = { UINT_MAX - 1, }341 },342 { .retval = 0,343 .data64 = { (UINT_MAX - 1) | 2ULL << 32, }344 },345 },346 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,347},348{349 "jgt32: min/max deduction",350 .insns = {351 BPF_RAND_UEXT_R7,352 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),353 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),354 BPF_JMP32_REG(BPF_JGT, BPF_REG_7, BPF_REG_8, 1),355 BPF_EXIT_INSN(),356 BPF_JMP_IMM(BPF_JGT, BPF_REG_7, 0x7ffffff0, 1),357 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),358 BPF_EXIT_INSN(),359 },360 .errstr_unpriv = "R0 invalid mem access 'scalar'",361 .result_unpriv = REJECT,362 .result = ACCEPT,363 .retval = 2,364 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,365},366{367 "jle32: BPF_K",368 .insns = {369 BPF_DIRECT_PKT_R2,370 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),371 BPF_JMP32_IMM(BPF_JLE, BPF_REG_7, INT_MAX, 1),372 BPF_EXIT_INSN(),373 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),374 BPF_EXIT_INSN(),375 },376 .prog_type = BPF_PROG_TYPE_SCHED_CLS,377 .result = ACCEPT,378 .runs = 3,379 .retvals = {380 { .retval = 2,381 .data64 = { INT_MAX - 1, }382 },383 { .retval = 0,384 .data64 = { UINT_MAX, }385 },386 { .retval = 2,387 .data64 = { INT_MAX, }388 },389 },390 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,391},392{393 "jle32: BPF_X",394 .insns = {395 BPF_DIRECT_PKT_R2,396 BPF_LD_IMM64(BPF_REG_8, (INT_MAX - 1) | 2ULL << 32),397 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),398 BPF_JMP32_REG(BPF_JLE, BPF_REG_7, BPF_REG_8, 1),399 BPF_EXIT_INSN(),400 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),401 BPF_EXIT_INSN(),402 },403 .prog_type = BPF_PROG_TYPE_SCHED_CLS,404 .result = ACCEPT,405 .runs = 3,406 .retvals = {407 { .retval = 0,408 .data64 = { INT_MAX | 1ULL << 32, }409 },410 { .retval = 2,411 .data64 = { INT_MAX - 2, }412 },413 { .retval = 0,414 .data64 = { UINT_MAX, }415 },416 },417 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,418},419{420 "jle32: min/max deduction",421 .insns = {422 BPF_RAND_UEXT_R7,423 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),424 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),425 BPF_JMP32_REG(BPF_JLE, BPF_REG_7, BPF_REG_8, 1),426 BPF_EXIT_INSN(),427 BPF_JMP32_IMM(BPF_JLE, BPF_REG_7, 0x7ffffff0, 1),428 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),429 BPF_EXIT_INSN(),430 },431 .errstr_unpriv = "R0 invalid mem access 'scalar'",432 .result_unpriv = REJECT,433 .result = ACCEPT,434 .retval = 2,435 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,436},437{438 "jlt32: BPF_K",439 .insns = {440 BPF_DIRECT_PKT_R2,441 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),442 BPF_JMP32_IMM(BPF_JLT, BPF_REG_7, INT_MAX, 1),443 BPF_EXIT_INSN(),444 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),445 BPF_EXIT_INSN(),446 },447 .prog_type = BPF_PROG_TYPE_SCHED_CLS,448 .result = ACCEPT,449 .runs = 3,450 .retvals = {451 { .retval = 0,452 .data64 = { INT_MAX, }453 },454 { .retval = 0,455 .data64 = { UINT_MAX, }456 },457 { .retval = 2,458 .data64 = { INT_MAX - 1, }459 },460 },461 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,462},463{464 "jlt32: BPF_X",465 .insns = {466 BPF_DIRECT_PKT_R2,467 BPF_LD_IMM64(BPF_REG_8, INT_MAX | 2ULL << 32),468 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),469 BPF_JMP32_REG(BPF_JLT, BPF_REG_7, BPF_REG_8, 1),470 BPF_EXIT_INSN(),471 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),472 BPF_EXIT_INSN(),473 },474 .prog_type = BPF_PROG_TYPE_SCHED_CLS,475 .result = ACCEPT,476 .runs = 3,477 .retvals = {478 { .retval = 0,479 .data64 = { INT_MAX | 1ULL << 32, }480 },481 { .retval = 0,482 .data64 = { UINT_MAX, }483 },484 { .retval = 2,485 .data64 = { (INT_MAX - 1) | 3ULL << 32, }486 },487 },488 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,489},490{491 "jlt32: min/max deduction",492 .insns = {493 BPF_RAND_UEXT_R7,494 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),495 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),496 BPF_JMP32_REG(BPF_JLT, BPF_REG_7, BPF_REG_8, 1),497 BPF_EXIT_INSN(),498 BPF_JMP_IMM(BPF_JSLT, BPF_REG_7, 0x7ffffff0, 1),499 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),500 BPF_EXIT_INSN(),501 },502 .errstr_unpriv = "R0 invalid mem access 'scalar'",503 .result_unpriv = REJECT,504 .result = ACCEPT,505 .retval = 2,506 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,507},508{509 "jsge32: BPF_K",510 .insns = {511 BPF_DIRECT_PKT_R2,512 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),513 BPF_JMP32_IMM(BPF_JSGE, BPF_REG_7, -1, 1),514 BPF_EXIT_INSN(),515 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),516 BPF_EXIT_INSN(),517 },518 .prog_type = BPF_PROG_TYPE_SCHED_CLS,519 .result = ACCEPT,520 .runs = 3,521 .retvals = {522 { .retval = 2,523 .data64 = { 0, }524 },525 { .retval = 2,526 .data64 = { -1, }527 },528 { .retval = 0,529 .data64 = { -2, }530 },531 },532 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,533},534{535 "jsge32: BPF_X",536 .insns = {537 BPF_DIRECT_PKT_R2,538 BPF_LD_IMM64(BPF_REG_8, (__u32)-1 | 2ULL << 32),539 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),540 BPF_JMP32_REG(BPF_JSGE, BPF_REG_7, BPF_REG_8, 1),541 BPF_EXIT_INSN(),542 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),543 BPF_EXIT_INSN(),544 },545 .prog_type = BPF_PROG_TYPE_SCHED_CLS,546 .result = ACCEPT,547 .runs = 3,548 .retvals = {549 { .retval = 2,550 .data64 = { -1, }551 },552 { .retval = 2,553 .data64 = { 0x7fffffff | 1ULL << 32, }554 },555 { .retval = 0,556 .data64 = { -2, }557 },558 },559 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,560},561{562 "jsge32: min/max deduction",563 .insns = {564 BPF_RAND_UEXT_R7,565 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),566 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),567 BPF_JMP32_REG(BPF_JSGE, BPF_REG_7, BPF_REG_8, 1),568 BPF_EXIT_INSN(),569 BPF_JMP_IMM(BPF_JSGE, BPF_REG_7, 0x7ffffff0, 1),570 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),571 BPF_EXIT_INSN(),572 },573 .errstr_unpriv = "R0 invalid mem access 'scalar'",574 .result_unpriv = REJECT,575 .result = ACCEPT,576 .retval = 2,577 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,578},579{580 "jsgt32: BPF_K",581 .insns = {582 BPF_DIRECT_PKT_R2,583 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),584 BPF_JMP32_IMM(BPF_JSGT, BPF_REG_7, -1, 1),585 BPF_EXIT_INSN(),586 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),587 BPF_EXIT_INSN(),588 },589 .prog_type = BPF_PROG_TYPE_SCHED_CLS,590 .result = ACCEPT,591 .runs = 3,592 .retvals = {593 { .retval = 0,594 .data64 = { (__u32)-2, }595 },596 { .retval = 0,597 .data64 = { -1, }598 },599 { .retval = 2,600 .data64 = { 1, }601 },602 },603 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,604},605{606 "jsgt32: BPF_X",607 .insns = {608 BPF_DIRECT_PKT_R2,609 BPF_LD_IMM64(BPF_REG_8, 0x7ffffffe | 1ULL << 32),610 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),611 BPF_JMP32_REG(BPF_JSGT, BPF_REG_7, BPF_REG_8, 1),612 BPF_EXIT_INSN(),613 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),614 BPF_EXIT_INSN(),615 },616 .prog_type = BPF_PROG_TYPE_SCHED_CLS,617 .result = ACCEPT,618 .runs = 3,619 .retvals = {620 { .retval = 0,621 .data64 = { 0x7ffffffe, }622 },623 { .retval = 0,624 .data64 = { 0x1ffffffffULL, }625 },626 { .retval = 2,627 .data64 = { 0x7fffffff, }628 },629 },630 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,631},632{633 "jsgt32: min/max deduction",634 .insns = {635 BPF_RAND_SEXT_R7,636 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),637 BPF_LD_IMM64(BPF_REG_8, (__u32)(-2) | 1ULL << 32),638 BPF_JMP32_REG(BPF_JSGT, BPF_REG_7, BPF_REG_8, 1),639 BPF_EXIT_INSN(),640 BPF_JMP_IMM(BPF_JSGT, BPF_REG_7, -2, 1),641 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),642 BPF_EXIT_INSN(),643 },644 .errstr_unpriv = "R0 invalid mem access 'scalar'",645 .result_unpriv = REJECT,646 .result = ACCEPT,647 .retval = 2,648 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,649},650{651 "jsle32: BPF_K",652 .insns = {653 BPF_DIRECT_PKT_R2,654 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),655 BPF_JMP32_IMM(BPF_JSLE, BPF_REG_7, -1, 1),656 BPF_EXIT_INSN(),657 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),658 BPF_EXIT_INSN(),659 },660 .prog_type = BPF_PROG_TYPE_SCHED_CLS,661 .result = ACCEPT,662 .runs = 3,663 .retvals = {664 { .retval = 2,665 .data64 = { (__u32)-2, }666 },667 { .retval = 2,668 .data64 = { -1, }669 },670 { .retval = 0,671 .data64 = { 1, }672 },673 },674 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,675},676{677 "jsle32: BPF_X",678 .insns = {679 BPF_DIRECT_PKT_R2,680 BPF_LD_IMM64(BPF_REG_8, 0x7ffffffe | 1ULL << 32),681 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),682 BPF_JMP32_REG(BPF_JSLE, BPF_REG_7, BPF_REG_8, 1),683 BPF_EXIT_INSN(),684 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),685 BPF_EXIT_INSN(),686 },687 .prog_type = BPF_PROG_TYPE_SCHED_CLS,688 .result = ACCEPT,689 .runs = 3,690 .retvals = {691 { .retval = 2,692 .data64 = { 0x7ffffffe, }693 },694 { .retval = 2,695 .data64 = { (__u32)-1, }696 },697 { .retval = 0,698 .data64 = { 0x7fffffff | 2ULL << 32, }699 },700 },701 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,702},703{704 "jsle32: min/max deduction",705 .insns = {706 BPF_RAND_UEXT_R7,707 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),708 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),709 BPF_JMP32_REG(BPF_JSLE, BPF_REG_7, BPF_REG_8, 1),710 BPF_EXIT_INSN(),711 BPF_JMP_IMM(BPF_JSLE, BPF_REG_7, 0x7ffffff0, 1),712 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),713 BPF_EXIT_INSN(),714 },715 .errstr_unpriv = "R0 invalid mem access 'scalar'",716 .result_unpriv = REJECT,717 .result = ACCEPT,718 .retval = 2,719 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,720},721{722 "jslt32: BPF_K",723 .insns = {724 BPF_DIRECT_PKT_R2,725 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),726 BPF_JMP32_IMM(BPF_JSLT, BPF_REG_7, -1, 1),727 BPF_EXIT_INSN(),728 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),729 BPF_EXIT_INSN(),730 },731 .prog_type = BPF_PROG_TYPE_SCHED_CLS,732 .result = ACCEPT,733 .runs = 3,734 .retvals = {735 { .retval = 2,736 .data64 = { (__u32)-2, }737 },738 { .retval = 0,739 .data64 = { -1, }740 },741 { .retval = 0,742 .data64 = { 1, }743 },744 },745 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,746},747{748 "jslt32: BPF_X",749 .insns = {750 BPF_DIRECT_PKT_R2,751 BPF_LD_IMM64(BPF_REG_8, 0x7fffffff | 1ULL << 32),752 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),753 BPF_JMP32_REG(BPF_JSLT, BPF_REG_7, BPF_REG_8, 1),754 BPF_EXIT_INSN(),755 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),756 BPF_EXIT_INSN(),757 },758 .prog_type = BPF_PROG_TYPE_SCHED_CLS,759 .result = ACCEPT,760 .runs = 3,761 .retvals = {762 { .retval = 2,763 .data64 = { 0x7ffffffe, }764 },765 { .retval = 2,766 .data64 = { 0xffffffff, }767 },768 { .retval = 0,769 .data64 = { 0x7fffffff | 2ULL << 32, }770 },771 },772 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,773},774{775 "jslt32: min/max deduction",776 .insns = {777 BPF_RAND_SEXT_R7,778 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),779 BPF_LD_IMM64(BPF_REG_8, (__u32)(-1) | 1ULL << 32),780 BPF_JMP32_REG(BPF_JSLT, BPF_REG_7, BPF_REG_8, 1),781 BPF_EXIT_INSN(),782 BPF_JMP32_IMM(BPF_JSLT, BPF_REG_7, -1, 1),783 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),784 BPF_EXIT_INSN(),785 },786 .errstr_unpriv = "R0 invalid mem access 'scalar'",787 .result_unpriv = REJECT,788 .result = ACCEPT,789 .retval = 2,790 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,791},792{793 "jgt32: range bound deduction, reg op imm",794 .insns = {795 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),796 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),797 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),798 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),799 BPF_LD_MAP_FD(BPF_REG_1, 0),800 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),801 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),802 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),803 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),804 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),805 BPF_JMP32_IMM(BPF_JGT, BPF_REG_0, 1, 5),806 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),807 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),808 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),809 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),810 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),811 BPF_MOV32_IMM(BPF_REG_0, 0),812 BPF_EXIT_INSN(),813 },814 .prog_type = BPF_PROG_TYPE_SCHED_CLS,815 .fixup_map_hash_48b = { 4 },816 .result = ACCEPT,817 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,818},819{820 "jgt32: range bound deduction, reg1 op reg2, reg1 unknown",821 .insns = {822 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),823 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),824 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),825 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),826 BPF_LD_MAP_FD(BPF_REG_1, 0),827 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),828 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),829 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),830 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),831 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),832 BPF_MOV32_IMM(BPF_REG_2, 1),833 BPF_JMP32_REG(BPF_JGT, BPF_REG_0, BPF_REG_2, 5),834 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),835 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),836 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),837 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),838 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),839 BPF_MOV32_IMM(BPF_REG_0, 0),840 BPF_EXIT_INSN(),841 },842 .prog_type = BPF_PROG_TYPE_SCHED_CLS,843 .fixup_map_hash_48b = { 4 },844 .result = ACCEPT,845 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,846},847{848 "jle32: range bound deduction, reg1 op reg2, reg2 unknown",849 .insns = {850 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),851 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),852 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),853 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),854 BPF_LD_MAP_FD(BPF_REG_1, 0),855 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),856 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),857 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),858 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),859 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),860 BPF_MOV32_IMM(BPF_REG_2, 1),861 BPF_JMP32_REG(BPF_JLE, BPF_REG_2, BPF_REG_0, 5),862 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),863 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),864 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),865 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),866 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),867 BPF_MOV32_IMM(BPF_REG_0, 0),868 BPF_EXIT_INSN(),869 },870 .prog_type = BPF_PROG_TYPE_SCHED_CLS,871 .fixup_map_hash_48b = { 4 },872 .result = ACCEPT,873 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,874},875{876 "jeq32/jne32: bounds checking",877 .insns = {878 BPF_MOV64_IMM(BPF_REG_6, 563),879 BPF_MOV64_IMM(BPF_REG_2, 0),880 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),881 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),882 BPF_ALU32_REG(BPF_OR, BPF_REG_2, BPF_REG_6),883 BPF_JMP32_IMM(BPF_JNE, BPF_REG_2, 8, 5),884 BPF_JMP_IMM(BPF_JSGE, BPF_REG_2, 500, 2),885 BPF_MOV64_IMM(BPF_REG_0, 2),886 BPF_EXIT_INSN(),887 BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),888 BPF_EXIT_INSN(),889 BPF_MOV64_IMM(BPF_REG_0, 1),890 BPF_EXIT_INSN(),891 },892 .prog_type = BPF_PROG_TYPE_SCHED_CLS,893 .result = ACCEPT,894 .retval = 1,895},896