On Mon, Jan 24, 2022 at 10:54 AM Kenny Yu <kennyyu@xxxxxx> wrote: > > This adds a helper for bpf programs to read the memory of other > tasks. > > As an example use case at Meta, we are using a bpf task iterator program > and this new helper to print C++ async stack traces for all threads of > a given process. > > Signed-off-by: Kenny Yu <kennyyu@xxxxxx> > --- LGTM. Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > include/linux/bpf.h | 1 + > include/uapi/linux/bpf.h | 11 +++++++++++ > kernel/bpf/helpers.c | 34 ++++++++++++++++++++++++++++++++++ > kernel/trace/bpf_trace.c | 2 ++ > tools/include/uapi/linux/bpf.h | 11 +++++++++++ > 5 files changed, 59 insertions(+) > [...] > + ret = access_process_vm(tsk, (unsigned long)user_ptr, dst, size, 0); > + if (ret == size) > + return 0; > + > + memset(dst, 0, size); > + /* Return -EFAULT for partial read */ > + return (ret < 0) ? ret : -EFAULT; nit: unnecessary () > +} > + > +const struct bpf_func_proto bpf_copy_from_user_task_proto = { > + .func = bpf_copy_from_user_task, > + .gpl_only = false, > + .ret_type = RET_INTEGER, > + .arg1_type = ARG_PTR_TO_UNINIT_MEM, > + .arg2_type = ARG_CONST_SIZE_OR_ZERO, > + .arg3_type = ARG_ANYTHING, > + .arg4_type = ARG_PTR_TO_BTF_ID, > + .arg4_btf_id = &btf_tracing_ids[BTF_TRACING_TYPE_TASK], > + .arg5_type = ARG_ANYTHING > +}; > + [...]