Commit 27e5203b authored by Martin KaFai Lau's avatar Martin KaFai Lau Committed by Alexei Starovoitov

bpf: Change bpf_sk_assign to accept ARG_PTR_TO_BTF_ID_SOCK_COMMON

This patch changes the bpf_sk_assign() to take
ARG_PTR_TO_BTF_ID_SOCK_COMMON such that they will work with the pointer
returned by the bpf_skc_to_*() helpers also.

The bpf_sk_lookup_assign() is taking ARG_PTR_TO_SOCKET_"OR_NULL".  Meaning
it specifically takes a literal NULL.  ARG_PTR_TO_BTF_ID_SOCK_COMMON
does not allow a literal NULL, so another ARG type is required
for this purpose and another follow-up patch can be used if
there is such need.
Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200925000415.3857374-1-kafai@fb.com
parent c0df236e
...@@ -3107,7 +3107,7 @@ union bpf_attr { ...@@ -3107,7 +3107,7 @@ union bpf_attr {
* Return * Return
* The id is returned or 0 in case the id could not be retrieved. * The id is returned or 0 in case the id could not be retrieved.
* *
* long bpf_sk_assign(struct sk_buff *skb, struct bpf_sock *sk, u64 flags) * long bpf_sk_assign(struct sk_buff *skb, void *sk, u64 flags)
* Description * Description
* Helper is overloaded depending on BPF program type. This * Helper is overloaded depending on BPF program type. This
* description applies to **BPF_PROG_TYPE_SCHED_CLS** and * description applies to **BPF_PROG_TYPE_SCHED_CLS** and
......
...@@ -6217,7 +6217,7 @@ static const struct bpf_func_proto bpf_tcp_gen_syncookie_proto = { ...@@ -6217,7 +6217,7 @@ static const struct bpf_func_proto bpf_tcp_gen_syncookie_proto = {
BPF_CALL_3(bpf_sk_assign, struct sk_buff *, skb, struct sock *, sk, u64, flags) BPF_CALL_3(bpf_sk_assign, struct sk_buff *, skb, struct sock *, sk, u64, flags)
{ {
if (flags != 0) if (!sk || flags != 0)
return -EINVAL; return -EINVAL;
if (!skb_at_tc_ingress(skb)) if (!skb_at_tc_ingress(skb))
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -6241,7 +6241,7 @@ static const struct bpf_func_proto bpf_sk_assign_proto = { ...@@ -6241,7 +6241,7 @@ static const struct bpf_func_proto bpf_sk_assign_proto = {
.gpl_only = false, .gpl_only = false,
.ret_type = RET_INTEGER, .ret_type = RET_INTEGER,
.arg1_type = ARG_PTR_TO_CTX, .arg1_type = ARG_PTR_TO_CTX,
.arg2_type = ARG_PTR_TO_SOCK_COMMON, .arg2_type = ARG_PTR_TO_BTF_ID_SOCK_COMMON,
.arg3_type = ARG_ANYTHING, .arg3_type = ARG_ANYTHING,
}; };
......
...@@ -3107,7 +3107,7 @@ union bpf_attr { ...@@ -3107,7 +3107,7 @@ union bpf_attr {
* Return * Return
* The id is returned or 0 in case the id could not be retrieved. * The id is returned or 0 in case the id could not be retrieved.
* *
* long bpf_sk_assign(struct sk_buff *skb, struct bpf_sock *sk, u64 flags) * long bpf_sk_assign(struct sk_buff *skb, void *sk, u64 flags)
* Description * Description
* Helper is overloaded depending on BPF program type. This * Helper is overloaded depending on BPF program type. This
* description applies to **BPF_PROG_TYPE_SCHED_CLS** and * description applies to **BPF_PROG_TYPE_SCHED_CLS** and
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment