From: Paul Chaignon <paul.chaignon@gmail.com>
To: Yihan Ding <dingyihan@uniontech.com>
Cc: bpf@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net,
andrii@kernel.org, shuah@kernel.org,
linux-kernel@vger.kernel.org, alan.maguire@oracle.com,
kernel@uniontech.com
Subject: Re: [PATCH bpf v2 2/2] selftests/bpf: cover UTF-8 trace_printk output
Date: Wed, 15 Apr 2026 12:46:42 +0200 [thread overview]
Message-ID: <ad9skjpRx5TB6DBr@mail.gmail.com> (raw)
In-Reply-To: <20260415032126.1096299-3-dingyihan@uniontech.com>
On Wed, Apr 15, 2026 at 11:21:26AM +0800, Yihan Ding wrote:
> Extend trace_printk coverage to verify that UTF-8 literal text is
> emitted successfully and that non-ASCII bytes are still rejected once
> parsing is inside a '%' format sequence.
>
> Suggested-by: Alan Maguire <alan.maguire@oracle.com>
> Signed-off-by: Yihan Ding <dingyihan@uniontech.com>
> ---
> .../selftests/bpf/prog_tests/trace_printk.c | 26 +++++++++++++++----
> .../selftests/bpf/progs/trace_printk.c | 9 +++++++
> 2 files changed, 30 insertions(+), 5 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/trace_printk.c b/tools/testing/selftests/bpf/prog_tests/trace_printk.c
> index e56e88596d64..40499f01d228 100644
> --- a/tools/testing/selftests/bpf/prog_tests/trace_printk.c
> +++ b/tools/testing/selftests/bpf/prog_tests/trace_printk.c
> @@ -6,18 +6,21 @@
> #include "trace_printk.lskel.h"
>
> #define SEARCHMSG "testing,testing"
> +#define SEARCHMSG_UTF8 "中文,测试"
>
> static void trace_pipe_cb(const char *str, void *data)
> {
> if (strstr(str, SEARCHMSG) != NULL)
> - (*(int *)data)++;
> + ((int *)data)[0]++;
> + if (strstr(str, SEARCHMSG_UTF8) != NULL)
> + ((int *)data)[1]++;
> }
>
> void serial_test_trace_printk(void)
> {
> struct trace_printk_lskel__bss *bss;
> struct trace_printk_lskel *skel;
> - int err = 0, found = 0;
> + int err = 0, found[2] = {};
>
> skel = trace_printk_lskel__open();
> if (!ASSERT_OK_PTR(skel, "trace_printk__open"))
> @@ -46,11 +49,24 @@ void serial_test_trace_printk(void)
> if (!ASSERT_GT(bss->trace_printk_ret, 0, "bss->trace_printk_ret"))
> goto cleanup;
>
> - /* verify our search string is in the trace buffer */
> - ASSERT_OK(read_trace_pipe_iter(trace_pipe_cb, &found, 1000),
> + if (!ASSERT_GT(bss->trace_printk_utf8_ran, 0, "bss->trace_printk_utf8_ran"))
> + goto cleanup;
> +
> + if (!ASSERT_GT(bss->trace_printk_utf8_ret, 0, "bss->trace_printk_utf8_ret"))
> + goto cleanup;
> +
> + if (!ASSERT_LT(bss->trace_printk_utf8_spec_ret, 0,
> + "bss->trace_printk_utf8_spec_ret"))
> + goto cleanup;
> +
> + /* verify our search strings are in the trace buffer */
> + ASSERT_OK(read_trace_pipe_iter(trace_pipe_cb, found, 1000),
> "read_trace_pipe_iter");
>
> - if (!ASSERT_EQ(found, bss->trace_printk_ran, "found"))
> + if (!ASSERT_EQ(found[0], bss->trace_printk_ran, "found"))
> + goto cleanup;
> +
> + if (!ASSERT_EQ(found[1], bss->trace_printk_utf8_ran, "found_utf8"))
> goto cleanup;
>
> cleanup:
> diff --git a/tools/testing/selftests/bpf/progs/trace_printk.c b/tools/testing/selftests/bpf/progs/trace_printk.c
> index 6695478c2b25..62153d8c5eba 100644
> --- a/tools/testing/selftests/bpf/progs/trace_printk.c
> +++ b/tools/testing/selftests/bpf/progs/trace_printk.c
> @@ -10,13 +10,22 @@ char _license[] SEC("license") = "GPL";
>
> int trace_printk_ret = 0;
> int trace_printk_ran = 0;
> +int trace_printk_utf8_spec_ret = 0;
> +int trace_printk_utf8_ret = 0;
> +int trace_printk_utf8_ran = 0;
>
> const char fmt[] = "Testing,testing %d\n";
> +static const char utf8_fmt[] = "中文,测试 %d\n";
> +static const char utf8_spec_fmt[] = "%中文\n";
What's the purpose of the second string here?
>
> SEC("fentry/" SYS_PREFIX "sys_nanosleep")
> int sys_enter(void *ctx)
> {
> trace_printk_ret = bpf_trace_printk(fmt, sizeof(fmt),
> ++trace_printk_ran);
> + trace_printk_utf8_ret = bpf_trace_printk(utf8_fmt, sizeof(utf8_fmt),
> + ++trace_printk_utf8_ran);
> + trace_printk_utf8_spec_ret = bpf_trace_printk(utf8_spec_fmt,
> + sizeof(utf8_spec_fmt));
> return 0;
> }
> --
> 2.20.1
>
prev parent reply other threads:[~2026-04-15 10:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-15 3:21 [PATCH bpf v2 0/2] bpf: allow UTF-8 literals in bpf_bprintf_prepare() Yihan Ding
2026-04-15 3:21 ` [PATCH bpf v2 1/2] " Yihan Ding
2026-04-15 3:48 ` sashiko-bot
2026-04-15 10:44 ` Paul Chaignon
2026-04-15 10:49 ` Paul Chaignon
2026-04-15 3:21 ` [PATCH bpf v2 2/2] selftests/bpf: cover UTF-8 trace_printk output Yihan Ding
2026-04-15 10:46 ` Paul Chaignon [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ad9skjpRx5TB6DBr@mail.gmail.com \
--to=paul.chaignon@gmail.com \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=dingyihan@uniontech.com \
--cc=kernel@uniontech.com \
--cc=linux-kernel@vger.kernel.org \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.