[PATCH bpf v4 00/20] selftests/bpf: Fixes for userspace ASAN
From: Ihor Solodrai
Date: Mon Feb 23 2026 - 14:08:28 EST
This series includes various fixes aiming to enable test_progs run
with userspace address sanitizer on BPF CI.
The first five patches add a simplified implementation of strscpy() to
selftests/bpf and then replace strcpy/strncpy usages across the tests
with it. See relevant discussions [1][2].
Patch #6 fixes the selftests/bpf/test_progs build with:
SAN_CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
The subsequent patches fix bugs reported by the address sanitizer on
attempt to run the tests.
[1] https://lore.kernel.org/bpf/CAADnVQ+9uw2_o388j43EWiAPdMB=3FLx2jq-9zRSvqrv-wgRag@xxxxxxxxxxxxxx/
[2] https://lore.kernel.org/bpf/20260220182011.802116-1-ihor.solodrai@xxxxxxxxx/
---
v3->v4:
- combine strscpy and ASAN series into one (Alexei)
- make the count arg of strscpy() optional via macro and fixup
relevant call sites (Alexei)
- remove strscpy_cat() from this series (Alexei)
v3: https://lore.kernel.org/bpf/20260220222604.1155148-1-ihor.solodrai@xxxxxxxxx/
v2->v3:
- rebase on top of "selftests/bpf: Add and use strscpy()"
- https://lore.kernel.org/bpf/20260220182011.802116-1-ihor.solodrai@xxxxxxxxx/
- uprobe_multi_test.c: memset static struct child at the beginning
of a test *and* zero out child->thread in release_child (patch #9,
Mykyta)
- nits in test_sysctl.c (patch #11, Eduard)
- bpftool_helpers.c: update to use strscpy (patch #14, Alexei)
- add __asan_on_error handler to still dump test logs even with ASAN
build (patch #15, Mykyta)
v2: https://lore.kernel.org/bpf/20260218003041.1156774-1-ihor.solodrai@xxxxxxxxx/
v1->v2:
- rebase on bpf (v1 was targeting bpf-next)
- add ASAN flag handling in selftests/bpf/Makefile (Eduard)
- don't override SIGSEGV handler in test_progs with ASAN (Eduard)
- add error messages in detect_bpftool_path (Mykyta)
- various nits (Eduard, Jiri, Mykyta, Alexis)
v1: https://lore.kernel.org/bpf/20260212011356.3266753-1-ihor.solodrai@xxxxxxxxx/
---
Ihor Solodrai (20):
selftests/bpf: Add simple strscpy() implementation
selftests/bpf: Replace strcpy() calls with strscpy()
selftests/bpf: Replace strncpy() with strscpy()
selftests/bpf: Use strscpy in bpftool_helpers.c
selftests/bpf: Use memcpy() for bounded non-NULL-terminated copies
selftests/bpf: Pass through build flags to bpftool and resolve_btfids
resolve_btfids: Fix memory leaks reported by ASAN
selftests/bpf: Add DENYLIST.asan
selftests/bpf: Refactor bpf_get_ksyms() trace helper
selftests/bpf: Fix memory leaks in tests
selftests/bpf: Fix cleanup in check_fd_array_cnt__fd_array_too_big()
veristat: Fix a memory leak for preset ENUMERATOR
selftests/bpf: Fix use-after-free in xdp_metadata test
selftests/bpf: Fix double thread join in uprobe_multi_test
selftests/bpf: Fix resource leaks caused by missing cleanups
selftests/bpf: Free bpf_object in test_sysctl
selftests/bpf: Fix array bounds warning in jit_disasm_helpers
selftests/bpf: Fix out-of-bounds array access bugs reported by ASAN
selftests/bpf: Check BPFTOOL env var in detect_bpftool_path()
selftests/bpf: Don't override SIGSEGV handler with ASAN
tools/bpf/resolve_btfids/Makefile | 7 +-
tools/bpf/resolve_btfids/main.c | 81 ++++++++++++-------
tools/include/linux/args.h | 4 +
tools/testing/selftests/bpf/DENYLIST.asan | 3 +
tools/testing/selftests/bpf/Makefile | 13 ++-
.../selftests/bpf/benchs/bench_trigger.c | 14 ++--
tools/testing/selftests/bpf/bpf_util.h | 45 ++++++++---
tools/testing/selftests/bpf/bpftool_helpers.c | 25 ++++--
tools/testing/selftests/bpf/cgroup_helpers.c | 2 +-
.../selftests/bpf/jit_disasm_helpers.c | 18 ++---
tools/testing/selftests/bpf/network_helpers.c | 5 +-
.../testing/selftests/bpf/prog_tests/align.c | 2 +-
.../selftests/bpf/prog_tests/bpf_iter.c | 3 +-
.../selftests/bpf/prog_tests/bpf_tcp_ca.c | 2 +-
.../bpf/prog_tests/cgrp_local_storage.c | 4 +-
.../selftests/bpf/prog_tests/ctx_rewrite.c | 6 +-
.../testing/selftests/bpf/prog_tests/dynptr.c | 5 +-
.../selftests/bpf/prog_tests/fd_array.c | 4 +-
.../selftests/bpf/prog_tests/flow_dissector.c | 4 +-
.../selftests/bpf/prog_tests/htab_update.c | 1 +
.../bpf/prog_tests/kmem_cache_iter.c | 7 +-
.../bpf/prog_tests/kprobe_multi_test.c | 12 ++-
.../selftests/bpf/prog_tests/lwt_seg6local.c | 2 +-
.../bpf/prog_tests/queue_stack_map.c | 4 +-
.../selftests/bpf/prog_tests/setget_sockopt.c | 2 +-
.../bpf/prog_tests/skc_to_unix_sock.c | 2 +-
.../selftests/bpf/prog_tests/sockmap_basic.c | 28 +++----
.../selftests/bpf/prog_tests/sockmap_listen.c | 2 +-
.../selftests/bpf/prog_tests/sockopt_sk.c | 2 +-
.../bpf/prog_tests/struct_ops_private_stack.c | 4 +-
.../bpf/prog_tests/task_local_data.h | 2 +-
.../selftests/bpf/prog_tests/tc_opts.c | 6 +-
.../selftests/bpf/prog_tests/tc_redirect.c | 2 +-
.../selftests/bpf/prog_tests/test_sysctl.c | 3 +
.../selftests/bpf/prog_tests/test_tc_tunnel.c | 5 +-
.../selftests/bpf/prog_tests/test_veristat.c | 4 +-
.../selftests/bpf/prog_tests/test_xsk.c | 24 +++++-
.../bpf/prog_tests/uprobe_multi_test.c | 6 +-
.../selftests/bpf/prog_tests/verifier_log.c | 2 +-
.../selftests/bpf/prog_tests/xdp_metadata.c | 4 +-
tools/testing/selftests/bpf/test_progs.c | 38 ++++++---
tools/testing/selftests/bpf/test_verifier.c | 2 +-
tools/testing/selftests/bpf/testing_helpers.c | 1 +
tools/testing/selftests/bpf/trace_helpers.c | 23 +++---
tools/testing/selftests/bpf/trace_helpers.h | 11 ++-
tools/testing/selftests/bpf/veristat.c | 2 +
tools/testing/selftests/bpf/xdp_features.c | 3 +-
tools/testing/selftests/bpf/xdp_hw_metadata.c | 4 +-
48 files changed, 291 insertions(+), 164 deletions(-)
create mode 100644 tools/testing/selftests/bpf/DENYLIST.asan
--
2.53.0