[PATCH bpf-next 0/3] Add O_PATH-based BPF_OBJ_PIN and BPF_OBJ_GET support

Andrii Nakryiko
2023-05-16T00:14:11Z

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