0001 {
0002 "valid 1,2,4,8-byte reads from bpf_sk_lookup",
0003 .insns = {
0004
0005 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0006 offsetof(struct bpf_sk_lookup, family)),
0007 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0008 offsetof(struct bpf_sk_lookup, family) + 1),
0009 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0010 offsetof(struct bpf_sk_lookup, family) + 2),
0011 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0012 offsetof(struct bpf_sk_lookup, family) + 3),
0013
0014 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0015 offsetof(struct bpf_sk_lookup, family)),
0016 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0017 offsetof(struct bpf_sk_lookup, family) + 2),
0018
0019 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0020 offsetof(struct bpf_sk_lookup, family)),
0021
0022
0023 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0024 offsetof(struct bpf_sk_lookup, protocol)),
0025 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0026 offsetof(struct bpf_sk_lookup, protocol) + 1),
0027 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0028 offsetof(struct bpf_sk_lookup, protocol) + 2),
0029 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0030 offsetof(struct bpf_sk_lookup, protocol) + 3),
0031
0032 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0033 offsetof(struct bpf_sk_lookup, protocol)),
0034 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0035 offsetof(struct bpf_sk_lookup, protocol) + 2),
0036
0037 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0038 offsetof(struct bpf_sk_lookup, protocol)),
0039
0040
0041 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0042 offsetof(struct bpf_sk_lookup, remote_ip4)),
0043 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0044 offsetof(struct bpf_sk_lookup, remote_ip4) + 1),
0045 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0046 offsetof(struct bpf_sk_lookup, remote_ip4) + 2),
0047 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0048 offsetof(struct bpf_sk_lookup, remote_ip4) + 3),
0049
0050 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0051 offsetof(struct bpf_sk_lookup, remote_ip4)),
0052 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0053 offsetof(struct bpf_sk_lookup, remote_ip4) + 2),
0054
0055 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0056 offsetof(struct bpf_sk_lookup, remote_ip4)),
0057
0058
0059 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0060 offsetof(struct bpf_sk_lookup, remote_ip6)),
0061 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0062 offsetof(struct bpf_sk_lookup, remote_ip6) + 1),
0063 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0064 offsetof(struct bpf_sk_lookup, remote_ip6) + 2),
0065 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0066 offsetof(struct bpf_sk_lookup, remote_ip6) + 3),
0067 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0068 offsetof(struct bpf_sk_lookup, remote_ip6) + 4),
0069 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0070 offsetof(struct bpf_sk_lookup, remote_ip6) + 5),
0071 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0072 offsetof(struct bpf_sk_lookup, remote_ip6) + 6),
0073 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0074 offsetof(struct bpf_sk_lookup, remote_ip6) + 7),
0075 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0076 offsetof(struct bpf_sk_lookup, remote_ip6) + 8),
0077 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0078 offsetof(struct bpf_sk_lookup, remote_ip6) + 9),
0079 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0080 offsetof(struct bpf_sk_lookup, remote_ip6) + 10),
0081 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0082 offsetof(struct bpf_sk_lookup, remote_ip6) + 11),
0083 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0084 offsetof(struct bpf_sk_lookup, remote_ip6) + 12),
0085 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0086 offsetof(struct bpf_sk_lookup, remote_ip6) + 13),
0087 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0088 offsetof(struct bpf_sk_lookup, remote_ip6) + 14),
0089 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0090 offsetof(struct bpf_sk_lookup, remote_ip6) + 15),
0091
0092 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0093 offsetof(struct bpf_sk_lookup, remote_ip6)),
0094 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0095 offsetof(struct bpf_sk_lookup, remote_ip6) + 2),
0096 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0097 offsetof(struct bpf_sk_lookup, remote_ip6) + 4),
0098 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0099 offsetof(struct bpf_sk_lookup, remote_ip6) + 6),
0100 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0101 offsetof(struct bpf_sk_lookup, remote_ip6) + 8),
0102 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0103 offsetof(struct bpf_sk_lookup, remote_ip6) + 10),
0104 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0105 offsetof(struct bpf_sk_lookup, remote_ip6) + 12),
0106 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0107 offsetof(struct bpf_sk_lookup, remote_ip6) + 14),
0108
0109 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0110 offsetof(struct bpf_sk_lookup, remote_ip6)),
0111 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0112 offsetof(struct bpf_sk_lookup, remote_ip6) + 4),
0113 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0114 offsetof(struct bpf_sk_lookup, remote_ip6) + 8),
0115 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0116 offsetof(struct bpf_sk_lookup, remote_ip6) + 12),
0117
0118
0119 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0120 offsetof(struct bpf_sk_lookup, remote_port)),
0121 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0122 offsetof(struct bpf_sk_lookup, remote_port) + 1),
0123 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0124 offsetof(struct bpf_sk_lookup, remote_port) + 2),
0125 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0126 offsetof(struct bpf_sk_lookup, remote_port) + 3),
0127
0128 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0129 offsetof(struct bpf_sk_lookup, remote_port)),
0130 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0131 offsetof(struct bpf_sk_lookup, remote_port) + 2),
0132
0133 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0134 offsetof(struct bpf_sk_lookup, remote_port)),
0135
0136
0137 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0138 offsetof(struct bpf_sk_lookup, local_ip4)),
0139 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0140 offsetof(struct bpf_sk_lookup, local_ip4) + 1),
0141 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0142 offsetof(struct bpf_sk_lookup, local_ip4) + 2),
0143 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0144 offsetof(struct bpf_sk_lookup, local_ip4) + 3),
0145
0146 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0147 offsetof(struct bpf_sk_lookup, local_ip4)),
0148 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0149 offsetof(struct bpf_sk_lookup, local_ip4) + 2),
0150
0151 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0152 offsetof(struct bpf_sk_lookup, local_ip4)),
0153
0154
0155 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0156 offsetof(struct bpf_sk_lookup, local_ip6)),
0157 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0158 offsetof(struct bpf_sk_lookup, local_ip6) + 1),
0159 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0160 offsetof(struct bpf_sk_lookup, local_ip6) + 2),
0161 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0162 offsetof(struct bpf_sk_lookup, local_ip6) + 3),
0163 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0164 offsetof(struct bpf_sk_lookup, local_ip6) + 4),
0165 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0166 offsetof(struct bpf_sk_lookup, local_ip6) + 5),
0167 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0168 offsetof(struct bpf_sk_lookup, local_ip6) + 6),
0169 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0170 offsetof(struct bpf_sk_lookup, local_ip6) + 7),
0171 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0172 offsetof(struct bpf_sk_lookup, local_ip6) + 8),
0173 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0174 offsetof(struct bpf_sk_lookup, local_ip6) + 9),
0175 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0176 offsetof(struct bpf_sk_lookup, local_ip6) + 10),
0177 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0178 offsetof(struct bpf_sk_lookup, local_ip6) + 11),
0179 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0180 offsetof(struct bpf_sk_lookup, local_ip6) + 12),
0181 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0182 offsetof(struct bpf_sk_lookup, local_ip6) + 13),
0183 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0184 offsetof(struct bpf_sk_lookup, local_ip6) + 14),
0185 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0186 offsetof(struct bpf_sk_lookup, local_ip6) + 15),
0187
0188 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0189 offsetof(struct bpf_sk_lookup, local_ip6)),
0190 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0191 offsetof(struct bpf_sk_lookup, local_ip6) + 2),
0192 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0193 offsetof(struct bpf_sk_lookup, local_ip6) + 4),
0194 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0195 offsetof(struct bpf_sk_lookup, local_ip6) + 6),
0196 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0197 offsetof(struct bpf_sk_lookup, local_ip6) + 8),
0198 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0199 offsetof(struct bpf_sk_lookup, local_ip6) + 10),
0200 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0201 offsetof(struct bpf_sk_lookup, local_ip6) + 12),
0202 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0203 offsetof(struct bpf_sk_lookup, local_ip6) + 14),
0204
0205 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0206 offsetof(struct bpf_sk_lookup, local_ip6)),
0207 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0208 offsetof(struct bpf_sk_lookup, local_ip6) + 4),
0209 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0210 offsetof(struct bpf_sk_lookup, local_ip6) + 8),
0211 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0212 offsetof(struct bpf_sk_lookup, local_ip6) + 12),
0213
0214
0215 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0216 offsetof(struct bpf_sk_lookup, local_port)),
0217 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0218 offsetof(struct bpf_sk_lookup, local_port) + 1),
0219 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0220 offsetof(struct bpf_sk_lookup, local_port) + 2),
0221 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0222 offsetof(struct bpf_sk_lookup, local_port) + 3),
0223
0224 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0225 offsetof(struct bpf_sk_lookup, local_port)),
0226 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0227 offsetof(struct bpf_sk_lookup, local_port) + 2),
0228
0229 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0230 offsetof(struct bpf_sk_lookup, local_port)),
0231
0232
0233 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0234 offsetof(struct bpf_sk_lookup, ingress_ifindex)),
0235 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0236 offsetof(struct bpf_sk_lookup, ingress_ifindex) + 1),
0237 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0238 offsetof(struct bpf_sk_lookup, ingress_ifindex) + 2),
0239 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0240 offsetof(struct bpf_sk_lookup, ingress_ifindex) + 3),
0241
0242 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0243 offsetof(struct bpf_sk_lookup, ingress_ifindex)),
0244 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0245 offsetof(struct bpf_sk_lookup, ingress_ifindex) + 2),
0246
0247 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0248 offsetof(struct bpf_sk_lookup, ingress_ifindex)),
0249
0250
0251 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0252 offsetof(struct bpf_sk_lookup, sk)),
0253
0254 BPF_MOV32_IMM(BPF_REG_0, 0),
0255 BPF_EXIT_INSN(),
0256 },
0257 .result = ACCEPT,
0258 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0259 .expected_attach_type = BPF_SK_LOOKUP,
0260 .runs = -1,
0261 },
0262
0263 {
0264 "invalid 8-byte read from bpf_sk_lookup family field",
0265 .insns = {
0266 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0267 offsetof(struct bpf_sk_lookup, family)),
0268 BPF_MOV32_IMM(BPF_REG_0, 0),
0269 BPF_EXIT_INSN(),
0270 },
0271 .errstr = "invalid bpf_context access",
0272 .result = REJECT,
0273 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0274 .expected_attach_type = BPF_SK_LOOKUP,
0275 },
0276 {
0277 "invalid 8-byte read from bpf_sk_lookup protocol field",
0278 .insns = {
0279 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0280 offsetof(struct bpf_sk_lookup, protocol)),
0281 BPF_MOV32_IMM(BPF_REG_0, 0),
0282 BPF_EXIT_INSN(),
0283 },
0284 .errstr = "invalid bpf_context access",
0285 .result = REJECT,
0286 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0287 .expected_attach_type = BPF_SK_LOOKUP,
0288 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0289 },
0290 {
0291 "invalid 8-byte read from bpf_sk_lookup remote_ip4 field",
0292 .insns = {
0293 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0294 offsetof(struct bpf_sk_lookup, remote_ip4)),
0295 BPF_MOV32_IMM(BPF_REG_0, 0),
0296 BPF_EXIT_INSN(),
0297 },
0298 .errstr = "invalid bpf_context access",
0299 .result = REJECT,
0300 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0301 .expected_attach_type = BPF_SK_LOOKUP,
0302 },
0303 {
0304 "invalid 8-byte read from bpf_sk_lookup remote_ip6 field",
0305 .insns = {
0306 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0307 offsetof(struct bpf_sk_lookup, remote_ip6)),
0308 BPF_MOV32_IMM(BPF_REG_0, 0),
0309 BPF_EXIT_INSN(),
0310 },
0311 .errstr = "invalid bpf_context access",
0312 .result = REJECT,
0313 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0314 .expected_attach_type = BPF_SK_LOOKUP,
0315 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0316 },
0317 {
0318 "invalid 8-byte read from bpf_sk_lookup remote_port field",
0319 .insns = {
0320 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0321 offsetof(struct bpf_sk_lookup, remote_port)),
0322 BPF_MOV32_IMM(BPF_REG_0, 0),
0323 BPF_EXIT_INSN(),
0324 },
0325 .errstr = "invalid bpf_context access",
0326 .result = REJECT,
0327 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0328 .expected_attach_type = BPF_SK_LOOKUP,
0329 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0330 },
0331 {
0332 "invalid 8-byte read from bpf_sk_lookup local_ip4 field",
0333 .insns = {
0334 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0335 offsetof(struct bpf_sk_lookup, local_ip4)),
0336 BPF_MOV32_IMM(BPF_REG_0, 0),
0337 BPF_EXIT_INSN(),
0338 },
0339 .errstr = "invalid bpf_context access",
0340 .result = REJECT,
0341 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0342 .expected_attach_type = BPF_SK_LOOKUP,
0343 },
0344 {
0345 "invalid 8-byte read from bpf_sk_lookup local_ip6 field",
0346 .insns = {
0347 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0348 offsetof(struct bpf_sk_lookup, local_ip6)),
0349 BPF_MOV32_IMM(BPF_REG_0, 0),
0350 BPF_EXIT_INSN(),
0351 },
0352 .errstr = "invalid bpf_context access",
0353 .result = REJECT,
0354 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0355 .expected_attach_type = BPF_SK_LOOKUP,
0356 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0357 },
0358 {
0359 "invalid 8-byte read from bpf_sk_lookup local_port field",
0360 .insns = {
0361 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0362 offsetof(struct bpf_sk_lookup, local_port)),
0363 BPF_MOV32_IMM(BPF_REG_0, 0),
0364 BPF_EXIT_INSN(),
0365 },
0366 .errstr = "invalid bpf_context access",
0367 .result = REJECT,
0368 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0369 .expected_attach_type = BPF_SK_LOOKUP,
0370 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0371 },
0372 {
0373 "invalid 8-byte read from bpf_sk_lookup ingress_ifindex field",
0374 .insns = {
0375 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1,
0376 offsetof(struct bpf_sk_lookup, ingress_ifindex)),
0377 BPF_MOV32_IMM(BPF_REG_0, 0),
0378 BPF_EXIT_INSN(),
0379 },
0380 .errstr = "invalid bpf_context access",
0381 .result = REJECT,
0382 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0383 .expected_attach_type = BPF_SK_LOOKUP,
0384 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0385 },
0386
0387 {
0388 "invalid 4-byte read from bpf_sk_lookup sk field",
0389 .insns = {
0390 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0391 offsetof(struct bpf_sk_lookup, sk)),
0392 BPF_MOV32_IMM(BPF_REG_0, 0),
0393 BPF_EXIT_INSN(),
0394 },
0395 .errstr = "invalid bpf_context access",
0396 .result = REJECT,
0397 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0398 .expected_attach_type = BPF_SK_LOOKUP,
0399 },
0400 {
0401 "invalid 2-byte read from bpf_sk_lookup sk field",
0402 .insns = {
0403 BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
0404 offsetof(struct bpf_sk_lookup, sk)),
0405 BPF_MOV32_IMM(BPF_REG_0, 0),
0406 BPF_EXIT_INSN(),
0407 },
0408 .errstr = "invalid bpf_context access",
0409 .result = REJECT,
0410 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0411 .expected_attach_type = BPF_SK_LOOKUP,
0412 },
0413 {
0414 "invalid 1-byte read from bpf_sk_lookup sk field",
0415 .insns = {
0416 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
0417 offsetof(struct bpf_sk_lookup, sk)),
0418 BPF_MOV32_IMM(BPF_REG_0, 0),
0419 BPF_EXIT_INSN(),
0420 },
0421 .errstr = "invalid bpf_context access",
0422 .result = REJECT,
0423 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0424 .expected_attach_type = BPF_SK_LOOKUP,
0425 },
0426
0427 {
0428 "invalid 4-byte read past end of bpf_sk_lookup",
0429 .insns = {
0430 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0431 sizeof(struct bpf_sk_lookup)),
0432 BPF_MOV32_IMM(BPF_REG_0, 0),
0433 BPF_EXIT_INSN(),
0434 },
0435 .errstr = "invalid bpf_context access",
0436 .result = REJECT,
0437 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0438 .expected_attach_type = BPF_SK_LOOKUP,
0439 },
0440 {
0441 "invalid 4-byte unaligned read from bpf_sk_lookup at odd offset",
0442 .insns = {
0443 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 1),
0444 BPF_MOV32_IMM(BPF_REG_0, 0),
0445 BPF_EXIT_INSN(),
0446 },
0447 .errstr = "invalid bpf_context access",
0448 .result = REJECT,
0449 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0450 .expected_attach_type = BPF_SK_LOOKUP,
0451 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0452 },
0453 {
0454 "invalid 4-byte unaligned read from bpf_sk_lookup at even offset",
0455 .insns = {
0456 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 2),
0457 BPF_MOV32_IMM(BPF_REG_0, 0),
0458 BPF_EXIT_INSN(),
0459 },
0460 .errstr = "invalid bpf_context access",
0461 .result = REJECT,
0462 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0463 .expected_attach_type = BPF_SK_LOOKUP,
0464 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
0465 },
0466
0467 {
0468 "invalid 8-byte write to bpf_sk_lookup",
0469 .insns = {
0470 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
0471 BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 0),
0472 BPF_MOV32_IMM(BPF_REG_0, 0),
0473 BPF_EXIT_INSN(),
0474 },
0475 .errstr = "invalid bpf_context access",
0476 .result = REJECT,
0477 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0478 .expected_attach_type = BPF_SK_LOOKUP,
0479 },
0480 {
0481 "invalid 4-byte write to bpf_sk_lookup",
0482 .insns = {
0483 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
0484 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0),
0485 BPF_MOV32_IMM(BPF_REG_0, 0),
0486 BPF_EXIT_INSN(),
0487 },
0488 .errstr = "invalid bpf_context access",
0489 .result = REJECT,
0490 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0491 .expected_attach_type = BPF_SK_LOOKUP,
0492 },
0493 {
0494 "invalid 2-byte write to bpf_sk_lookup",
0495 .insns = {
0496 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
0497 BPF_STX_MEM(BPF_H, BPF_REG_1, BPF_REG_0, 0),
0498 BPF_MOV32_IMM(BPF_REG_0, 0),
0499 BPF_EXIT_INSN(),
0500 },
0501 .errstr = "invalid bpf_context access",
0502 .result = REJECT,
0503 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0504 .expected_attach_type = BPF_SK_LOOKUP,
0505 },
0506 {
0507 "invalid 1-byte write to bpf_sk_lookup",
0508 .insns = {
0509 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
0510 BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0, 0),
0511 BPF_MOV32_IMM(BPF_REG_0, 0),
0512 BPF_EXIT_INSN(),
0513 },
0514 .errstr = "invalid bpf_context access",
0515 .result = REJECT,
0516 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0517 .expected_attach_type = BPF_SK_LOOKUP,
0518 },
0519 {
0520 "invalid 4-byte write past end of bpf_sk_lookup",
0521 .insns = {
0522 BPF_MOV64_IMM(BPF_REG_0, 0xcafe4a11U),
0523 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_0,
0524 sizeof(struct bpf_sk_lookup)),
0525 BPF_MOV32_IMM(BPF_REG_0, 0),
0526 BPF_EXIT_INSN(),
0527 },
0528 .errstr = "invalid bpf_context access",
0529 .result = REJECT,
0530 .prog_type = BPF_PROG_TYPE_SK_LOOKUP,
0531 .expected_attach_type = BPF_SK_LOOKUP,
0532 },