Re: [PATCH bpf-next v10 8/9] selftests/bpf: Test verifier log for global percpu data
From: Emil Tsalapatis
Date: Fri Jul 17 2026 - 18:50:53 EST
On Wed Jul 15, 2026 at 11:32 AM EDT, Leon Hwang wrote:
> Add two tests to verify the verifier log
> "R%d points to percpu_array map which cannot be used as const string\n".
>
> Signed-off-by: Leon Hwang <leon.hwang@xxxxxxxxx>
Reviewed-by: Emil Tsalapatis <emil@xxxxxxxxxxxxxxx>
> ---
> .../bpf/prog_tests/global_data_init.c | 6 +++++
> .../bpf/progs/test_global_percpu_data.c | 23 +++++++++++++++++++
> 2 files changed, 29 insertions(+)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/global_data_init.c b/tools/testing/selftests/bpf/prog_tests/global_data_init.c
> index d4405646847a..598b7dde6581 100644
> --- a/tools/testing/selftests/bpf/prog_tests/global_data_init.c
> +++ b/tools/testing/selftests/bpf/prog_tests/global_data_init.c
> @@ -278,6 +278,11 @@ static void test_global_percpu_data_rdonly_direct_write(void)
> close(map_fd);
> }
>
> +static void test_global_percpu_data_verifier_log(void)
> +{
> + RUN_TESTS(test_global_percpu_data);
> +}
> +
> void test_global_percpu_data(void)
> {
> if (!feat_supported(NULL, FEAT_PERCPU_DATA)) {
> @@ -293,4 +298,5 @@ void test_global_percpu_data(void)
> test_global_percpu_data_rdonly_direct_read();
> if (test__start_subtest("rdonly_direct_write"))
> test_global_percpu_data_rdonly_direct_write();
> + test_global_percpu_data_verifier_log();
> }
> diff --git a/tools/testing/selftests/bpf/progs/test_global_percpu_data.c b/tools/testing/selftests/bpf/progs/test_global_percpu_data.c
> index 54380dfb11a5..b852a0b07508 100644
> --- a/tools/testing/selftests/bpf/progs/test_global_percpu_data.c
> +++ b/tools/testing/selftests/bpf/progs/test_global_percpu_data.c
> @@ -30,4 +30,27 @@ int update_percpu_data(void *ctx)
> return 0;
> }
>
> +static const char fmt[] SEC(".percpu.fmt") = "data %d\n";
> +
> +SEC("?kprobe")
> +__failure __msg("R{{[0-9]+}} points to percpu_array map which cannot be used as const string")
> +int verifier_strncmp(void *ctx)
> +{
> + return bpf_strncmp("test", 5, fmt);
> +}
> +
> +SEC("?kprobe")
> +__failure __msg("R{{[0-9]+}} points to percpu_array map which cannot be used as const string")
> +int verifier_snprintf(void *ctx)
> +{
> + u64 args[] = { data };
> + char buf[128];
> + int len;
> +
> + len = bpf_snprintf(buf, sizeof(buf), fmt, args, sizeof(args));
> + if (len > 0)
> + bpf_printk("snprintf: %s\n", buf);
> + return 0;
> +}
> +
> char _license[] SEC("license") = "GPL";