]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bpf: Migrate bpf_stream_vprintk() to KF_IMPLICIT_ARGS
authorIhor Solodrai <ihor.solodrai@linux.dev>
Tue, 20 Jan 2026 22:26:35 +0000 (14:26 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 21 Jan 2026 00:22:38 +0000 (16:22 -0800)
Implement bpf_stream_vprintk with an implicit bpf_prog_aux argument,
and remote bpf_stream_vprintk_impl from the kernel.

Update the selftests to use the new API with implicit argument.

bpf_stream_vprintk macro is changed to use the new bpf_stream_vprintk
kfunc, and the extern definition of bpf_stream_vprintk_impl is
replaced accordingly.

Reviewed-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev>
Link: https://lore.kernel.org/r/20260120222638.3976562-11-ihor.solodrai@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/helpers.c
kernel/bpf/stream.c
tools/lib/bpf/bpf_helpers.h
tools/testing/selftests/bpf/progs/stream_fail.c

index f2f974b5fb3b142284791dbba8e80615df05dcda..f8aa1320e2f7ccabe9a521868bfbdd59a3c0421d 100644 (file)
@@ -4533,7 +4533,7 @@ BTF_ID_FLAGS(func, bpf_strncasestr);
 #if defined(CONFIG_BPF_LSM) && defined(CONFIG_CGROUPS)
 BTF_ID_FLAGS(func, bpf_cgroup_read_xattr, KF_RCU)
 #endif
-BTF_ID_FLAGS(func, bpf_stream_vprintk_impl)
+BTF_ID_FLAGS(func, bpf_stream_vprintk, 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 0b6bc3f303350cb0c75037af75973c0d9bd03cc5..24730df55e6962bae41c9e196bf223b47d55f482 100644 (file)
@@ -212,14 +212,13 @@ __bpf_kfunc_start_defs();
  * Avoid using enum bpf_stream_id so that kfunc users don't have to pull in the
  * enum in headers.
  */
-__bpf_kfunc int bpf_stream_vprintk_impl(int stream_id, const char *fmt__str, const void *args,
-                                       u32 len__sz, void *aux__prog)
+__bpf_kfunc int bpf_stream_vprintk(int stream_id, const char *fmt__str, const void *args,
+                                  u32 len__sz, struct bpf_prog_aux *aux)
 {
        struct bpf_bprintf_data data = {
                .get_bin_args   = true,
                .get_buf        = true,
        };
-       struct bpf_prog_aux *aux = aux__prog;
        u32 fmt_size = strlen(fmt__str) + 1;
        struct bpf_stream *stream;
        u32 data_len = len__sz;
index d4e4e388e625894f8ec27b5a6278dbb46e658720..c145da05a67cda16da17ec07a49b4ae4bd36bdea 100644 (file)
@@ -315,8 +315,8 @@ enum libbpf_tristate {
                          ___param, sizeof(___param));          \
 })
 
-extern int bpf_stream_vprintk_impl(int stream_id, const char *fmt__str, const void *args,
-                                  __u32 len__sz, void *aux__prog) __weak __ksym;
+extern int bpf_stream_vprintk(int stream_id, const char *fmt__str, const void *args,
+                             __u32 len__sz) __weak __ksym;
 
 #define bpf_stream_printk(stream_id, fmt, args...)                                     \
 ({                                                                                     \
@@ -328,7 +328,7 @@ extern int bpf_stream_vprintk_impl(int stream_id, const char *fmt__str, const vo
        ___bpf_fill(___param, args);                                                    \
        _Pragma("GCC diagnostic pop")                                                   \
                                                                                        \
-       bpf_stream_vprintk_impl(stream_id, ___fmt, ___param, sizeof(___param), NULL);   \
+       bpf_stream_vprintk(stream_id, ___fmt, ___param, sizeof(___param));              \
 })
 
 /* Use __bpf_printk when bpf_printk call has 3 or fewer fmt args
index 3662515f0107740c147f5a9296b4da06fa508364..8e8249f3521cf3f2880ca4ed88ed56526f0c53d3 100644 (file)
@@ -10,7 +10,7 @@ SEC("syscall")
 __failure __msg("Possibly NULL pointer passed")
 int stream_vprintk_null_arg(void *ctx)
 {
-       bpf_stream_vprintk_impl(BPF_STDOUT, "", NULL, 0, NULL);
+       bpf_stream_vprintk(BPF_STDOUT, "", NULL, 0);
        return 0;
 }
 
@@ -18,7 +18,7 @@ SEC("syscall")
 __failure __msg("R3 type=scalar expected=")
 int stream_vprintk_scalar_arg(void *ctx)
 {
-       bpf_stream_vprintk_impl(BPF_STDOUT, "", (void *)46, 0, NULL);
+       bpf_stream_vprintk(BPF_STDOUT, "", (void *)46, 0);
        return 0;
 }
 
@@ -26,7 +26,7 @@ SEC("syscall")
 __failure __msg("arg#1 doesn't point to a const string")
 int stream_vprintk_string_arg(void *ctx)
 {
-       bpf_stream_vprintk_impl(BPF_STDOUT, ctx, NULL, 0, NULL);
+       bpf_stream_vprintk(BPF_STDOUT, ctx, NULL, 0);
        return 0;
 }