Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "valid 1,2,4,8-byte reads from bpf_sk_lookup",
0003     .insns = {
0004         /* 1-byte read from family field */
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         /* 2-byte read from family field */
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         /* 4-byte read from family field */
0019         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0020                 offsetof(struct bpf_sk_lookup, family)),
0021 
0022         /* 1-byte read from protocol field */
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         /* 2-byte read from protocol field */
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         /* 4-byte read from protocol field */
0037         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0038                 offsetof(struct bpf_sk_lookup, protocol)),
0039 
0040         /* 1-byte read from remote_ip4 field */
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         /* 2-byte read from remote_ip4 field */
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         /* 4-byte read from remote_ip4 field */
0055         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0056                 offsetof(struct bpf_sk_lookup, remote_ip4)),
0057 
0058         /* 1-byte read from remote_ip6 field */
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         /* 2-byte read from remote_ip6 field */
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         /* 4-byte read from remote_ip6 field */
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         /* 1-byte read from remote_port field */
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         /* 2-byte read from remote_port field */
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         /* 4-byte read from remote_port field */
0133         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0134                 offsetof(struct bpf_sk_lookup, remote_port)),
0135 
0136         /* 1-byte read from local_ip4 field */
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         /* 2-byte read from local_ip4 field */
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         /* 4-byte read from local_ip4 field */
0151         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0152                 offsetof(struct bpf_sk_lookup, local_ip4)),
0153 
0154         /* 1-byte read from local_ip6 field */
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         /* 2-byte read from local_ip6 field */
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         /* 4-byte read from local_ip6 field */
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         /* 1-byte read from local_port field */
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         /* 2-byte read from local_port field */
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         /* 4-byte read from local_port field */
0229         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0230                 offsetof(struct bpf_sk_lookup, local_port)),
0231 
0232         /* 1-byte read from ingress_ifindex field */
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         /* 2-byte read from ingress_ifindex field */
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         /* 4-byte read from ingress_ifindex field */
0247         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
0248                 offsetof(struct bpf_sk_lookup, ingress_ifindex)),
0249 
0250         /* 8-byte read from sk field */
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 /* invalid 8-byte reads from a 4-byte fields in bpf_sk_lookup */
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 /* invalid 1,2,4-byte reads from 8-byte fields in bpf_sk_lookup */
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 /* out of bounds and unaligned reads from bpf_sk_lookup */
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 /* in-bound and out-of-bound writes to bpf_sk_lookup */
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 },