]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/bpf: Add selftests for stream functions under lock
authorEmil Tsalapatis <emil@etsalapatis.com>
Tue, 3 Feb 2026 18:04:24 +0000 (13:04 -0500)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 3 Feb 2026 18:41:16 +0000 (10:41 -0800)
Add a selftest to ensure BPF stream functions can now be called
while holding a lock.

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

index f63b378de090aeebaa66b89f7ecdbb91fa2c9cba..6f999ba951a3c2e3f88361b26597537296f7187c 100644 (file)
@@ -42,6 +42,10 @@ int size;
 u64 fault_addr;
 void *arena_ptr;
 
+#define private(name) SEC(".bss." #name) __hidden __attribute__((aligned(8)))
+
+private(STREAM) struct bpf_spin_lock block;
+
 SEC("syscall")
 __success __retval(0)
 int stream_exhaust(void *ctx)
@@ -255,4 +259,32 @@ int stream_print_stack_invalid_id(void *ctx)
        return bpf_stream_print_stack((enum bpf_stream_id)0xbadcafe);
 }
 
+SEC("syscall")
+__arch_x86_64
+__arch_arm64
+__success __retval(0)
+__stdout(_STR)
+__stderr("CPU: {{[0-9]+}} UID: 0 PID: {{[0-9]+}} Comm: {{.*}}")
+__stderr("Call trace:\n"
+"{{([a-zA-Z_][a-zA-Z0-9_]*\\+0x[0-9a-fA-F]+/0x[0-9a-fA-F]+\n"
+"|[ \t]+[^\n]+\n)*}}")
+int stream_print_kfuncs_locked(void *ctx)
+{
+       int ret;
+
+       bpf_spin_lock(&block);
+
+       ret = bpf_stream_printk(BPF_STDOUT, _STR);
+       if (ret)
+               goto out;
+
+       ret = bpf_stream_print_stack(BPF_STDERR);
+
+out:
+       bpf_spin_unlock(&block);
+
+       return ret;
+}
+
+
 char _license[] SEC("license") = "GPL";