| From: |
| Mykyta Yatsenko <mykyta.yatsenko5-AT-gmail.com> |
| To: |
| bpf-AT-vger.kernel.org, ast-AT-kernel.org, andrii-AT-kernel.org, daniel-AT-iogearbox.net, kafai-AT-meta.com, kernel-team-AT-meta.com, eddyz87-AT-gmail.com, memxor-AT-gmail.com |
| Subject: |
| [RFC PATCH v2 00/11] bpf: Introduce file dynptr |
| Date: |
| Wed, 15 Oct 2025 17:11:44 +0100 |
| Message-ID: |
| <20251015161155.120148-1-mykyta.yatsenko5@gmail.com> |
| Cc: |
| Mykyta Yatsenko <yatsenko-AT-meta.com> |
| Archive-link: |
| Article |
From: Mykyta Yatsenko <yatsenko@meta.com>
This series adds a new dynptr kind, file dynptr, which enables BPF
programs to perform safe reads from files in a structured way.
Initial motivations include:
* Parsing the executable’s ELF to locate thread-local variable symbols
* Capturing stack traces when frame pointers are disabled
By leveraging the existing dynptr abstraction, we reuse the verifier’s
lifetime/size checks and keep the API consistent with existing dynptr
read helpers.
Technical details:
1. Reuses the existing freader library to read files a folio at a time.
2. bpf_dynptr_slice() and bpf_dynptr_read() always copy data from folios
into a program-provided buffer; zero-copy access is intentionally not
supported to keep it simple.
3. Reads may sleep if the requested folios are not in the page cache.
4. Few verifier changes required:
* Support dynptr destruction in kfuncs
* Add kfunc address substitution based on whether the program runs in
a sleepable or non-sleepable context.
Testing:
The final patch adds a selftest that parses the executable’s ELF to
locate thread-local symbol information, demonstrating the file dynptr
workflow end-to-end.
Mykyta Yatsenko (11):
selftests/bpf: remove unnecessary kfunc prototypes
bpf: widen dynptr size/offset to 64 bit
lib: move freader into buildid.h
lib/freader: support reading more than 2 folios
bpf: verifier: centralize const dynptr check in
unmark_stack_slots_dynptr()
bpf: mark vm_area_struct as trusted
bpf: add plumbing for file-backed dynptr
bpf: add kfuncs and helpers support for file dynptrs
bpf: verifier: refactor kfunc specialization
bpf: dispatch to sleepable file dynptr
selftests/bpf: add file dynptr tests
MAINTAINERS | 1 +
include/linux/bpf.h | 30 +--
include/linux/buildid.h | 25 +++
include/uapi/linux/bpf.h | 8 +-
kernel/bpf/helpers.c | 172 ++++++++++++++----
kernel/bpf/log.c | 2 +
kernel/bpf/verifier.c | 158 ++++++++++------
kernel/trace/bpf_trace.c | 46 ++---
lib/buildid.c | 55 ++----
tools/include/uapi/linux/bpf.h | 8 +-
tools/testing/selftests/bpf/bpf_kfuncs.h | 12 +-
.../selftests/bpf/prog_tests/file_reader.c | 114 ++++++++++++
.../selftests/bpf/progs/dynptr_success.c | 12 +-
.../testing/selftests/bpf/progs/file_reader.c | 157 ++++++++++++++++
tools/testing/selftests/bpf/progs/find_vma.c | 6 +-
.../selftests/bpf/progs/ip_check_defrag.c | 5 -
.../bpf/progs/verifier_netfilter_ctx.c | 5 -
17 files changed, 624 insertions(+), 192 deletions(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/file_reader.c
create mode 100644 tools/testing/selftests/bpf/progs/file_reader.c
--
2.51.0