There are several uses cases for dynamic pointers in bpf programs. A list of some are: dynamically sized ringbuf reservations without any extra memcpys, dynamic string parsing and memory comparisons, dynamic memory allocations that can be persisted in a map, and dynamic parsing of sk_buff and xdp_md packet data. At a high-level, the patches are as follows: 1/7 - Adds MEM_UNINIT as a bpf_type_flag 2/7 - Adds MEM_RELEASE as a bpf_type_flag 3/7 - Adds bpf_dynptr_from_mem, bpf_malloc, and bpf_free 4/7 - Adds bpf_dynptr_read and bpf_dynptr_write 5/7 - Adds dynptr data slices (ptr to underlying dynptr memory) 6/7 - Adds dynptr support for ring buffers 7/7 - Tests to check that verifier rejects certain fail cases and passes certain success cases This is the first dynptr patchset in a larger series. The next series of patches will add persisting dynamic memory allocations in maps, parsing packet data through dynptrs, dynptrs to referenced objects, convenience helpers for using dynptrs as iterators, and more helper functions for interacting with strings and memory dynamically. Joanne Koong (7): bpf: Add MEM_UNINIT as a bpf_type_flag bpf: Add MEM_RELEASE as a bpf_type_flag bpf: Add bpf_dynptr_from_mem, bpf_malloc, bpf_free bpf: Add bpf_dynptr_read and bpf_dynptr_write bpf: Add dynptr data slices bpf: Dynptr support for ring buffers bpf: Dynptr tests include/linux/bpf.h | 107 +++- include/linux/bpf_verifier.h | 23 +- include/uapi/linux/bpf.h | 100 ++++ kernel/bpf/bpf_lsm.c | 4 +- kernel/bpf/btf.c | 3 +- kernel/bpf/cgroup.c | 4 +- kernel/bpf/helpers.c | 190 ++++++- kernel/bpf/ringbuf.c | 75 ++- kernel/bpf/stackmap.c | 6 +- kernel/bpf/verifier.c | 406 ++++++++++++-- kernel/trace/bpf_trace.c | 20 +- net/core/filter.c | 28 +- scripts/bpf_doc.py | 2 + tools/include/uapi/linux/bpf.h | 100 ++++ .../testing/selftests/bpf/prog_tests/dynptr.c | 303 ++++++++++ .../testing/selftests/bpf/progs/dynptr_fail.c | 527 ++++++++++++++++++ .../selftests/bpf/progs/dynptr_success.c | 147 +++++ 17 files changed, 1955 insertions(+), 90 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/dynptr.c create mode 100644 tools/testing/selftests/bpf/progs/dynptr_fail.c create mode 100644 tools/testing/selftests/bpf/progs/dynptr_success.c -- 2.30.2