public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
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
> 

  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