mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
bpf: Report may_goto timeout to BPF stderr
Begin reporting may_goto timeouts to BPF program's stderr stream. Acked-by: Eduard Zingerman <eddyz87@gmail.com> Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com> Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> Link: https://lore.kernel.org/r/20250703204818.925464-8-memxor@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
d7c431cafc
commit
e8d0133022
|
|
@ -3168,6 +3168,22 @@ u64 __weak arch_bpf_timed_may_goto(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static noinline void bpf_prog_report_may_goto_violation(void)
|
||||
{
|
||||
#ifdef CONFIG_BPF_SYSCALL
|
||||
struct bpf_stream_stage ss;
|
||||
struct bpf_prog *prog;
|
||||
|
||||
prog = bpf_prog_find_from_stack();
|
||||
if (!prog)
|
||||
return;
|
||||
bpf_stream_stage(ss, prog, BPF_STDERR, ({
|
||||
bpf_stream_printk(ss, "ERROR: Timeout detected for may_goto instruction\n");
|
||||
bpf_stream_dump_stack(ss);
|
||||
}));
|
||||
#endif
|
||||
}
|
||||
|
||||
u64 bpf_check_timed_may_goto(struct bpf_timed_may_goto *p)
|
||||
{
|
||||
u64 time = ktime_get_mono_fast_ns();
|
||||
|
|
@ -3178,8 +3194,10 @@ u64 bpf_check_timed_may_goto(struct bpf_timed_may_goto *p)
|
|||
return BPF_MAX_TIMED_LOOPS;
|
||||
}
|
||||
/* Check if we've exhausted our time slice, and zero count. */
|
||||
if (time - p->timestamp >= (NSEC_PER_SEC / 4))
|
||||
if (unlikely(time - p->timestamp >= (NSEC_PER_SEC / 4))) {
|
||||
bpf_prog_report_may_goto_violation();
|
||||
return 0;
|
||||
}
|
||||
/* Refresh the count for the stack frame. */
|
||||
return BPF_MAX_TIMED_LOOPS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user