@@ -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];
};
@@ -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)
@@ -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 {
@@ -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 */
@@ -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 */
@@ -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))
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@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> --- 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(-)