From: Matt Bobrowski <mattbobrowski@google.com>
To: Emil Tsalapatis <emil@etsalapatis.com>
Cc: bpf@vger.kernel.org, ast@kernel.org, andrii@kernel.org,
memxor@gmail.com, daniel@iogearbox.net, eddyz87@gmail.com,
song@kernel.org
Subject: Re: [PATCH bpf-next v7 0/9] Introduce arena library and runtime
Date: Thu, 16 Apr 2026 20:23:28 +0000 [thread overview]
Message-ID: <aeFFQL-bOTN5dg7V@google.com> (raw)
In-Reply-To: <20260412174546.18684-1-emil@etsalapatis.com>
On Sun, Apr 12, 2026 at 01:45:37PM -0400, Emil Tsalapatis wrote:
> Add a new subdirectory to tools/testing/selftests/bpf called libarena,
> along with programs useful for writing arena-based BPF code. This
> patchset adds the following:
>
> 1) libarena, a subdirectory where arena BPF code that is generally useful
> to BPF arena programs can be easily added and tested.
>
> 2) An ASAN runtime for BPF arena programs. BPF arenas allow for accessing
> memory after it has been freed or if it is out of bounds, making it more
> difficult to triage bugs combined to regular BPF. Use LLVM's recently added
> support for address-space based sanitization to selectively sanitize just
> the arena accesses.
>
> 3) A buddy memory allocator that can be reused by BPF programs to handle
> memory allocation/deletion. The allocator uses the ASAN runtime to add
> address sanitization if requested.
>
> The patch includes testing for the new allocators and ASAN features that
> can be built from the top directory using "make libarena_test" and
> "make libarena_test_asan". The generated binaries reside in libarena/.
> The patch also adds test-progs-based selftests to the codebase for the
> libarena code, so the new tests are run by ./test_progs.
>
> The patchset has the following stucture:
>
> 1-2: Addresses a verification failure triggered by SCALAR += PTR_TO_ARENA
> instructions.
>
> 3-4: Minor changes to selftest headers to prepare for the introduction
> of libarena.
>
> 5-7: Add the libarena directory and testing scaffolding, and introduce
> the ASAN runtime.
>
> 8-9: Add the new buddy memory allocator along with self-contained and
> prog-tests-based selftests.
I haven't had an opportunity to go through this patch series just yet,
but can I just say that it excites me considerably! I've been wanting
to carve out some time to implement something exactly like this for a
very long time (since BPF arena maps were initially introduced) as I
think it's going to be incredibly valuable for BPF users moving
forward.
> Signed-off-by: Emil Tsalapatis <emil@etsalapatis.com>
>
> HISTORY
> =======
>
> v6->v7 (https://lore.kernel.org/bpf/20260412011857.3387-1-emil@etsalapatis.com)
> - Modify patch 1 to allow operations between PTR_TO_ARENA src_reg
> and dst_reg of any type. Adjust selftests accordingly (Alexei)
> - Remove unnecessary include in patch 5 (Song)
> - Removed unused definitions/assignments in patches 8/9, update patch
> descriptions
>
> v5->v6 (https://lore.kernel.org/bpf/20260410163041.8063-1-emil@etsalapatis.com)
> - Fix subreg_def management for SCALAR += PTR_TO_ARENA operations (AI)
> - Add more selftests for the SCALAR += PTR_TO_ARENA patch (Sashiko)
> - Adjust fls() operation to be in line with the kernel version (Sashiko)
> - Address Sashiko selftests and debugging nits
> - Add ASAN loadN and storeN _noabort variants and associated BTF anchor
> - Remove unnecessary bit freeing of buddies during block splitting
>
> v4->v5 (https://lore.kernel.org/bpf/20260407045730.13359-1-emil@etsalapatis.com)
> Omitting various nits and fixups.
> - Properly adjust subreg_def for scalar += ptr_to_arena calls (Sashiko)
> - Remove extraneous definition from prog_tests/arena_spin_lock.c (Song)
> - Trim extraneous comments from ASAN and buddy (Alexei)
> - Remove asan_dummy call and replace with function pointer array (Alexei)
> - Remove usersapi.h header and merge it into common.h (Alexei)
> - Replace ASAN macros with function calls (Alexei)
> - Embed buddy lock into the struct and move the buddy allocator to __arena_global
> (Alexei)
> - Add commenting for buddy allocator constants (Alexei)
> - Add default buddy allocator directly in common.bpf.c, so that the user does
> not need to define it.
> - Expand test harnesses to dynamically find individual selftests. Now the
> selftests also reports each test individually (e.g., 5 entries for the
> buddy allocator instead of 1). This brings them to par with the rest of
> the test_progs.
>
> v3->v4 (https://lore.kernel.org/bpf/20260403042720.18862-1-emil@etsalapatis.com)
> - Add Acks by Song to patches 1-4.
> - Expand the verifier's handling of scalar/arena operations to
> include all 3-operand operations in Patch 1 (Alexei)
> - Add additional tests for arena/arena (allowed) and arena/pointer (not allowed)
> operations in Patch 2
> - Remove ASAN version of the library from default compilation since it requires
> LLVM 22 and up (CI)
> - Rework buddy allocator locking for clarity and add comments
> - Fix From: email to be consistent with SOB
> - Address (most) Sashiko comments
>
> v2->v3 (https://lore.kernel.org/bpf/20260127181610.86376-1-emil@etsalapatis.com)
> Nonexhaustive due to significant patch rework.
> - Do not duplicate WRITE_ONCE macro (Mykyta, Kumar)
> - Add SPDX headers (Alexei)
> - Remove bump/stack allocators (Alexei)
> - Integrate testing with test_progs (Kumar)
> - Add short description of ASAN algorithm at the top of the file (Alexei)
>
> v1->v2 (https://lore.kernel.org/bpf/20260122160131.2238331-1-etsal@meta.com/)
>
> - Added missing format string argument (AI)
> - Fix outdated selftests prog name check (AI)
> - Fixed stack allocation check for segment creation (AI)
> - Fix errors in non-ASAN bump allocator selftests (AI)
> - Propagate error value from individual selftests in selftest.c
> - Removed embedded metadata from bump allocator as it was needlessly
> complicating its behavior
>
>
> Emil Tsalapatis (9):
> bpf: Allow instructions with arena source and non-arena dest registers
> selftests/bpf: Add tests for non-arena/arena operations
> selftests/bpf: Move bpf_arena_spin_lock.h to the top level
> selftests/bpf: Move READ_ONCE/WRITE_ONCE macros to bpf_experimental.h
> selftests/bpf: Add basic libarena scaffolding
> selftests/bpf: Add arena ASAN runtime to libarena
> selftests/bpf: Add ASAN support for libarena selftests
> selftests/bpf: Add buddy allocator for libarena
> selftests/bpf: Add selftests for libarena buddy allocator
>
> kernel/bpf/verifier.c | 14 +-
> tools/testing/selftests/bpf/.gitignore | 2 +
> tools/testing/selftests/bpf/Makefile | 28 +-
> .../testing/selftests/bpf/bpf_arena_common.h | 4 -
> .../bpf/{progs => }/bpf_arena_spin_lock.h | 4 +-
> tools/testing/selftests/bpf/bpf_atomic.h | 4 -
> .../testing/selftests/bpf/bpf_experimental.h | 3 +
> tools/testing/selftests/bpf/libarena/Makefile | 77 ++
> .../selftests/bpf/libarena/include/asan.h | 118 +++
> .../selftests/bpf/libarena/include/buddy.h | 92 ++
> .../selftests/bpf/libarena/include/common.h | 67 ++
> .../bpf/libarena/include/selftest_helpers.h | 121 +++
> .../bpf/libarena/selftests/selftest.c | 188 ++++
> .../libarena/selftests/st_asan_buddy.bpf.c | 241 +++++
> .../bpf/libarena/selftests/st_asan_common.h | 47 +
> .../bpf/libarena/selftests/st_buddy.bpf.c | 208 ++++
> .../selftests/bpf/libarena/src/asan.bpf.c | 559 +++++++++++
> .../selftests/bpf/libarena/src/buddy.bpf.c | 903 ++++++++++++++++++
> .../selftests/bpf/libarena/src/common.bpf.c | 74 ++
> .../bpf/prog_tests/arena_spin_lock.c | 7 -
> .../selftests/bpf/prog_tests/libarena.c | 62 ++
> .../selftests/bpf/progs/arena_spin_lock.c | 2 +-
> .../selftests/bpf/progs/verifier_arena.c | 130 +++
> 23 files changed, 2934 insertions(+), 21 deletions(-)
> rename tools/testing/selftests/bpf/{progs => }/bpf_arena_spin_lock.h (99%)
> create mode 100644 tools/testing/selftests/bpf/libarena/Makefile
> create mode 100644 tools/testing/selftests/bpf/libarena/include/asan.h
> create mode 100644 tools/testing/selftests/bpf/libarena/include/buddy.h
> create mode 100644 tools/testing/selftests/bpf/libarena/include/common.h
> create mode 100644 tools/testing/selftests/bpf/libarena/include/selftest_helpers.h
> create mode 100644 tools/testing/selftests/bpf/libarena/selftests/selftest.c
> create mode 100644 tools/testing/selftests/bpf/libarena/selftests/st_asan_buddy.bpf.c
> create mode 100644 tools/testing/selftests/bpf/libarena/selftests/st_asan_common.h
> create mode 100644 tools/testing/selftests/bpf/libarena/selftests/st_buddy.bpf.c
> create mode 100644 tools/testing/selftests/bpf/libarena/src/asan.bpf.c
> create mode 100644 tools/testing/selftests/bpf/libarena/src/buddy.bpf.c
> create mode 100644 tools/testing/selftests/bpf/libarena/src/common.bpf.c
> create mode 100644 tools/testing/selftests/bpf/prog_tests/libarena.c
>
> --
> 2.53.0
>
next prev parent reply other threads:[~2026-04-16 20:23 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-12 17:45 [PATCH bpf-next v7 0/9] Introduce arena library and runtime Emil Tsalapatis
2026-04-12 17:45 ` [PATCH bpf-next v7 1/9] bpf: Allow instructions with arena source and non-arena dest registers Emil Tsalapatis
2026-04-12 19:54 ` Alexei Starovoitov
2026-04-12 17:45 ` [PATCH bpf-next v7 2/9] selftests/bpf: Add tests for non-arena/arena operations Emil Tsalapatis
2026-04-12 17:45 ` [PATCH bpf-next v7 3/9] selftests/bpf: Move bpf_arena_spin_lock.h to the top level Emil Tsalapatis
2026-04-12 19:31 ` Kumar Kartikeya Dwivedi
2026-04-12 17:45 ` [PATCH bpf-next v7 4/9] selftests/bpf: Move READ_ONCE/WRITE_ONCE macros to bpf_experimental.h Emil Tsalapatis
2026-04-12 19:33 ` Kumar Kartikeya Dwivedi
2026-04-12 17:45 ` [PATCH bpf-next v7 5/9] selftests/bpf: Add basic libarena scaffolding Emil Tsalapatis
2026-04-12 18:28 ` bot+bpf-ci
2026-04-12 18:31 ` Emil Tsalapatis
2026-04-12 17:45 ` [PATCH bpf-next v7 6/9] selftests/bpf: Add arena ASAN runtime to libarena Emil Tsalapatis
2026-04-12 18:28 ` bot+bpf-ci
2026-04-12 18:34 ` Emil Tsalapatis
2026-04-12 17:45 ` [PATCH bpf-next v7 7/9] selftests/bpf: Add ASAN support for libarena selftests Emil Tsalapatis
2026-04-12 17:45 ` [PATCH bpf-next v7 8/9] selftests/bpf: Add buddy allocator for libarena Emil Tsalapatis
2026-04-12 17:45 ` [PATCH bpf-next v7 9/9] selftests/bpf: Add selftests for libarena buddy allocator Emil Tsalapatis
2026-04-12 19:22 ` [PATCH bpf-next v7 0/9] Introduce arena library and runtime Kumar Kartikeya Dwivedi
2026-04-12 20:00 ` patchwork-bot+netdevbpf
2026-04-16 20:23 ` Matt Bobrowski [this message]
2026-04-16 20:31 ` Matt Bobrowski
2026-04-16 20:43 ` Song Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aeFFQL-bOTN5dg7V@google.com \
--to=mattbobrowski@google.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=memxor@gmail.com \
--cc=song@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox