On Wed, Dec 9, 2020 at 5:35 PM Daniel Borkmann <daniel@xxxxxxxxxxxxx> wrote: > > On 12/9/20 2:26 PM, Florent Revest wrote: > > This needs two new helpers, one that works in a sleepable context (using > > sock_gen_cookie which disables/enables preemption) and one that does not > > (for performance reasons). Both take a struct sock pointer and need to > > check it for NULLness. > > > > This helper could also be useful to other BPF program types such as LSM. > > Looks like this commit description is now stale and needs to be updated > since we only really add one helper? > > > Signed-off-by: Florent Revest <revest@xxxxxxxxxxxx> > > --- > > include/linux/bpf.h | 1 + > > include/uapi/linux/bpf.h | 7 +++++++ > > kernel/trace/bpf_trace.c | 2 ++ > > net/core/filter.c | 12 ++++++++++++ > > tools/include/uapi/linux/bpf.h | 7 +++++++ > > 5 files changed, 29 insertions(+) > > > > diff --git a/include/linux/bpf.h b/include/linux/bpf.h > > index 07cb5d15e743..5a858e8c3f1a 100644 > > --- a/include/linux/bpf.h > > +++ b/include/linux/bpf.h > > @@ -1860,6 +1860,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); > > diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h > > index ba59309f4d18..9ac66cf25959 100644 > > --- a/include/uapi/linux/bpf.h > > +++ b/include/uapi/linux/bpf.h > > @@ -1667,6 +1667,13 @@ union bpf_attr { > > * Return > > * A 8-byte long unique number. > > * > > + * u64 bpf_get_socket_cookie(void *sk) > > + * Description > > + * Equivalent to **bpf_get_socket_cookie**\ () helper that accepts > > + * *sk*, but gets socket from a BTF **struct sock**. > > Maybe add a small comment that this one also works for sleepable [tracing] progs? > > > + * Return > > + * A 8-byte long unique number. > > ... or 0 if *sk* is NULL. Argh, I somehow missed this email during my holidays, I'm sending a v5. Thank you Daniel!