Add ability to specify pinning location within BPF FS using O_PATH-based FDs, similar to openat() family of APIs. Patch #2 adds necessary kernel-side changes. Patch #3 exposes this through libbpf APIs. Patch #4 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. We also add few more tests using various combinations of path_fd and pathname to validate proper argument propagation in kernel code. 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. v2->v3: - __s32 for path_fd in union bpf_attr (Christian); - added subtest for absolute/relative paths during pinning/getting; - added pre-patch moving LSM hook (security_path_mknod) around (Christian); v1->v2: - add BPF_F_PATH_FD flag that should go along with path FD (Christian). Andrii Nakryiko (4): bpf: validate BPF object in BPF_OBJ_PIN before calling LSM 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 | 10 + kernel/bpf/inode.c | 27 +- kernel/bpf/syscall.c | 25 +- tools/include/uapi/linux/bpf.h | 10 + tools/lib/bpf/bpf.c | 17 +- tools/lib/bpf/bpf.h | 18 +- tools/lib/bpf/libbpf.map | 1 + .../bpf/prog_tests/bpf_obj_pinning.c | 268 ++++++++++++++++++ 9 files changed, 354 insertions(+), 26 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/bpf_obj_pinning.c -- 2.34.1