]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bpf: Add bpf_stream_print_stack stack dumping kfunc
authorEmil Tsalapatis <emil@etsalapatis.com>
Tue, 3 Feb 2026 18:04:21 +0000 (13:04 -0500)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 3 Feb 2026 18:41:16 +0000 (10:41 -0800)
Add a new kfunc called bpf_stream_print_stack to be used by programs
that need to print out their current BPF stack. The kfunc is essentially
a wrapper around the existing bpf_stream_dump_stack functionality used
to generate stack traces for error events like may_goto violations and
BPF-side arena page faults.

Signed-off-by: Emil Tsalapatis <emil@etsalapatis.com>
Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Link: https://lore.kernel.org/r/20260203180424.14057-2-emil@etsalapatis.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/helpers.c
kernel/bpf/stream.c

index b54ec0e945aa383d560319ed978a98f146e3992d..c30a9f68af6bc711cc770c87fab9abc4d1046121 100644 (file)
@@ -4562,6 +4562,7 @@ BTF_ID_FLAGS(func, bpf_strncasestr);
 BTF_ID_FLAGS(func, bpf_cgroup_read_xattr, KF_RCU)
 #endif
 BTF_ID_FLAGS(func, bpf_stream_vprintk, KF_IMPLICIT_ARGS)
+BTF_ID_FLAGS(func, bpf_stream_print_stack, KF_IMPLICIT_ARGS)
 BTF_ID_FLAGS(func, bpf_task_work_schedule_signal, KF_IMPLICIT_ARGS)
 BTF_ID_FLAGS(func, bpf_task_work_schedule_resume, KF_IMPLICIT_ARGS)
 BTF_ID_FLAGS(func, bpf_dynptr_from_file)
index 24730df55e6962bae41c9e196bf223b47d55f482..be9ce98e9469255ddd072b2909dee85135dcc12e 100644 (file)
@@ -245,6 +245,25 @@ __bpf_kfunc int bpf_stream_vprintk(int stream_id, const char *fmt__str, const vo
        return ret;
 }
 
+/* Directly trigger a stack dump from the program. */
+__bpf_kfunc int bpf_stream_print_stack(int stream_id, struct bpf_prog_aux *aux)
+{
+       struct bpf_stream_stage ss;
+       struct bpf_prog *prog;
+
+       /* Make sure the stream ID is valid. */
+       if (!bpf_stream_get(stream_id, aux))
+               return -ENOENT;
+
+       prog = aux->main_prog_aux->prog;
+
+       bpf_stream_stage(ss, prog, stream_id, ({
+               bpf_stream_dump_stack(ss);
+       }));
+
+       return 0;
+}
+
 __bpf_kfunc_end_defs();
 
 /* Added kfunc to common_btf_ids */