1 { 2 "valid 1,2,4,8-byte reads from bpf_sk_lookup", 3 .insns = { 4 /* 1-byte read from family field */ 5 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 6 offsetof(struct bpf_sk_lookup, family)), 7 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 8 offsetof(struct bpf_sk_lookup, family) + 1), 9 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 10 offsetof(struct bpf_sk_lookup, family) + 2), 11 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 12 offsetof(struct bpf_sk_lookup, family) + 3), 13 /* 2-byte read from family field */ 14 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 15 offsetof(struct bpf_sk_lookup, family)), 16 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 17 offsetof(struct bpf_sk_lookup, family) + 2), 18 /* 4-byte read from family field */ 19 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 20 offsetof(struct bpf_sk_lookup, family)), 21 22 /* 1-byte read from protocol field */ 23 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 24 offsetof(struct bpf_sk_lookup, protocol)), 25 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 26 offsetof(struct bpf_sk_lookup, protocol) + 1), 27 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 28 offsetof(struct bpf_sk_lookup, protocol) + 2), 29 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 30 offsetof(struct bpf_sk_lookup, protocol) + 3), 31 /* 2-byte read from protocol field */ 32 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 33 offsetof(struct bpf_sk_lookup, protocol)), 34 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 35 offsetof(struct bpf_sk_lookup, protocol) + 2), 36 /* 4-byte read from protocol field */ 37 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 38 offsetof(struct bpf_sk_lookup, protocol)), 39 40 /* 1-byte read from remote_ip4 field */ 41 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 42 offsetof(struct bpf_sk_lookup, remote_ip4)), 43 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 44 offsetof(struct bpf_sk_lookup, remote_ip4) + 1), 45 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 46 offsetof(struct bpf_sk_lookup, remote_ip4) + 2), 47 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 48 offsetof(struct bpf_sk_lookup, remote_ip4) + 3), 49 /* 2-byte read from remote_ip4 field */ 50 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 51 offsetof(struct bpf_sk_lookup, remote_ip4)), 52 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 53 offsetof(struct bpf_sk_lookup, remote_ip4) + 2), 54 /* 4-byte read from remote_ip4 field */ 55 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 56 offsetof(struct bpf_sk_lookup, remote_ip4)), 57 58 /* 1-byte read from remote_ip6 field */ 59 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 60 offsetof(struct bpf_sk_lookup, remote_ip6)), 61 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 62 offsetof(struct bpf_sk_lookup, remote_ip6) + 1), 63 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 64 offsetof(struct bpf_sk_lookup, remote_ip6) + 2), 65 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 66 offsetof(struct bpf_sk_lookup, remote_ip6) + 3), 67 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 68 offsetof(struct bpf_sk_lookup, remote_ip6) + 4), 69 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 70 offsetof(struct bpf_sk_lookup, remote_ip6) + 5), 71 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 72 offsetof(struct bpf_sk_lookup, remote_ip6) + 6), 73 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 74 offsetof(struct bpf_sk_lookup, remote_ip6) + 7), 75 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 76 offsetof(struct bpf_sk_lookup, remote_ip6) + 8), 77 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 78 offsetof(struct bpf_sk_lookup, remote_ip6) + 9), 79 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 80 offsetof(struct bpf_sk_lookup, remote_ip6) + 10), 81 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 82 offsetof(struct bpf_sk_lookup, remote_ip6) + 11), 83 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 84 offsetof(struct bpf_sk_lookup, remote_ip6) + 12), 85 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 86 offsetof(struct bpf_sk_lookup, remote_ip6) + 13), 87 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 88 offsetof(struct bpf_sk_lookup, remote_ip6) + 14), 89 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 90 offsetof(struct bpf_sk_lookup, remote_ip6) + 15), 91 /* 2-byte read from remote_ip6 field */ 92 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 93 offsetof(struct bpf_sk_lookup, remote_ip6)), 94 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 95 offsetof(struct bpf_sk_lookup, remote_ip6) + 2), 96 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 97 offsetof(struct bpf_sk_lookup, remote_ip6) + 4), 98 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 99 offsetof(struct bpf_sk_lookup, remote_ip6) + 6), 100 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 101 offsetof(struct bpf_sk_lookup, remote_ip6) + 8), 102 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 103 offsetof(struct bpf_sk_lookup, remote_ip6) + 10), 104 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 105 offsetof(struct bpf_sk_lookup, remote_ip6) + 12), 106 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 107 offsetof(struct bpf_sk_lookup, remote_ip6) + 14), 108 /* 4-byte read from remote_ip6 field */ 109 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 110 offsetof(struct bpf_sk_lookup, remote_ip6)), 111 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 112 offsetof(struct bpf_sk_lookup, remote_ip6) + 4), 113 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 114 offsetof(struct bpf_sk_lookup, remote_ip6) + 8), 115 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 116 offsetof(struct bpf_sk_lookup, remote_ip6) + 12), 117 118 /* 1-byte read from remote_port field */ 119 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 120 offsetof(struct bpf_sk_lookup, remote_port)), 121 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 122 offsetof(struct bpf_sk_lookup, remote_port) + 1), 123 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 124 offsetof(struct bpf_sk_lookup, remote_port) + 2), 125 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 126 offsetof(struct bpf_sk_lookup, remote_port) + 3), 127 /* 2-byte read from remote_port field */ 128 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 129 offsetof(struct bpf_sk_lookup, remote_port)), 130 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 131 offsetof(struct bpf_sk_lookup, remote_port) + 2), 132 /* 4-byte read from remote_port field */ 133 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 134 offsetof(struct bpf_sk_lookup, remote_port)), 135 136 /* 1-byte read from local_ip4 field */ 137 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 138 offsetof(struct bpf_sk_lookup, local_ip4)), 139 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 140 offsetof(struct bpf_sk_lookup, local_ip4) + 1), 141 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 142 offsetof(struct bpf_sk_lookup, local_ip4) + 2), 143 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 144 offsetof(struct bpf_sk_lookup, local_ip4) + 3), 145 /* 2-byte read from local_ip4 field */ 146 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 147 offsetof(struct bpf_sk_lookup, local_ip4)), 148 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 149 offsetof(struct bpf_sk_lookup, local_ip4) + 2), 150 /* 4-byte read from local_ip4 field */ 151 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 152 offsetof(struct bpf_sk_lookup, local_ip4)), 153 154 /* 1-byte read from local_ip6 field */ 155 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 156 offsetof(struct bpf_sk_lookup, local_ip6)), 157 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 158 offsetof(struct bpf_sk_lookup, local_ip6) + 1), 159 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 160 offsetof(struct bpf_sk_lookup, local_ip6) + 2), 161 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 162 offsetof(struct bpf_sk_lookup, local_ip6) + 3), 163 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 164 offsetof(struct bpf_sk_lookup, local_ip6) + 4), 165 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 166 offsetof(struct bpf_sk_lookup, local_ip6) + 5), 167 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 168 offsetof(struct bpf_sk_lookup, local_ip6) + 6), 169 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 170 offsetof(struct bpf_sk_lookup, local_ip6) + 7), 171 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 172 offsetof(struct bpf_sk_lookup, local_ip6) + 8), 173 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 174 offsetof(struct bpf_sk_lookup, local_ip6) + 9), 175 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 176 offsetof(struct bpf_sk_lookup, local_ip6) + 10), 177 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 178 offsetof(struct bpf_sk_lookup, local_ip6) + 11), 179 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 180 offsetof(struct bpf_sk_lookup, local_ip6) + 12), 181 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 182 offsetof(struct bpf_sk_lookup, local_ip6) + 13), 183 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 184 offsetof(struct bpf_sk_lookup, local_ip6) + 14), 185 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 186 offsetof(struct bpf_sk_lookup, local_ip6) + 15), 187 /* 2-byte read from local_ip6 field */ 188 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 189 offsetof(struct bpf_sk_lookup, local_ip6)), 190 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 191 offsetof(struct bpf_sk_lookup, local_ip6) + 2), 192 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 193 offsetof(struct bpf_sk_lookup, local_ip6) + 4), 194 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 195 offsetof(struct bpf_sk_lookup, local_ip6) + 6), 196 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 197 offsetof(struct bpf_sk_lookup, local_ip6) + 8), 198 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 199 offsetof(struct bpf_sk_lookup, local_ip6) + 10), 200 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 201 offsetof(struct bpf_sk_lookup, local_ip6) + 12), 202 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 203 offsetof(struct bpf_sk_lookup, local_ip6) + 14), 204 /* 4-byte read from local_ip6 field */ 205 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 206 offsetof(struct bpf_sk_lookup, local_ip6)), 207 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 208 offsetof(struct bpf_sk_lookup, local_ip6) + 4), 209 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 210 offsetof(struct bpf_sk_lookup, local_ip6) + 8), 211 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 212 offsetof(struct bpf_sk_lookup, local_ip6) + 12), 213 214 /* 1-byte read from local_port field */ 215 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 216 offsetof(struct bpf_sk_lookup, local_port)), 217 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 218 offsetof(struct bpf_sk_lookup, local_port) + 1), 219 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 220 offsetof(struct bpf_sk_lookup, local_port) + 2), 221 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 222 offsetof(struct bpf_sk_lookup, local_port) + 3), 223 /* 2-byte read from local_port field */ 224 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 225 offsetof(struct bpf_sk_lookup, local_port)), 226 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 227 offsetof(struct bpf_sk_lookup, local_port) + 2), 228 /* 4-byte read from local_port field */ 229 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 230 offsetof(struct bpf_sk_lookup, local_port)), 231 232 /* 8-byte read from sk field */ 233 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 234 offsetof(struct bpf_sk_lookup, sk)), 235 236 BPF_MOV32_IMM(BPF_REG_0, 0), 237 BPF_EXIT_INSN(), 238 }, 239 .result = ACCEPT, 240 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 241 .expected_attach_type = BPF_SK_LOOKUP, 242 .runs = -1, 243 }, 244 /* invalid 8-byte reads from a 4-byte fields in bpf_sk_lookup */ 245 { 246 "invalid 8-byte read from bpf_sk_lookup family field", 247 .insns = { 248 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 249 offsetof(struct bpf_sk_lookup, family)), 250 BPF_MOV32_IMM(BPF_REG_0, 0), 251 BPF_EXIT_INSN(), 252 }, 253 .errstr = "invalid bpf_context access", 254 .result = REJECT, 255 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 256 .expected_attach_type = BPF_SK_LOOKUP, 257 }, 258 { 259 "invalid 8-byte read from bpf_sk_lookup protocol field", 260 .insns = { 261 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 262 offsetof(struct bpf_sk_lookup, protocol)), 263 BPF_MOV32_IMM(BPF_REG_0, 0), 264 BPF_EXIT_INSN(), 265 }, 266 .errstr = "invalid bpf_context access", 267 .result = REJECT, 268 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 269 .expected_attach_type = BPF_SK_LOOKUP, 270 }, 271 { 272 "invalid 8-byte read from bpf_sk_lookup remote_ip4 field", 273 .insns = { 274 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 275 offsetof(struct bpf_sk_lookup, remote_ip4)), 276 BPF_MOV32_IMM(BPF_REG_0, 0), 277 BPF_EXIT_INSN(), 278 }, 279 .errstr = "invalid bpf_context access", 280 .result = REJECT, 281 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 282 .expected_attach_type = BPF_SK_LOOKUP, 283 }, 284 { 285 "invalid 8-byte read from bpf_sk_lookup remote_ip6 field", 286 .insns = { 287 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 288 offsetof(struct bpf_sk_lookup, remote_ip6)), 289 BPF_MOV32_IMM(BPF_REG_0, 0), 290 BPF_EXIT_INSN(), 291 }, 292 .errstr = "invalid bpf_context access", 293 .result = REJECT, 294 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 295 .expected_attach_type = BPF_SK_LOOKUP, 296 }, 297 { 298 "invalid 8-byte read from bpf_sk_lookup remote_port field", 299 .insns = { 300 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 301 offsetof(struct bpf_sk_lookup, remote_port)), 302 BPF_MOV32_IMM(BPF_REG_0, 0), 303 BPF_EXIT_INSN(), 304 }, 305 .errstr = "invalid bpf_context access", 306 .result = REJECT, 307 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 308 .expected_attach_type = BPF_SK_LOOKUP, 309 }, 310 { 311 "invalid 8-byte read from bpf_sk_lookup local_ip4 field", 312 .insns = { 313 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 314 offsetof(struct bpf_sk_lookup, local_ip4)), 315 BPF_MOV32_IMM(BPF_REG_0, 0), 316 BPF_EXIT_INSN(), 317 }, 318 .errstr = "invalid bpf_context access", 319 .result = REJECT, 320 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 321 .expected_attach_type = BPF_SK_LOOKUP, 322 }, 323 { 324 "invalid 8-byte read from bpf_sk_lookup local_ip6 field", 325 .insns = { 326 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 327 offsetof(struct bpf_sk_lookup, local_ip6)), 328 BPF_MOV32_IMM(BPF_REG_0, 0), 329 BPF_EXIT_INSN(), 330 }, 331 .errstr = "invalid bpf_context access", 332 .result = REJECT, 333 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 334 .expected_attach_type = BPF_SK_LOOKUP, 335 }, 336 { 337 "invalid 8-byte read from bpf_sk_lookup local_port field", 338 .insns = { 339 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 340 offsetof(struct bpf_sk_lookup, local_port)), 341 BPF_MOV32_IMM(BPF_REG_0, 0), 342 BPF_EXIT_INSN(), 343 }, 344 .errstr = "invalid bpf_context access", 345 .result = REJECT, 346 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 347 .expected_attach_type = BPF_SK_LOOKUP, 348 }, 349 /* invalid 1,2,4-byte reads from 8-byte fields in bpf_sk_lookup */ 350 { 351 "invalid 4-byte read from bpf_sk_lookup sk field", 352 .insns = { 353 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 354 offsetof(struct bpf_sk_lookup, sk)), 355 BPF_MOV32_IMM(BPF_REG_0, 0), 356 BPF_EXIT_INSN(), 357 }, 358 .errstr = "invalid bpf_context access", 359 .result = REJECT, 360 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 361 .expected_attach_type = BPF_SK_LOOKUP, 362 }, 363 { 364 "invalid 2-byte read from bpf_sk_lookup sk field", 365 .insns = { 366 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 367 offsetof(struct bpf_sk_lookup, sk)), 368 BPF_MOV32_IMM(BPF_REG_0, 0), 369 BPF_EXIT_INSN(), 370 }, 371 .errstr = "invalid bpf_context access", 372 .result = REJECT, 373 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 374 .expected_attach_type = BPF_SK_LOOKUP, 375 }, 376 { 377 "invalid 1-byte read from bpf_sk_lookup sk field", 378 .insns = { 379 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 380 offsetof(struct bpf_sk_lookup, sk)), 381 BPF_MOV32_IMM(BPF_REG_0, 0), 382 BPF_EXIT_INSN(), 383 }, 384 .errstr = "invalid bpf_context access", 385 .result = REJECT, 386 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 387 .expected_attach_type = BPF_SK_LOOKUP, 388 }, 389 /* out of bounds and unaligned reads from bpf_sk_lookup */ 390 { 391 "invalid 4-byte read past end of bpf_sk_lookup", 392 .insns = { 393 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 394 sizeof(struct bpf_sk_lookup)), 395 BPF_MOV32_IMM(BPF_REG_0, 0), 396 BPF_EXIT_INSN(), 397 }, 398 .errstr = "invalid bpf_context access", 399 .result = REJECT, 400 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 401 .expected_attach_type = BPF_SK_LOOKUP, 402 }, 403 { 404 "invalid 4-byte unaligned read from bpf_sk_lookup at odd offset", 405 .insns = { 406 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 1), 407 BPF_MOV32_IMM(BPF_REG_0, 0), 408 BPF_EXIT_INSN(), 409 }, 410 .errstr = "invalid bpf_context access", 411 .result = REJECT, 412 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 413 .expected_attach_type = BPF_SK_LOOKUP, 414 }, 415 { 416 "invalid 4-byte unaligned read from bpf_sk_lookup at even offset", 417 .insns = { 418 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 2), 419 BPF_MOV32_IMM(BPF_REG_0, 0), 420 BPF_EXIT_INSN(), 421 }, 422 .errstr = "invalid bpf_context access", 423 .result = REJECT, 424 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 425 .expected_attach_type = BPF_SK_LOOKUP, 426 }, 427 /* in-bound and out-of-bound writes to bpf_sk_lookup */ 428 { 429 "invalid 8-byte write to bpf_sk_lookup", 430 .insns = { 431 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 432 BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 0), 433 BPF_MOV32_IMM(BPF_REG_0, 0), 434 BPF_EXIT_INSN(), 435 }, 436 .errstr = "invalid bpf_context access", 437 .result = REJECT, 438 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 439 .expected_attach_type = BPF_SK_LOOKUP, 440 }, 441 { 442 "invalid 4-byte write to bpf_sk_lookup", 443 .insns = { 444 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 445 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), 446 BPF_MOV32_IMM(BPF_REG_0, 0), 447 BPF_EXIT_INSN(), 448 }, 449 .errstr = "invalid bpf_context access", 450 .result = REJECT, 451 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 452 .expected_attach_type = BPF_SK_LOOKUP, 453 }, 454 { 455 "invalid 2-byte write to bpf_sk_lookup", 456 .insns = { 457 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 458 BPF_STX_MEM(BPF_H, BPF_REG_1, BPF_REG_0, 0), 459 BPF_MOV32_IMM(BPF_REG_0, 0), 460 BPF_EXIT_INSN(), 461 }, 462 .errstr = "invalid bpf_context access", 463 .result = REJECT, 464 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 465 .expected_attach_type = BPF_SK_LOOKUP, 466 }, 467 { 468 "invalid 1-byte write to bpf_sk_lookup", 469 .insns = { 470 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 471 BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0, 0), 472 BPF_MOV32_IMM(BPF_REG_0, 0), 473 BPF_EXIT_INSN(), 474 }, 475 .errstr = "invalid bpf_context access", 476 .result = REJECT, 477 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 478 .expected_attach_type = BPF_SK_LOOKUP, 479 }, 480 { 481 "invalid 4-byte write past end of bpf_sk_lookup", 482 .insns = { 483 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 484 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 485 sizeof(struct bpf_sk_lookup)), 486 BPF_MOV32_IMM(BPF_REG_0, 0), 487 BPF_EXIT_INSN(), 488 }, 489 .errstr = "invalid bpf_context access", 490 .result = REJECT, 491 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 492 .expected_attach_type = BPF_SK_LOOKUP, 493 }, 494