mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 10:41:49 +02:00
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>
This commit is contained in:
parent
367e6e4a81
commit
9fd5bf96ac
|
|
@ -607,4 +607,71 @@ int non_arena_ptr_add_to_arena_ptr(void *ctx)
|
|||
|
||||
#endif
|
||||
|
||||
static __noinline
|
||||
u32 __arena *check_arena_arg_nonglobal(u32 __arena *arg)
|
||||
{
|
||||
volatile u32 val = *arg;
|
||||
|
||||
*arg = val + 1;
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
__weak
|
||||
u32 __arena *check_arena_arg_global(u32 __arena *arg)
|
||||
{
|
||||
volatile u32 val = *arg;
|
||||
|
||||
*arg = val + 1;
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
__weak
|
||||
u32 volatile __arena *check_arena_arg_quals1(u32 volatile __arena *arg1, u32 __arena volatile *arg2)
|
||||
{
|
||||
*arg1 = *arg1 + 1;
|
||||
*arg2 = *arg1 + 1;
|
||||
|
||||
return arg2;
|
||||
}
|
||||
|
||||
__weak
|
||||
u32 __arena volatile *check_arena_arg_quals2(u32 volatile __arena *arg1, u32 __arena volatile *arg2)
|
||||
{
|
||||
*arg1 = *arg1 + 1;
|
||||
*arg2 = *arg2 + 1;
|
||||
|
||||
return arg2;
|
||||
}
|
||||
|
||||
SEC("syscall")
|
||||
__success __retval(0)
|
||||
int check_arena_arg_ret(void *ctx)
|
||||
{
|
||||
u32 __arena *page = bpf_arena_alloc_pages(&arena, NULL, 1, NUMA_NO_NODE, 0);
|
||||
u32 __arena *arg = page;
|
||||
u32 __arena volatile *arg1;
|
||||
u32 __arena volatile *ret1;
|
||||
u32 volatile __arena *arg2;
|
||||
u32 volatile __arena *ret2;
|
||||
|
||||
if (!arg)
|
||||
return 1;
|
||||
|
||||
/* Make sure we use {arg, ret}{1, 2}. */
|
||||
|
||||
arg = check_arena_arg_nonglobal(page);
|
||||
arg = check_arena_arg_global(arg);
|
||||
|
||||
arg1 = arg2 = page;
|
||||
ret1 = check_arena_arg_quals1(arg1, arg2);
|
||||
ret2 = check_arena_arg_quals2(arg1, arg2);
|
||||
|
||||
if (!(*ret1 ||*ret2))
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char _license[] SEC("license") = "GPL";
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user