1*4882a593Smuzhiyun { 2*4882a593Smuzhiyun "meta access, test1", 3*4882a593Smuzhiyun .insns = { 4*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 5*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 6*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 7*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_0, BPF_REG_2), 8*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), 9*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1), 10*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 11*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 12*4882a593Smuzhiyun BPF_EXIT_INSN(), 13*4882a593Smuzhiyun }, 14*4882a593Smuzhiyun .result = ACCEPT, 15*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 16*4882a593Smuzhiyun }, 17*4882a593Smuzhiyun { 18*4882a593Smuzhiyun "meta access, test2", 19*4882a593Smuzhiyun .insns = { 20*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 21*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 22*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 23*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_0, BPF_REG_2), 24*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_SUB, BPF_REG_0, 8), 25*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_4, BPF_REG_2), 26*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8), 27*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1), 28*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_0, 0), 29*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 30*4882a593Smuzhiyun BPF_EXIT_INSN(), 31*4882a593Smuzhiyun }, 32*4882a593Smuzhiyun .result = REJECT, 33*4882a593Smuzhiyun .errstr = "invalid access to packet, off=-8", 34*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 35*4882a593Smuzhiyun }, 36*4882a593Smuzhiyun { 37*4882a593Smuzhiyun "meta access, test3", 38*4882a593Smuzhiyun .insns = { 39*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 40*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 41*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, 42*4882a593Smuzhiyun offsetof(struct xdp_md, data_end)), 43*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_0, BPF_REG_2), 44*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), 45*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1), 46*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 47*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 48*4882a593Smuzhiyun BPF_EXIT_INSN(), 49*4882a593Smuzhiyun }, 50*4882a593Smuzhiyun .result = REJECT, 51*4882a593Smuzhiyun .errstr = "invalid access to packet", 52*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 53*4882a593Smuzhiyun }, 54*4882a593Smuzhiyun { 55*4882a593Smuzhiyun "meta access, test4", 56*4882a593Smuzhiyun .insns = { 57*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 58*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 59*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, 60*4882a593Smuzhiyun offsetof(struct xdp_md, data_end)), 61*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, offsetof(struct xdp_md, data)), 62*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_0, BPF_REG_4), 63*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), 64*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1), 65*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 66*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 67*4882a593Smuzhiyun BPF_EXIT_INSN(), 68*4882a593Smuzhiyun }, 69*4882a593Smuzhiyun .result = REJECT, 70*4882a593Smuzhiyun .errstr = "invalid access to packet", 71*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 72*4882a593Smuzhiyun }, 73*4882a593Smuzhiyun { 74*4882a593Smuzhiyun "meta access, test5", 75*4882a593Smuzhiyun .insns = { 76*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, 77*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 78*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, offsetof(struct xdp_md, data)), 79*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_0, BPF_REG_3), 80*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), 81*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_4, 3), 82*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_2, -8), 83*4882a593Smuzhiyun BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_xdp_adjust_meta), 84*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_3, 0), 85*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 86*4882a593Smuzhiyun BPF_EXIT_INSN(), 87*4882a593Smuzhiyun }, 88*4882a593Smuzhiyun .result = REJECT, 89*4882a593Smuzhiyun .errstr = "R3 !read_ok", 90*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 91*4882a593Smuzhiyun }, 92*4882a593Smuzhiyun { 93*4882a593Smuzhiyun "meta access, test6", 94*4882a593Smuzhiyun .insns = { 95*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 96*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 97*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 98*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_0, BPF_REG_3), 99*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), 100*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_4, BPF_REG_2), 101*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8), 102*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_0, 1), 103*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 104*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 105*4882a593Smuzhiyun BPF_EXIT_INSN(), 106*4882a593Smuzhiyun }, 107*4882a593Smuzhiyun .result = REJECT, 108*4882a593Smuzhiyun .errstr = "invalid access to packet", 109*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 110*4882a593Smuzhiyun }, 111*4882a593Smuzhiyun { 112*4882a593Smuzhiyun "meta access, test7", 113*4882a593Smuzhiyun .insns = { 114*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 115*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 116*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 117*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_0, BPF_REG_3), 118*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), 119*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_4, BPF_REG_2), 120*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8), 121*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1), 122*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 123*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 124*4882a593Smuzhiyun BPF_EXIT_INSN(), 125*4882a593Smuzhiyun }, 126*4882a593Smuzhiyun .result = ACCEPT, 127*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 128*4882a593Smuzhiyun }, 129*4882a593Smuzhiyun { 130*4882a593Smuzhiyun "meta access, test8", 131*4882a593Smuzhiyun .insns = { 132*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 133*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 134*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 135*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_4, BPF_REG_2), 136*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 0xFFFF), 137*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1), 138*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 139*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 140*4882a593Smuzhiyun BPF_EXIT_INSN(), 141*4882a593Smuzhiyun }, 142*4882a593Smuzhiyun .result = ACCEPT, 143*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 144*4882a593Smuzhiyun }, 145*4882a593Smuzhiyun { 146*4882a593Smuzhiyun "meta access, test9", 147*4882a593Smuzhiyun .insns = { 148*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 149*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 150*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 151*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_4, BPF_REG_2), 152*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 0xFFFF), 153*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 1), 154*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1), 155*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 156*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 157*4882a593Smuzhiyun BPF_EXIT_INSN(), 158*4882a593Smuzhiyun }, 159*4882a593Smuzhiyun .result = REJECT, 160*4882a593Smuzhiyun .errstr = "invalid access to packet", 161*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 162*4882a593Smuzhiyun }, 163*4882a593Smuzhiyun { 164*4882a593Smuzhiyun "meta access, test10", 165*4882a593Smuzhiyun .insns = { 166*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 167*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 168*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 169*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, 170*4882a593Smuzhiyun offsetof(struct xdp_md, data_end)), 171*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_5, 42), 172*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_6, 24), 173*4882a593Smuzhiyun BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_5, -8), 174*4882a593Smuzhiyun BPF_STX_XADD(BPF_DW, BPF_REG_10, BPF_REG_6, -8), 175*4882a593Smuzhiyun BPF_LDX_MEM(BPF_DW, BPF_REG_5, BPF_REG_10, -8), 176*4882a593Smuzhiyun BPF_JMP_IMM(BPF_JGT, BPF_REG_5, 100, 6), 177*4882a593Smuzhiyun BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_5), 178*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_5, BPF_REG_3), 179*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_6, BPF_REG_2), 180*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8), 181*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_5, 1), 182*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_2, BPF_REG_2, 0), 183*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 184*4882a593Smuzhiyun BPF_EXIT_INSN(), 185*4882a593Smuzhiyun }, 186*4882a593Smuzhiyun .result = REJECT, 187*4882a593Smuzhiyun .errstr = "invalid access to packet", 188*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 189*4882a593Smuzhiyun }, 190*4882a593Smuzhiyun { 191*4882a593Smuzhiyun "meta access, test11", 192*4882a593Smuzhiyun .insns = { 193*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 194*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 195*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 196*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_5, 42), 197*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_6, 24), 198*4882a593Smuzhiyun BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_5, -8), 199*4882a593Smuzhiyun BPF_STX_XADD(BPF_DW, BPF_REG_10, BPF_REG_6, -8), 200*4882a593Smuzhiyun BPF_LDX_MEM(BPF_DW, BPF_REG_5, BPF_REG_10, -8), 201*4882a593Smuzhiyun BPF_JMP_IMM(BPF_JGT, BPF_REG_5, 100, 6), 202*4882a593Smuzhiyun BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_5), 203*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_5, BPF_REG_2), 204*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_6, BPF_REG_2), 205*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8), 206*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_3, 1), 207*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_5, 0), 208*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 209*4882a593Smuzhiyun BPF_EXIT_INSN(), 210*4882a593Smuzhiyun }, 211*4882a593Smuzhiyun .result = ACCEPT, 212*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 213*4882a593Smuzhiyun }, 214*4882a593Smuzhiyun { 215*4882a593Smuzhiyun "meta access, test12", 216*4882a593Smuzhiyun .insns = { 217*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 218*4882a593Smuzhiyun offsetof(struct xdp_md, data_meta)), 219*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)), 220*4882a593Smuzhiyun BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, 221*4882a593Smuzhiyun offsetof(struct xdp_md, data_end)), 222*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_5, BPF_REG_3), 223*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 16), 224*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_4, 5), 225*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_3, 0), 226*4882a593Smuzhiyun BPF_MOV64_REG(BPF_REG_5, BPF_REG_2), 227*4882a593Smuzhiyun BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 16), 228*4882a593Smuzhiyun BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 1), 229*4882a593Smuzhiyun BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 230*4882a593Smuzhiyun BPF_MOV64_IMM(BPF_REG_0, 0), 231*4882a593Smuzhiyun BPF_EXIT_INSN(), 232*4882a593Smuzhiyun }, 233*4882a593Smuzhiyun .result = ACCEPT, 234*4882a593Smuzhiyun .prog_type = BPF_PROG_TYPE_XDP, 235*4882a593Smuzhiyun }, 236