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