[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20211219030258.14738-1-laoar.shao@gmail.com>
Date: Sun, 19 Dec 2021 03:02:58 +0000
From: Yafang Shao <laoar.shao@...il.com>
To: akpm@...ux-foundation.org, rostedt@...dmis.org,
keescook@...omium.org, pmladek@...e.com, david@...hat.com,
arnaldo.melo@...il.com, andrii.nakryiko@...il.com
Cc: linux-mm@...ck.org, bpf@...r.kernel.org,
linux-perf-users@...r.kernel.org, linux-fsdevel@...r.kernel.org,
linux-kernel@...r.kernel.org, Yafang Shao <laoar.shao@...il.com>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
Alexei Starovoitov <alexei.starovoitov@...il.com>,
Michal Miroslaw <mirq-linux@...e.qmqm.pl>,
Peter Zijlstra <peterz@...radead.org>,
Matthew Wilcox <willy@...radead.org>,
Al Viro <viro@...iv.linux.org.uk>
Subject: [PATCH -mm v3] replace old hard-coded 16 with TASK_COMM_LEN_16
This is the followup work of task comm cleanups[1].
A new macro TASK_COMM_LEN_16 is introduced to replace old hard-coded 16
in various files, in order to make them grepable. The difference between
TASK_COMM_LEN and TASK_COMM_LEN_16 is:
- TASK_COMM_LEN
The size should be same with the TASK_COMM_LEN defined in linux/sched.h.
- TASK_COMM_LEN_16
The size must be a fixed-size 16 no matter what TASK_COMM_LEN is. The
usage around it is exposed to userspace, so this macro is defined in
the UAPI header.
[1]. https://lore.kernel.org/lkml/20211120112738.45980-1-laoar.shao@gmail.com/
Signed-off-by: Yafang Shao <laoar.shao@...il.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
Cc: Arnaldo Carvalho de Melo <arnaldo.melo@...il.com>
Cc: Alexei Starovoitov <alexei.starovoitov@...il.com>
Cc: Andrii Nakryiko <andrii.nakryiko@...il.com>
Cc: Michal Miroslaw <mirq-linux@...e.qmqm.pl>
Cc: Peter Zijlstra <peterz@...radead.org>
Cc: Steven Rostedt <rostedt@...dmis.org>
Cc: Matthew Wilcox <willy@...radead.org>
Cc: David Hildenbrand <david@...hat.com>
Cc: Al Viro <viro@...iv.linux.org.uk>
Cc: Kees Cook <keescook@...omium.org>
Cc: Petr Mladek <pmladek@...e.com>
---
Changes since v2:
- make TASK_COMM_LEN_16 a single instance (Michal)
- merge all the patches into a single patch
Changes since v1:
- use TASK_COMM_LEN_16 instead of TASK_COMM_LEN in patch #3 (Steven)
- avoid changing samples/bpf and bpf/progs (Alexei)
---
include/linux/elfcore-compat.h | 8 ++------
include/linux/elfcore.h | 9 ++-------
include/uapi/linux/cn_proc.h | 3 ++-
include/uapi/linux/sched.h | 7 +++++++
tools/include/uapi/linux/sched.h | 7 +++++++
tools/perf/tests/evsel-tp-sched.c | 7 ++++---
6 files changed, 24 insertions(+), 17 deletions(-)
diff --git a/include/linux/elfcore-compat.h b/include/linux/elfcore-compat.h
index 54feb64e9b5d..319daa69bb23 100644
--- a/include/linux/elfcore-compat.h
+++ b/include/linux/elfcore-compat.h
@@ -2,6 +2,7 @@
#ifndef _LINUX_ELFCORE_COMPAT_H
#define _LINUX_ELFCORE_COMPAT_H
+#include <uapi/linux/sched.h>
#include <linux/elf.h>
#include <linux/elfcore.h>
#include <linux/compat.h>
@@ -43,12 +44,7 @@ struct compat_elf_prpsinfo
__compat_uid_t pr_uid;
__compat_gid_t pr_gid;
compat_pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
- /*
- * The hard-coded 16 is derived from TASK_COMM_LEN, but it can't be
- * changed as it is exposed to userspace. We'd better make it hard-coded
- * here.
- */
- char pr_fname[16];
+ char pr_fname[TASK_COMM_LEN_16];
char pr_psargs[ELF_PRARGSZ];
};
diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h
index 746e081879a5..d3bb4bd3c985 100644
--- a/include/linux/elfcore.h
+++ b/include/linux/elfcore.h
@@ -65,13 +65,8 @@ struct elf_prpsinfo
__kernel_gid_t pr_gid;
pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
/* Lots missing */
- /*
- * The hard-coded 16 is derived from TASK_COMM_LEN, but it can't be
- * changed as it is exposed to userspace. We'd better make it hard-coded
- * here.
- */
- char pr_fname[16]; /* filename of executable */
- char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
+ char pr_fname[TASK_COMM_LEN_16]; /* filename of executable */
+ char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
};
static inline void elf_core_copy_regs(elf_gregset_t *elfregs, struct pt_regs *regs)
diff --git a/include/uapi/linux/cn_proc.h b/include/uapi/linux/cn_proc.h
index db210625cee8..88e645230ea5 100644
--- a/include/uapi/linux/cn_proc.h
+++ b/include/uapi/linux/cn_proc.h
@@ -20,6 +20,7 @@
#define _UAPICN_PROC_H
#include <linux/types.h>
+#include "sched.h"
/*
* Userspace sends this enum to register with the kernel that it is listening
@@ -110,7 +111,7 @@ struct proc_event {
struct comm_proc_event {
__kernel_pid_t process_pid;
__kernel_pid_t process_tgid;
- char comm[16];
+ char comm[TASK_COMM_LEN_16];
} comm;
struct coredump_proc_event {
diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h
index 3bac0a8ceab2..490fd5d48378 100644
--- a/include/uapi/linux/sched.h
+++ b/include/uapi/linux/sched.h
@@ -145,4 +145,11 @@ struct clone_args {
SCHED_FLAG_KEEP_ALL | \
SCHED_FLAG_UTIL_CLAMP)
+/*
+ * For the one which is exposed to userspace and thus can't be changed.
+ */
+enum {
+ TASK_COMM_LEN_16 = 16,
+};
+
#endif /* _UAPI_LINUX_SCHED_H */
diff --git a/tools/include/uapi/linux/sched.h b/tools/include/uapi/linux/sched.h
index 3bac0a8ceab2..490fd5d48378 100644
--- a/tools/include/uapi/linux/sched.h
+++ b/tools/include/uapi/linux/sched.h
@@ -145,4 +145,11 @@ struct clone_args {
SCHED_FLAG_KEEP_ALL | \
SCHED_FLAG_UTIL_CLAMP)
+/*
+ * For the one which is exposed to userspace and thus can't be changed.
+ */
+enum {
+ TASK_COMM_LEN_16 = 16,
+};
+
#endif /* _UAPI_LINUX_SCHED_H */
diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c
index cf4da3d748c2..0b74bf2ca1ce 100644
--- a/tools/perf/tests/evsel-tp-sched.c
+++ b/tools/perf/tests/evsel-tp-sched.c
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
#include <linux/err.h>
+#include <linux/sched.h>
#include <traceevent/event-parse.h>
#include "evsel.h"
#include "tests.h"
@@ -43,7 +44,7 @@ static int test__perf_evsel__tp_sched_test(struct test_suite *test __maybe_unuse
return -1;
}
- if (evsel__test_field(evsel, "prev_comm", 16, false))
+ if (evsel__test_field(evsel, "prev_comm", TASK_COMM_LEN_16, false))
ret = -1;
if (evsel__test_field(evsel, "prev_pid", 4, true))
@@ -55,7 +56,7 @@ static int test__perf_evsel__tp_sched_test(struct test_suite *test __maybe_unuse
if (evsel__test_field(evsel, "prev_state", sizeof(long), true))
ret = -1;
- if (evsel__test_field(evsel, "next_comm", 16, false))
+ if (evsel__test_field(evsel, "next_comm", TASK_COMM_LEN_16, false))
ret = -1;
if (evsel__test_field(evsel, "next_pid", 4, true))
@@ -73,7 +74,7 @@ static int test__perf_evsel__tp_sched_test(struct test_suite *test __maybe_unuse
return -1;
}
- if (evsel__test_field(evsel, "comm", 16, false))
+ if (evsel__test_field(evsel, "comm", TASK_COMM_LEN_16, false))
ret = -1;
if (evsel__test_field(evsel, "pid", 4, true))
--
2.17.1
Powered by blists - more mailing lists