mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
selftests/bpf: tests for __arg_untrusted void * global func params
Check usage of __arg_untrusted parameters of primitive type: - passing of {trusted, untrusted, map value, scalar value, values with variable offset} to untrusted `void *`, `char *` or enum is ok; - varifier represents such parameters as rdonly_untrusted_mem(sz=0). Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> Signed-off-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/r/20250704230354.1323244-9-eddyz87@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
c4aa454c64
commit
68cca81fd5
1 changed files with 53 additions and 0 deletions
|
@ -260,4 +260,57 @@ int untrusted_to_trusted(void *ctx)
|
||||||
return subprog_untrusted2(bpf_get_current_task_btf());
|
return subprog_untrusted2(bpf_get_current_task_btf());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__weak int subprog_void_untrusted(void *p __arg_untrusted)
|
||||||
|
{
|
||||||
|
return *(int *)p;
|
||||||
|
}
|
||||||
|
|
||||||
|
__weak int subprog_char_untrusted(char *p __arg_untrusted)
|
||||||
|
{
|
||||||
|
return *(int *)p;
|
||||||
|
}
|
||||||
|
|
||||||
|
__weak int subprog_enum_untrusted(enum bpf_attach_type *p __arg_untrusted)
|
||||||
|
{
|
||||||
|
return *(int *)p;
|
||||||
|
}
|
||||||
|
|
||||||
|
__weak int subprog_enum64_untrusted(enum scx_public_consts *p __arg_untrusted)
|
||||||
|
{
|
||||||
|
return *(int *)p;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEC("tp_btf/sys_enter")
|
||||||
|
__success
|
||||||
|
__log_level(2)
|
||||||
|
__msg("r1 = {{.*}}; {{.*}}R1_w=trusted_ptr_task_struct()")
|
||||||
|
__msg("Func#1 ('subprog_void_untrusted') is global and assumed valid.")
|
||||||
|
__msg("Validating subprog_void_untrusted() func#1...")
|
||||||
|
__msg(": R1=rdonly_untrusted_mem(sz=0)")
|
||||||
|
int trusted_to_untrusted_mem(void *ctx)
|
||||||
|
{
|
||||||
|
return subprog_void_untrusted(bpf_get_current_task_btf());
|
||||||
|
}
|
||||||
|
|
||||||
|
SEC("tp_btf/sys_enter")
|
||||||
|
__success
|
||||||
|
int anything_to_untrusted_mem(void *ctx)
|
||||||
|
{
|
||||||
|
/* untrusted to untrusted mem */
|
||||||
|
subprog_void_untrusted(bpf_core_cast(0, struct task_struct));
|
||||||
|
/* map value to untrusted mem */
|
||||||
|
subprog_void_untrusted(mem);
|
||||||
|
/* scalar to untrusted mem */
|
||||||
|
subprog_void_untrusted(0);
|
||||||
|
/* variable offset to untrusted mem (map) */
|
||||||
|
subprog_void_untrusted((void *)mem + off);
|
||||||
|
/* variable offset to untrusted mem (trusted) */
|
||||||
|
subprog_void_untrusted(bpf_get_current_task_btf() + off);
|
||||||
|
/* variable offset to untrusted char/enum/enum64 (map) */
|
||||||
|
subprog_char_untrusted(mem + off);
|
||||||
|
subprog_enum_untrusted((void *)mem + off);
|
||||||
|
subprog_enum64_untrusted((void *)mem + off);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
char _license[] SEC("license") = "GPL";
|
char _license[] SEC("license") = "GPL";
|
||||||
|
|
Loading…
Add table
Reference in a new issue