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