Back to home page

OSCL-LXR

 
 

    


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 /* user_ip6[0] is u64 aligned */
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 /* msg_src_ip6[0] is _not_ u64 aligned */
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 /* user_ip6[0] is u64 aligned */
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 /* msg_src_ip6[0] is _not_ u64 aligned */
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