Add ability to specify pinning location within BPF FS using O_PATH-based FDs, similar to openat() family of APIs. Patch #1 adds necessary kernel-side changes. Patch #2 exposes this through libbpf APIs. Patch #3 uses new mount APIs (fsopen, fsconfig, fsmount) to demonstrated how now it's possible to work with detach-mounted BPF FS using new BPF_OBJ_PIN and BPF_OBJ_GET functionality. This feature is inspired as a result of recent conversations during LSF/MM/BPF 2023 conference about shortcomings of being able to perform BPF objects pinning only using lookup-based paths. Andrii Nakryiko (3): bpf: support O_PATH FDs in BPF_OBJ_PIN and BPF_OBJ_GET commands libbpf: add opts-based bpf_obj_pin() API and add support for path_fd selftests/bpf: add path_fd-based BPF_OBJ_PIN and BPF_OBJ_GET tests include/linux/bpf.h | 4 +- include/uapi/linux/bpf.h | 5 + kernel/bpf/inode.c | 16 +-- kernel/bpf/syscall.c | 8 +- tools/include/uapi/linux/bpf.h | 5 + tools/lib/bpf/bpf.c | 16 ++- tools/lib/bpf/bpf.h | 17 ++- tools/lib/bpf/libbpf.map | 1 + .../bpf/prog_tests/bpf_obj_pinning.c | 110 ++++++++++++++++++ 9 files changed, 164 insertions(+), 18 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/bpf_obj_pinning.c -- 2.34.1