lkml.org 
[lkml]   [2021]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH -mm 5/5] bpf/progs: replace hard-coded 16 with TASK_COMM_LEN
Date
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@gmail.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Michal Miroslaw <mirq-linux@rere.qmqm.pl>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Kees Cook <keescook@chromium.org>
Cc: Petr Mladek <pmladek@suse.com>
---
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
\
 
 \ /
  Last update: 2021-12-04 10:54    [W:0.084 / U:5.788 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site