On Thu, Nov 21, 2019 at 9:59 AM Andrii Nakryiko <andriin@xxxxxx> wrote: > > test_core_reloc_kernel.c selftest is the only CO-RE test that reads and > returns for validation calling thread's information (pid, tgid, comm). Thus it > has to make sure that only test_prog's invocations are honored. > > Fixes: df36e621418b ("selftests/bpf: add CO-RE relocs testing setup") > Reported-by: Alexei Starovoitov <ast@xxxxxxxxxx> > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> > --- > .../selftests/bpf/prog_tests/core_reloc.c | 16 +++++++++++----- > .../selftests/bpf/progs/test_core_reloc_kernel.c | 4 ++++ > 2 files changed, 15 insertions(+), 5 deletions(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/core_reloc.c b/tools/testing/selftests/bpf/prog_tests/core_reloc.c > index ec9e2fdd6b89..05fe85281ff7 100644 > --- a/tools/testing/selftests/bpf/prog_tests/core_reloc.c > +++ b/tools/testing/selftests/bpf/prog_tests/core_reloc.c > @@ -2,6 +2,7 @@ > #include <test_progs.h> > #include "progs/core_reloc_types.h" > #include <sys/mman.h> > +#include <sys/syscall.h> > > #define STRUCT_TO_CHAR_PTR(struct_name) (const char *)&(struct struct_name) > > @@ -452,6 +453,7 @@ static struct core_reloc_test_case test_cases[] = { > struct data { > char in[256]; > char out[256]; > + uint64_t my_pid_tgid; > }; > > static size_t roundup_page(size_t sz) > @@ -471,9 +473,12 @@ void test_core_reloc(void) > struct bpf_map *data_map; > struct bpf_program *prog; > struct bpf_object *obj; > + uint64_t my_pid_tgid; > struct data *data; > void *mmap_data = NULL; > > + my_pid_tgid = getpid() | ((uint64_t)syscall(SYS_gettid) << 32); > + > for (i = 0; i < ARRAY_SIZE(test_cases); i++) { > test_case = &test_cases[i]; > if (!test__start_subtest(test_case->case_name)) > @@ -517,11 +522,6 @@ void test_core_reloc(void) > goto cleanup; > } > > - link = bpf_program__attach_raw_tracepoint(prog, tp_name); > - if (CHECK(IS_ERR(link), "attach_raw_tp", "err %ld\n", > - PTR_ERR(link))) > - goto cleanup; > - > data_map = bpf_object__find_map_by_name(obj, "test_cor.bss"); > if (CHECK(!data_map, "find_data_map", "data map not found\n")) > goto cleanup; > @@ -537,6 +537,12 @@ void test_core_reloc(void) > > memset(mmap_data, 0, sizeof(*data)); > memcpy(data->in, test_case->input, test_case->input_len); > + data->my_pid_tgid = my_pid_tgid; > + > + link = bpf_program__attach_raw_tracepoint(prog, tp_name); > + if (CHECK(IS_ERR(link), "attach_raw_tp", "err %ld\n", > + PTR_ERR(link))) > + goto cleanup; > > /* trigger test run */ > usleep(1); > diff --git a/tools/testing/selftests/bpf/progs/test_core_reloc_kernel.c b/tools/testing/selftests/bpf/progs/test_core_reloc_kernel.c > index a4b5e0562ed5..d2fe8f337846 100644 > --- a/tools/testing/selftests/bpf/progs/test_core_reloc_kernel.c > +++ b/tools/testing/selftests/bpf/progs/test_core_reloc_kernel.c > @@ -11,6 +11,7 @@ char _license[] SEC("license") = "GPL"; > static volatile struct data { > char in[256]; > char out[256]; > + uint64_t my_pid_tgid; > } data; There was a conflict here, since global data support patchset was already applied. I resolved it and applied to bpf-next. Thanks