The comm used in these bpf progs should have the same size with the comm field in struct task_struct defined in linux/sched.h. We'd better define the size as TASK_COMM_LEN to make it more grepable. The bpf progs kernel code can inlcude vmlinux.h generated by BTF CO-RE to use TASK_COMM_LEN, while the userspace code can't include it so TASK_COMM_LEN is specifically defined in the userspace code. In order to fix redefinitions caused by the new included vmlinux.h, some headers are removed and some structs are renamed. Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx> Cc: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> Cc: Arnaldo Carvalho de Melo <arnaldo.melo@xxxxxxxxx> Cc: Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> Cc: Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> Cc: Michal Miroslaw <mirq-linux@xxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> Cc: David Hildenbrand <david@xxxxxxxxxx> Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Cc: Kees Cook <keescook@xxxxxxxxxxxx> Cc: Petr Mladek <pmladek@xxxxxxxx> --- tools/testing/selftests/bpf/prog_tests/ringbuf.c | 9 +++++---- .../testing/selftests/bpf/prog_tests/ringbuf_multi.c | 8 +++++--- .../selftests/bpf/prog_tests/sk_storage_tracing.c | 3 ++- .../testing/selftests/bpf/prog_tests/test_overhead.c | 3 ++- .../selftests/bpf/prog_tests/trampoline_count.c | 3 ++- .../selftests/bpf/progs/test_core_reloc_kernel.c | 11 +++++------ tools/testing/selftests/bpf/progs/test_ringbuf.c | 8 ++++---- .../testing/selftests/bpf/progs/test_ringbuf_multi.c | 8 ++++---- .../selftests/bpf/progs/test_sk_storage_tracing.c | 4 ++-- 9 files changed, 31 insertions(+), 26 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/ringbuf.c b/tools/testing/selftests/bpf/prog_tests/ringbuf.c index 9a80fe8a6427..39e43245db0a 100644 --- a/tools/testing/selftests/bpf/prog_tests/ringbuf.c +++ b/tools/testing/selftests/bpf/prog_tests/ringbuf.c @@ -15,14 +15,15 @@ #include "test_ringbuf.lskel.h" #define EDONE 7777 +#define TASK_COMM_LEN 16 static int duration = 0; -struct sample { +struct sample_ringbuf { int pid; int seq; long value; - char comm[16]; + char comm[TASK_COMM_LEN]; }; static int sample_cnt; @@ -39,7 +40,7 @@ static int atomic_xchg(int *cnt, int val) static int process_sample(void *ctx, void *data, size_t len) { - struct sample *s = data; + struct sample_ringbuf *s = data; atomic_inc(&sample_cnt); @@ -83,7 +84,7 @@ static void *poll_thread(void *input) void test_ringbuf(void) { - const size_t rec_sz = BPF_RINGBUF_HDR_SZ + sizeof(struct sample); + const size_t rec_sz = BPF_RINGBUF_HDR_SZ + sizeof(struct sample_ringbuf); pthread_t thread; long bg_ret = -1; int err, cnt, rb_fd; diff --git a/tools/testing/selftests/bpf/prog_tests/ringbuf_multi.c b/tools/testing/selftests/bpf/prog_tests/ringbuf_multi.c index e945195b24c9..cb592555513f 100644 --- a/tools/testing/selftests/bpf/prog_tests/ringbuf_multi.c +++ b/tools/testing/selftests/bpf/prog_tests/ringbuf_multi.c @@ -4,19 +4,21 @@ #include <sys/epoll.h> #include "test_ringbuf_multi.skel.h" +#define TASK_COMM_LEN 16 + static int duration = 0; -struct sample { +struct sample_ringbuf { int pid; int seq; long value; - char comm[16]; + char comm[TASK_COMM_LEN]; }; static int process_sample(void *ctx, void *data, size_t len) { int ring = (unsigned long)ctx; - struct sample *s = data; + struct sample_ringbuf *s = data; switch (s->seq) { case 0: diff --git a/tools/testing/selftests/bpf/prog_tests/sk_storage_tracing.c b/tools/testing/selftests/bpf/prog_tests/sk_storage_tracing.c index 547ae53cde74..dbbdbf4400d7 100644 --- a/tools/testing/selftests/bpf/prog_tests/sk_storage_tracing.c +++ b/tools/testing/selftests/bpf/prog_tests/sk_storage_tracing.c @@ -11,11 +11,12 @@ #define LO_ADDR6 "::1" #define TEST_COMM "test_progs" +#define TASK_COMM_LEN 16 struct sk_stg { __u32 pid; __u32 last_notclose_state; - char comm[16]; + char comm[TASK_COMM_LEN]; }; static struct test_sk_storage_tracing *skel; diff --git a/tools/testing/selftests/bpf/prog_tests/test_overhead.c b/tools/testing/selftests/bpf/prog_tests/test_overhead.c index 123c68c1917d..7fe60ec12fc4 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_overhead.c +++ b/tools/testing/selftests/bpf/prog_tests/test_overhead.c @@ -6,6 +6,7 @@ #include <test_progs.h> #define MAX_CNT 100000 +#define TASK_COMM_LEN 16 static __u64 time_get_ns(void) { @@ -67,7 +68,7 @@ void test_test_overhead(void) struct bpf_object *obj; struct bpf_link *link; int err, duration = 0; - char comm[16] = {}; + char comm[TASK_COMM_LEN] = {}; if (CHECK_FAIL(prctl(PR_GET_NAME, comm, 0L, 0L, 0L))) return; diff --git a/tools/testing/selftests/bpf/prog_tests/trampoline_count.c b/tools/testing/selftests/bpf/prog_tests/trampoline_count.c index fc146671b20a..da83f7408aa8 100644 --- a/tools/testing/selftests/bpf/prog_tests/trampoline_count.c +++ b/tools/testing/selftests/bpf/prog_tests/trampoline_count.c @@ -5,6 +5,7 @@ #include <test_progs.h> #define MAX_TRAMP_PROGS 38 +#define TASK_COMM_LEN 16 struct inst { struct bpf_object *obj; @@ -51,7 +52,7 @@ void serial_test_trampoline_count(void) int err, i = 0, duration = 0; struct bpf_object *obj; struct bpf_link *link; - char comm[16] = {}; + char comm[TASK_COMM_LEN] = {}; /* attach 'allowed' trampoline programs */ for (i = 0; i < MAX_TRAMP_PROGS; i++) { 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 145028b52ad8..7b1bb73c3501 100644 --- a/tools/testing/selftests/bpf/progs/test_core_reloc_kernel.c +++ b/tools/testing/selftests/bpf/progs/test_core_reloc_kernel.c @@ -1,8 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2019 Facebook -#include <linux/bpf.h> -#include <stdint.h> +#include <vmlinux.h> #include <stdbool.h> #include <bpf/bpf_helpers.h> #include <bpf/bpf_core_read.h> @@ -23,11 +22,11 @@ struct core_reloc_kernel_output { int comm_len; }; -struct task_struct { +struct task_struct_reloc { int pid; int tgid; - char comm[16]; - struct task_struct *group_leader; + char comm[TASK_COMM_LEN]; + struct task_struct_reloc *group_leader; }; #define CORE_READ(dst, src) bpf_core_read(dst, sizeof(*(dst)), src) @@ -35,7 +34,7 @@ struct task_struct { SEC("raw_tracepoint/sys_enter") int test_core_kernel(void *ctx) { - struct task_struct *task = (void *)bpf_get_current_task(); + struct task_struct_reloc *task = (void *)bpf_get_current_task(); struct core_reloc_kernel_output *out = (void *)&data.out; uint64_t pid_tgid = bpf_get_current_pid_tgid(); uint32_t real_tgid = (uint32_t)pid_tgid; diff --git a/tools/testing/selftests/bpf/progs/test_ringbuf.c b/tools/testing/selftests/bpf/progs/test_ringbuf.c index eaa7d9dba0be..45b28965f3a5 100644 --- a/tools/testing/selftests/bpf/progs/test_ringbuf.c +++ b/tools/testing/selftests/bpf/progs/test_ringbuf.c @@ -1,16 +1,16 @@ // SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2020 Facebook -#include <linux/bpf.h> +#include <vmlinux.h> #include <bpf/bpf_helpers.h> char _license[] SEC("license") = "GPL"; -struct sample { +struct sample_ringbuf { int pid; int seq; long value; - char comm[16]; + char comm[TASK_COMM_LEN]; }; struct { @@ -39,7 +39,7 @@ SEC("fentry/__x64_sys_getpgid") int test_ringbuf(void *ctx) { int cur_pid = bpf_get_current_pid_tgid() >> 32; - struct sample *sample; + struct sample_ringbuf *sample; int zero = 0; if (cur_pid != pid) diff --git a/tools/testing/selftests/bpf/progs/test_ringbuf_multi.c b/tools/testing/selftests/bpf/progs/test_ringbuf_multi.c index 197b86546dca..7c9db148f168 100644 --- a/tools/testing/selftests/bpf/progs/test_ringbuf_multi.c +++ b/tools/testing/selftests/bpf/progs/test_ringbuf_multi.c @@ -1,16 +1,16 @@ // SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2020 Facebook -#include <linux/bpf.h> +#include <vmlinux.h> #include <bpf/bpf_helpers.h> char _license[] SEC("license") = "GPL"; -struct sample { +struct sample_ringbuf { int pid; int seq; long value; - char comm[16]; + char comm[TASK_COMM_LEN]; }; struct ringbuf_map { @@ -55,7 +55,7 @@ SEC("tp/syscalls/sys_enter_getpgid") int test_ringbuf(void *ctx) { int cur_pid = bpf_get_current_pid_tgid() >> 32; - struct sample *sample; + struct sample_ringbuf *sample; void *rb; int zero = 0; diff --git a/tools/testing/selftests/bpf/progs/test_sk_storage_tracing.c b/tools/testing/selftests/bpf/progs/test_sk_storage_tracing.c index 6dc1f28fc4b6..cc41a09e3130 100644 --- a/tools/testing/selftests/bpf/progs/test_sk_storage_tracing.c +++ b/tools/testing/selftests/bpf/progs/test_sk_storage_tracing.c @@ -9,7 +9,7 @@ struct sk_stg { __u32 pid; __u32 last_notclose_state; - char comm[16]; + char comm[TASK_COMM_LEN]; }; struct { @@ -27,7 +27,7 @@ struct { __type(value, int); } del_sk_stg_map SEC(".maps"); -char task_comm[16] = ""; +char task_comm[TASK_COMM_LEN] = ""; SEC("tp_btf/inet_sock_set_state") int BPF_PROG(trace_inet_sock_set_state, struct sock *sk, int oldstate, -- 2.17.1