diff options
| author | Emil Tsalapatis <emil@etsalapatis.com> | 2026-04-26 15:03:35 -0400 |
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2026-04-26 18:12:22 -0700 |
| commit | cfc00618b9dfc75cd507f1a4f0d83b4429627399 (patch) | |
| tree | 080cd3bd0295f57c2b5577e485f9c79876ac5baf /tools/testing/selftests/bpf/libarena/include | |
| parent | 9ab78691eb5fd0d3ad0a1994d4103223678eb78b (diff) | |
| download | linux-next-cfc00618b9dfc75cd507f1a4f0d83b4429627399.tar.gz linux-next-cfc00618b9dfc75cd507f1a4f0d83b4429627399.zip | |
selftests/bpf: Add ASAN support for libarena selftests
Expand the arena library selftest infrastructure to support
address sanitization. Add the compiler flags necessary to
compile the library under ASAN when supported.
Signed-off-by: Emil Tsalapatis <emil@etsalapatis.com>
Link: https://lore.kernel.org/r/20260426190338.4615-6-emil@etsalapatis.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools/testing/selftests/bpf/libarena/include')
| -rw-r--r-- | tools/testing/selftests/bpf/libarena/include/libarena/userspace.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/libarena/include/libarena/userspace.h b/tools/testing/selftests/bpf/libarena/include/libarena/userspace.h index 0438a751d5fd..88b68ac73cca 100644 --- a/tools/testing/selftests/bpf/libarena/include/libarena/userspace.h +++ b/tools/testing/selftests/bpf/libarena/include/libarena/userspace.h @@ -27,6 +27,11 @@ static inline bool libarena_is_test_prog(const char *name) return strstr(name, "test_") == name; } +static inline bool libarena_is_asan_test_prog(const char *name) +{ + return strstr(name, "asan_test") == name; +} + static inline int libarena_run_prog_args(int prog_fd, void *args, size_t argsize) { LIBBPF_OPTS(bpf_test_run_opts, opts); @@ -97,3 +102,31 @@ static inline int libarena_get_globals_pages(int arena_get_globals_fd, free(vec); return 0; } + +static inline int libarena_asan_init(int arena_asan_init_fd, + int asan_init_fd, + size_t arena_all_pages) +{ + LIBBPF_OPTS(bpf_test_run_opts, opts); + struct asan_init_args args; + u64 globals_pages; + int ret; + + ret = libarena_get_globals_pages(arena_asan_init_fd, + arena_all_pages, &globals_pages); + if (ret) + return ret; + + args = (struct asan_init_args){ + .arena_all_pages = arena_all_pages, + .arena_globals_pages = globals_pages, + }; + + opts.ctx_in = &args; + opts.ctx_size_in = sizeof(args); + + ret = bpf_prog_test_run_opts(asan_init_fd, &opts); + if (ret) + return ret; + return opts.retval; +} |
