mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
selftests/bpf: add arg:ctx cases to test_global_funcs tests
Add a few extra cases of global funcs with context arguments. This time rely on "arg:ctx" decl_tag (__arg_ctx macro), but put it next to "classic" cases where context argument has to be of an exact type that BPF verifier expects (e.g., bpf_user_pt_regs_t for kprobe/uprobe). Colocating all these cases separately from other global func args that rely on arg:xxx decl tags (in verifier_global_subprogs.c) allows for simpler backwards compatibility testing on old kernels. All the cases in test_global_func_ctx_args.c are supposed to work on older kernels, which was manually validated during development. Acked-by: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/r/20240104013847.3875810-9-andrii@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
2f38fe6894
commit
67fe459144
|
|
@ -102,3 +102,52 @@ int perf_event_ctx(void *ctx)
|
|||
{
|
||||
return perf_event_ctx_subprog(ctx);
|
||||
}
|
||||
|
||||
/* this global subprog can be now called from many types of entry progs, each
|
||||
* with different context type
|
||||
*/
|
||||
__weak int subprog_ctx_tag(void *ctx __arg_ctx)
|
||||
{
|
||||
return bpf_get_stack(ctx, stack, sizeof(stack), 0);
|
||||
}
|
||||
|
||||
struct my_struct { int x; };
|
||||
|
||||
__weak int subprog_multi_ctx_tags(void *ctx1 __arg_ctx,
|
||||
struct my_struct *mem,
|
||||
void *ctx2 __arg_ctx)
|
||||
{
|
||||
if (!mem)
|
||||
return 0;
|
||||
|
||||
return bpf_get_stack(ctx1, stack, sizeof(stack), 0) +
|
||||
mem->x +
|
||||
bpf_get_stack(ctx2, stack, sizeof(stack), 0);
|
||||
}
|
||||
|
||||
SEC("?raw_tp")
|
||||
__success __log_level(2)
|
||||
int arg_tag_ctx_raw_tp(void *ctx)
|
||||
{
|
||||
struct my_struct x = { .x = 123 };
|
||||
|
||||
return subprog_ctx_tag(ctx) + subprog_multi_ctx_tags(ctx, &x, ctx);
|
||||
}
|
||||
|
||||
SEC("?perf_event")
|
||||
__success __log_level(2)
|
||||
int arg_tag_ctx_perf(void *ctx)
|
||||
{
|
||||
struct my_struct x = { .x = 123 };
|
||||
|
||||
return subprog_ctx_tag(ctx) + subprog_multi_ctx_tags(ctx, &x, ctx);
|
||||
}
|
||||
|
||||
SEC("?kprobe")
|
||||
__success __log_level(2)
|
||||
int arg_tag_ctx_kprobe(void *ctx)
|
||||
{
|
||||
struct my_struct x = { .x = 123 };
|
||||
|
||||
return subprog_ctx_tag(ctx) + subprog_multi_ctx_tags(ctx, &x, ctx);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user