mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 12:34:02 +02:00
selftests/bpf: Test btf lookup helper sleepability
Add an expected failure case which calls bpf_btf_find_by_name_kind() from a BPF timer callback. Without the helper prototype being marked sleepable, the verifier accepts the program and the load unexpectedly succeeds. Also add a positive control which calls the helper directly from a syscall program. This verifies that marking the helper sleepable only rejects it in non-sleepable regions. Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> Link: https://lore.kernel.org/r/20260903214758.2727663-5-memxor@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
620614bf76
commit
687b2729ce
|
|
@ -108,6 +108,30 @@ int timer_sys_close_prog(void *ctx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int timer_btf_find_cb(void *map, int *key, struct bpf_timer *timer)
|
||||
{
|
||||
char name[] = "task_struct";
|
||||
|
||||
bpf_btf_find_by_name_kind(name, sizeof(name), BTF_KIND_STRUCT, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
SEC("syscall")
|
||||
__failure __msg("sleepable helper bpf_btf_find_by_name_kind#{{[0-9]+}} in non-sleepable prog")
|
||||
int timer_btf_find_prog(void *ctx)
|
||||
{
|
||||
struct timer_elem *val;
|
||||
int key = 0;
|
||||
|
||||
val = bpf_map_lookup_elem(&timer_map, &key);
|
||||
if (!val)
|
||||
return 0;
|
||||
|
||||
bpf_timer_init(&val->t, &timer_map, 0);
|
||||
bpf_timer_set_callback(&val->t, timer_btf_find_cb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
SEC("syscall")
|
||||
__success
|
||||
int syscall_sys_bpf_prog(void *ctx)
|
||||
|
|
@ -126,6 +150,16 @@ int syscall_sys_close_prog(void *ctx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
SEC("syscall")
|
||||
__success
|
||||
int syscall_btf_find_prog(void *ctx)
|
||||
{
|
||||
char name[] = "task_struct";
|
||||
|
||||
bpf_btf_find_by_name_kind(name, sizeof(name), BTF_KIND_STRUCT, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Workqueue tests */
|
||||
|
||||
struct wq_elem {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user