Skip to content

Commit 9fd5bf9

Browse files
etsalAlexei Starovoitov
authored andcommitted
selftests/bpf: Add tests for the new type-tag based __arena identifier
Add selftests that combine the new type-based __arena identifier with the volatile qualifier both in functions' arguments and return values. This way we test both that they are recognized as arena arguments and that they are not sensitive to the position they are placed in the type compared to other qualifiers. Signed-off-by: Emil Tsalapatis <emil@etsalapatis.com> Link: https://lore.kernel.org/r/20260602004120.17087-7-emil@etsalapatis.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent 367e6e4 commit 9fd5bf9

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

tools/testing/selftests/bpf/progs/verifier_arena.c

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,4 +607,71 @@ int non_arena_ptr_add_to_arena_ptr(void *ctx)
607607

608608
#endif
609609

610+
static __noinline
611+
u32 __arena *check_arena_arg_nonglobal(u32 __arena *arg)
612+
{
613+
volatile u32 val = *arg;
614+
615+
*arg = val + 1;
616+
617+
return arg;
618+
}
619+
620+
__weak
621+
u32 __arena *check_arena_arg_global(u32 __arena *arg)
622+
{
623+
volatile u32 val = *arg;
624+
625+
*arg = val + 1;
626+
627+
return arg;
628+
}
629+
630+
__weak
631+
u32 volatile __arena *check_arena_arg_quals1(u32 volatile __arena *arg1, u32 __arena volatile *arg2)
632+
{
633+
*arg1 = *arg1 + 1;
634+
*arg2 = *arg1 + 1;
635+
636+
return arg2;
637+
}
638+
639+
__weak
640+
u32 __arena volatile *check_arena_arg_quals2(u32 volatile __arena *arg1, u32 __arena volatile *arg2)
641+
{
642+
*arg1 = *arg1 + 1;
643+
*arg2 = *arg2 + 1;
644+
645+
return arg2;
646+
}
647+
648+
SEC("syscall")
649+
__success __retval(0)
650+
int check_arena_arg_ret(void *ctx)
651+
{
652+
u32 __arena *page = bpf_arena_alloc_pages(&arena, NULL, 1, NUMA_NO_NODE, 0);
653+
u32 __arena *arg = page;
654+
u32 __arena volatile *arg1;
655+
u32 __arena volatile *ret1;
656+
u32 volatile __arena *arg2;
657+
u32 volatile __arena *ret2;
658+
659+
if (!arg)
660+
return 1;
661+
662+
/* Make sure we use {arg, ret}{1, 2}. */
663+
664+
arg = check_arena_arg_nonglobal(page);
665+
arg = check_arena_arg_global(arg);
666+
667+
arg1 = arg2 = page;
668+
ret1 = check_arena_arg_quals1(arg1, arg2);
669+
ret2 = check_arena_arg_quals2(arg1, arg2);
670+
671+
if (!(*ret1 ||*ret2))
672+
return -EINVAL;
673+
674+
return 0;
675+
}
676+
610677
char _license[] SEC("license") = "GPL";

0 commit comments

Comments
 (0)