hi, adding d_path helper to return full path for 'path' object. I originally added and used 'file_path' helper, which did the same, but used 'struct file' object. Then realized that file_path is just a wrapper for d_path, so we'd cover more calling sites if we add d_path helper and allowed resolving BTF object within another object, so we could call d_path also with file pointer, like: bpf_d_path(&file->f_path, buf, size); This feature is mainly to be able to add dpath (filepath originally) function to bpftrace, which seems to work nicely now, like: # bpftrace -e 'kfunc:vfs_open { printf("%s\n", dpath(args->path)); }' RFC v2 changes: - added whitelist support, d_path helper is allowed only for list of functions, the whitelist checking works as follows: - helper's whitelist is defined as list of functions in file: kernel/bpf/helpers-whitelist/helper - at vmlinux linking time, the bpfwl tool reads the whitelist and translates functions into BTF IDs, which are then compiled as following data section into vmlinux object: .BTF_whitelist BTF_whitelist_<helper1> BTF_whitelist_<helper2> BTF_whitelist_<helper3> Each BTF_whitelist_<helperX> data is a sorted array of BTF ids. - new 'allowed' function is added to 'struct bpf_func_proto', which is used by verifier code to check (if defined) on whether the helper is called from allowed function (from whitelist). Currently it's needed and implemented only for d_path helper, but it's easy to add support for another helper. - I don't change the btf_id value in check_func_arg as suggested by Alexei - added new test_verifier test Also available at: https://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git bpf/d_path thoughts? thanks, jirka --- Jiri Olsa (9): bpf: Add d_path helper bpf: Add d_path whitelist bpf: Add bpfwl tool to construct bpf whitelists bpf: Allow nested BTF object to be refferenced by BTF object + offset bpf: Add support to check on BTF id whitelist for d_path helper bpf: Compile bpfwl tool at kernel compilation start bpf: Compile the BTF id whitelist data in vmlinux selftests/bpf: Add test for d_path helper selftests/bpf: Add verifier test for d_path helper Makefile | 24 +++++++-- include/asm-generic/vmlinux.lds.h | 5 ++ include/linux/bpf.h | 4 ++ include/uapi/linux/bpf.h | 14 +++++- kernel/bpf/btf.c | 69 +++++++++++++++++++++++++ kernel/bpf/helpers-whitelist/d_path | 8 +++ kernel/bpf/verifier.c | 37 ++++++++++---- kernel/trace/bpf_trace.c | 54 ++++++++++++++++++++ scripts/bpf_helpers_doc.py | 2 + scripts/link-vmlinux.sh | 20 ++++++-- tools/Makefile | 3 ++ tools/bpf/Makefile | 5 +- tools/bpf/bpfwl/Build | 11 ++++ tools/bpf/bpfwl/Makefile | 60 ++++++++++++++++++++++ tools/bpf/bpfwl/bpfwl.c | 285 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/include/uapi/linux/bpf.h | 14 +++++- tools/testing/selftests/bpf/prog_tests/d_path.c | 196 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/testing/selftests/bpf/progs/test_d_path.c | 71 ++++++++++++++++++++++++++ tools/testing/selftests/bpf/test_verifier.c | 13 ++++- tools/testing/selftests/bpf/verifier/d_path.c | 37 ++++++++++++++ 20 files changed, 908 insertions(+), 24 deletions(-) create mode 100644 kernel/bpf/helpers-whitelist/d_path create mode 100644 tools/bpf/bpfwl/Build create mode 100644 tools/bpf/bpfwl/Makefile create mode 100644 tools/bpf/bpfwl/bpfwl.c create mode 100644 tools/testing/selftests/bpf/prog_tests/d_path.c create mode 100644 tools/testing/selftests/bpf/progs/test_d_path.c create mode 100644 tools/testing/selftests/bpf/verifier/d_path.c