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 <[email protected]>
Reviewed-by: Emil Tsalapatis <[email protected]> > --- > .../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";

