0001 #define BPF_SOCK_ADDR_STORE(field, off, res, err, flgs) \
0002 { \
0003 "wide store to bpf_sock_addr." #field "[" #off "]", \
0004 .insns = { \
0005 BPF_MOV64_IMM(BPF_REG_0, 1), \
0006 BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, \
0007 offsetof(struct bpf_sock_addr, field[off])), \
0008 BPF_EXIT_INSN(), \
0009 }, \
0010 .result = res, \
0011 .prog_type = BPF_PROG_TYPE_CGROUP_SOCK_ADDR, \
0012 .expected_attach_type = BPF_CGROUP_UDP6_SENDMSG, \
0013 .errstr = err, \
0014 .flags = flgs, \
0015 }
0016
0017
0018 BPF_SOCK_ADDR_STORE(user_ip6, 0, ACCEPT,
0019 NULL, 0),
0020 BPF_SOCK_ADDR_STORE(user_ip6, 1, REJECT,
0021 "invalid bpf_context access off=12 size=8",
0022 F_NEEDS_EFFICIENT_UNALIGNED_ACCESS),
0023 BPF_SOCK_ADDR_STORE(user_ip6, 2, ACCEPT,
0024 NULL, 0),
0025 BPF_SOCK_ADDR_STORE(user_ip6, 3, REJECT,
0026 "invalid bpf_context access off=20 size=8",
0027 F_NEEDS_EFFICIENT_UNALIGNED_ACCESS),
0028
0029
0030 BPF_SOCK_ADDR_STORE(msg_src_ip6, 0, REJECT,
0031 "invalid bpf_context access off=44 size=8",
0032 F_NEEDS_EFFICIENT_UNALIGNED_ACCESS),
0033 BPF_SOCK_ADDR_STORE(msg_src_ip6, 1, ACCEPT,
0034 NULL, 0),
0035 BPF_SOCK_ADDR_STORE(msg_src_ip6, 2, REJECT,
0036 "invalid bpf_context access off=52 size=8",
0037 F_NEEDS_EFFICIENT_UNALIGNED_ACCESS),
0038 BPF_SOCK_ADDR_STORE(msg_src_ip6, 3, REJECT,
0039 "invalid bpf_context access off=56 size=8", 0),
0040
0041 #undef BPF_SOCK_ADDR_STORE
0042
0043 #define BPF_SOCK_ADDR_LOAD(field, off, res, err, flgs) \
0044 { \
0045 "wide load from bpf_sock_addr." #field "[" #off "]", \
0046 .insns = { \
0047 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, \
0048 offsetof(struct bpf_sock_addr, field[off])), \
0049 BPF_MOV64_IMM(BPF_REG_0, 1), \
0050 BPF_EXIT_INSN(), \
0051 }, \
0052 .result = res, \
0053 .prog_type = BPF_PROG_TYPE_CGROUP_SOCK_ADDR, \
0054 .expected_attach_type = BPF_CGROUP_UDP6_SENDMSG, \
0055 .errstr = err, \
0056 .flags = flgs, \
0057 }
0058
0059
0060 BPF_SOCK_ADDR_LOAD(user_ip6, 0, ACCEPT,
0061 NULL, 0),
0062 BPF_SOCK_ADDR_LOAD(user_ip6, 1, REJECT,
0063 "invalid bpf_context access off=12 size=8",
0064 F_NEEDS_EFFICIENT_UNALIGNED_ACCESS),
0065 BPF_SOCK_ADDR_LOAD(user_ip6, 2, ACCEPT,
0066 NULL, 0),
0067 BPF_SOCK_ADDR_LOAD(user_ip6, 3, REJECT,
0068 "invalid bpf_context access off=20 size=8",
0069 F_NEEDS_EFFICIENT_UNALIGNED_ACCESS),
0070
0071
0072 BPF_SOCK_ADDR_LOAD(msg_src_ip6, 0, REJECT,
0073 "invalid bpf_context access off=44 size=8",
0074 F_NEEDS_EFFICIENT_UNALIGNED_ACCESS),
0075 BPF_SOCK_ADDR_LOAD(msg_src_ip6, 1, ACCEPT,
0076 NULL, 0),
0077 BPF_SOCK_ADDR_LOAD(msg_src_ip6, 2, REJECT,
0078 "invalid bpf_context access off=52 size=8",
0079 F_NEEDS_EFFICIENT_UNALIGNED_ACCESS),
0080 BPF_SOCK_ADDR_LOAD(msg_src_ip6, 3, REJECT,
0081 "invalid bpf_context access off=56 size=8", 0),
0082
0083 #undef BPF_SOCK_ADDR_LOAD