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 /* 1-byte read from ingress_ifindex field */ 233 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 234 offsetof(struct bpf_sk_lookup, ingress_ifindex)), 235 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 236 offsetof(struct bpf_sk_lookup, ingress_ifindex) + 1), 237 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 238 offsetof(struct bpf_sk_lookup, ingress_ifindex) + 2), 239 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 240 offsetof(struct bpf_sk_lookup, ingress_ifindex) + 3), 241 /* 2-byte read from ingress_ifindex field */ 242 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 243 offsetof(struct bpf_sk_lookup, ingress_ifindex)), 244 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 245 offsetof(struct bpf_sk_lookup, ingress_ifindex) + 2), 246 /* 4-byte read from ingress_ifindex field */ 247 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 248 offsetof(struct bpf_sk_lookup, ingress_ifindex)), 249 250 /* 8-byte read from sk field */ 251 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 252 offsetof(struct bpf_sk_lookup, sk)), 253 254 BPF_MOV32_IMM(BPF_REG_0, 0), 255 BPF_EXIT_INSN(), 256 }, 257 .result = ACCEPT, 258 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 259 .expected_attach_type = BPF_SK_LOOKUP, 260 .runs = -1, 261 }, 262 /* invalid 8-byte reads from a 4-byte fields in bpf_sk_lookup */ 263 { 264 "invalid 8-byte read from bpf_sk_lookup family field", 265 .insns = { 266 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 267 offsetof(struct bpf_sk_lookup, family)), 268 BPF_MOV32_IMM(BPF_REG_0, 0), 269 BPF_EXIT_INSN(), 270 }, 271 .errstr = "invalid bpf_context access", 272 .result = REJECT, 273 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 274 .expected_attach_type = BPF_SK_LOOKUP, 275 }, 276 { 277 "invalid 8-byte read from bpf_sk_lookup protocol field", 278 .insns = { 279 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 280 offsetof(struct bpf_sk_lookup, protocol)), 281 BPF_MOV32_IMM(BPF_REG_0, 0), 282 BPF_EXIT_INSN(), 283 }, 284 .errstr = "invalid bpf_context access", 285 .result = REJECT, 286 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 287 .expected_attach_type = BPF_SK_LOOKUP, 288 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 289 }, 290 { 291 "invalid 8-byte read from bpf_sk_lookup remote_ip4 field", 292 .insns = { 293 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 294 offsetof(struct bpf_sk_lookup, remote_ip4)), 295 BPF_MOV32_IMM(BPF_REG_0, 0), 296 BPF_EXIT_INSN(), 297 }, 298 .errstr = "invalid bpf_context access", 299 .result = REJECT, 300 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 301 .expected_attach_type = BPF_SK_LOOKUP, 302 }, 303 { 304 "invalid 8-byte read from bpf_sk_lookup remote_ip6 field", 305 .insns = { 306 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 307 offsetof(struct bpf_sk_lookup, remote_ip6)), 308 BPF_MOV32_IMM(BPF_REG_0, 0), 309 BPF_EXIT_INSN(), 310 }, 311 .errstr = "invalid bpf_context access", 312 .result = REJECT, 313 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 314 .expected_attach_type = BPF_SK_LOOKUP, 315 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 316 }, 317 { 318 "invalid 8-byte read from bpf_sk_lookup remote_port field", 319 .insns = { 320 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 321 offsetof(struct bpf_sk_lookup, remote_port)), 322 BPF_MOV32_IMM(BPF_REG_0, 0), 323 BPF_EXIT_INSN(), 324 }, 325 .errstr = "invalid bpf_context access", 326 .result = REJECT, 327 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 328 .expected_attach_type = BPF_SK_LOOKUP, 329 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 330 }, 331 { 332 "invalid 8-byte read from bpf_sk_lookup local_ip4 field", 333 .insns = { 334 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 335 offsetof(struct bpf_sk_lookup, local_ip4)), 336 BPF_MOV32_IMM(BPF_REG_0, 0), 337 BPF_EXIT_INSN(), 338 }, 339 .errstr = "invalid bpf_context access", 340 .result = REJECT, 341 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 342 .expected_attach_type = BPF_SK_LOOKUP, 343 }, 344 { 345 "invalid 8-byte read from bpf_sk_lookup local_ip6 field", 346 .insns = { 347 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 348 offsetof(struct bpf_sk_lookup, local_ip6)), 349 BPF_MOV32_IMM(BPF_REG_0, 0), 350 BPF_EXIT_INSN(), 351 }, 352 .errstr = "invalid bpf_context access", 353 .result = REJECT, 354 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 355 .expected_attach_type = BPF_SK_LOOKUP, 356 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 357 }, 358 { 359 "invalid 8-byte read from bpf_sk_lookup local_port field", 360 .insns = { 361 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 362 offsetof(struct bpf_sk_lookup, local_port)), 363 BPF_MOV32_IMM(BPF_REG_0, 0), 364 BPF_EXIT_INSN(), 365 }, 366 .errstr = "invalid bpf_context access", 367 .result = REJECT, 368 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 369 .expected_attach_type = BPF_SK_LOOKUP, 370 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 371 }, 372 { 373 "invalid 8-byte read from bpf_sk_lookup ingress_ifindex field", 374 .insns = { 375 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 376 offsetof(struct bpf_sk_lookup, ingress_ifindex)), 377 BPF_MOV32_IMM(BPF_REG_0, 0), 378 BPF_EXIT_INSN(), 379 }, 380 .errstr = "invalid bpf_context access", 381 .result = REJECT, 382 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 383 .expected_attach_type = BPF_SK_LOOKUP, 384 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 385 }, 386 /* invalid 1,2,4-byte reads from 8-byte fields in bpf_sk_lookup */ 387 { 388 "invalid 4-byte read from bpf_sk_lookup sk field", 389 .insns = { 390 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 391 offsetof(struct bpf_sk_lookup, sk)), 392 BPF_MOV32_IMM(BPF_REG_0, 0), 393 BPF_EXIT_INSN(), 394 }, 395 .errstr = "invalid bpf_context access", 396 .result = REJECT, 397 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 398 .expected_attach_type = BPF_SK_LOOKUP, 399 }, 400 { 401 "invalid 2-byte read from bpf_sk_lookup sk field", 402 .insns = { 403 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 404 offsetof(struct bpf_sk_lookup, sk)), 405 BPF_MOV32_IMM(BPF_REG_0, 0), 406 BPF_EXIT_INSN(), 407 }, 408 .errstr = "invalid bpf_context access", 409 .result = REJECT, 410 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 411 .expected_attach_type = BPF_SK_LOOKUP, 412 }, 413 { 414 "invalid 1-byte read from bpf_sk_lookup sk field", 415 .insns = { 416 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 417 offsetof(struct bpf_sk_lookup, sk)), 418 BPF_MOV32_IMM(BPF_REG_0, 0), 419 BPF_EXIT_INSN(), 420 }, 421 .errstr = "invalid bpf_context access", 422 .result = REJECT, 423 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 424 .expected_attach_type = BPF_SK_LOOKUP, 425 }, 426 /* out of bounds and unaligned reads from bpf_sk_lookup */ 427 { 428 "invalid 4-byte read past end of bpf_sk_lookup", 429 .insns = { 430 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 431 sizeof(struct bpf_sk_lookup)), 432 BPF_MOV32_IMM(BPF_REG_0, 0), 433 BPF_EXIT_INSN(), 434 }, 435 .errstr = "invalid bpf_context access", 436 .result = REJECT, 437 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 438 .expected_attach_type = BPF_SK_LOOKUP, 439 }, 440 { 441 "invalid 4-byte unaligned read from bpf_sk_lookup at odd offset", 442 .insns = { 443 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 1), 444 BPF_MOV32_IMM(BPF_REG_0, 0), 445 BPF_EXIT_INSN(), 446 }, 447 .errstr = "invalid bpf_context access", 448 .result = REJECT, 449 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 450 .expected_attach_type = BPF_SK_LOOKUP, 451 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 452 }, 453 { 454 "invalid 4-byte unaligned read from bpf_sk_lookup at even offset", 455 .insns = { 456 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 2), 457 BPF_MOV32_IMM(BPF_REG_0, 0), 458 BPF_EXIT_INSN(), 459 }, 460 .errstr = "invalid bpf_context access", 461 .result = REJECT, 462 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 463 .expected_attach_type = BPF_SK_LOOKUP, 464 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 465 }, 466 /* in-bound and out-of-bound writes to bpf_sk_lookup */ 467 { 468 "invalid 8-byte write to bpf_sk_lookup", 469 .insns = { 470 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 471 BPF_STX_MEM(BPF_DW, 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 to 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, 0), 485 BPF_MOV32_IMM(BPF_REG_0, 0), 486 BPF_EXIT_INSN(), 487 }, 488 .errstr = "invalid bpf_context access", 489 .result = REJECT, 490 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 491 .expected_attach_type = BPF_SK_LOOKUP, 492 }, 493 { 494 "invalid 2-byte write to bpf_sk_lookup", 495 .insns = { 496 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 497 BPF_STX_MEM(BPF_H, BPF_REG_1, BPF_REG_0, 0), 498 BPF_MOV32_IMM(BPF_REG_0, 0), 499 BPF_EXIT_INSN(), 500 }, 501 .errstr = "invalid bpf_context access", 502 .result = REJECT, 503 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 504 .expected_attach_type = BPF_SK_LOOKUP, 505 }, 506 { 507 "invalid 1-byte write to bpf_sk_lookup", 508 .insns = { 509 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 510 BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0, 0), 511 BPF_MOV32_IMM(BPF_REG_0, 0), 512 BPF_EXIT_INSN(), 513 }, 514 .errstr = "invalid bpf_context access", 515 .result = REJECT, 516 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 517 .expected_attach_type = BPF_SK_LOOKUP, 518 }, 519 { 520 "invalid 4-byte write past end of bpf_sk_lookup", 521 .insns = { 522 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U), 523 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 524 sizeof(struct bpf_sk_lookup)), 525 BPF_MOV32_IMM(BPF_REG_0, 0), 526 BPF_EXIT_INSN(), 527 }, 528 .errstr = "invalid bpf_context access", 529 .result = REJECT, 530 .prog_type = BPF_PROG_TYPE_SK_LOOKUP, 531 .expected_attach_type = BPF_SK_LOOKUP, 532 }, 533