bpf: Expose bpf_get_socket_cookie to tracing programs
This needs a new helper that: - can work in a sleepable context (using sock_gen_cookie) - takes a struct sock pointer and checks that it's not NULL Signed-off-by: Florent Revest <revest@chromium.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: KP Singh <kpsingh@kernel.org> Acked-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20210210111406.785541-2-revest@chromium.org
This commit is contained in:
parent
07881ccbf4
commit
c5dbb89fc2
|
@ -1885,6 +1885,7 @@ extern const struct bpf_func_proto bpf_per_cpu_ptr_proto;
|
|||
extern const struct bpf_func_proto bpf_this_cpu_ptr_proto;
|
||||
extern const struct bpf_func_proto bpf_ktime_get_coarse_ns_proto;
|
||||
extern const struct bpf_func_proto bpf_sock_from_file_proto;
|
||||
extern const struct bpf_func_proto bpf_get_socket_ptr_cookie_proto;
|
||||
|
||||
const struct bpf_func_proto *bpf_tracing_func_proto(
|
||||
enum bpf_func_id func_id, const struct bpf_prog *prog);
|
||||
|
|
|
@ -1673,6 +1673,14 @@ union bpf_attr {
|
|||
* Return
|
||||
* A 8-byte long unique number.
|
||||
*
|
||||
* u64 bpf_get_socket_cookie(struct sock *sk)
|
||||
* Description
|
||||
* Equivalent to **bpf_get_socket_cookie**\ () helper that accepts
|
||||
* *sk*, but gets socket from a BTF **struct sock**. This helper
|
||||
* also works for sleepable programs.
|
||||
* Return
|
||||
* A 8-byte long unique number or 0 if *sk* is NULL.
|
||||
*
|
||||
* u32 bpf_get_socket_uid(struct sk_buff *skb)
|
||||
* Return
|
||||
* The owner UID of the socket associated to *skb*. If the socket
|
||||
|
|
|
@ -1760,6 +1760,8 @@ tracing_prog_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
|
|||
return &bpf_sk_storage_delete_tracing_proto;
|
||||
case BPF_FUNC_sock_from_file:
|
||||
return &bpf_sock_from_file_proto;
|
||||
case BPF_FUNC_get_socket_cookie:
|
||||
return &bpf_get_socket_ptr_cookie_proto;
|
||||
#endif
|
||||
case BPF_FUNC_seq_printf:
|
||||
return prog->expected_attach_type == BPF_TRACE_ITER ?
|
||||
|
|
|
@ -4631,6 +4631,18 @@ static const struct bpf_func_proto bpf_get_socket_cookie_sock_proto = {
|
|||
.arg1_type = ARG_PTR_TO_CTX,
|
||||
};
|
||||
|
||||
BPF_CALL_1(bpf_get_socket_ptr_cookie, struct sock *, sk)
|
||||
{
|
||||
return sk ? sock_gen_cookie(sk) : 0;
|
||||
}
|
||||
|
||||
const struct bpf_func_proto bpf_get_socket_ptr_cookie_proto = {
|
||||
.func = bpf_get_socket_ptr_cookie,
|
||||
.gpl_only = false,
|
||||
.ret_type = RET_INTEGER,
|
||||
.arg1_type = ARG_PTR_TO_BTF_ID_SOCK_COMMON,
|
||||
};
|
||||
|
||||
BPF_CALL_1(bpf_get_socket_cookie_sock_ops, struct bpf_sock_ops_kern *, ctx)
|
||||
{
|
||||
return __sock_gen_cookie(ctx->sk);
|
||||
|
|
|
@ -1673,6 +1673,14 @@ union bpf_attr {
|
|||
* Return
|
||||
* A 8-byte long unique number.
|
||||
*
|
||||
* u64 bpf_get_socket_cookie(struct sock *sk)
|
||||
* Description
|
||||
* Equivalent to **bpf_get_socket_cookie**\ () helper that accepts
|
||||
* *sk*, but gets socket from a BTF **struct sock**. This helper
|
||||
* also works for sleepable programs.
|
||||
* Return
|
||||
* A 8-byte long unique number or 0 if *sk* is NULL.
|
||||
*
|
||||
* u32 bpf_get_socket_uid(struct sk_buff *skb)
|
||||
* Return
|
||||
* The owner UID of the socket associated to *skb*. If the socket
|
||||
|
|
Loading…
Reference in New Issue