1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
From: Craig Small <csmall@users.sourceforge.net>
Date: Fri, 27 Jan 2012 01:02:48 +0000 (+1100)
Subject: Set COMM_LEN to 18 to include brackets in name
X-Git-Url: http://psmisc.git.sourceforge.net/git/gitweb.cgi?p=psmisc%2Fpsmisc;a=commitdiff_plain;h=340f81524cb097d814fcf344a3743de17f988e3d
Set COMM_LEN to 18 to include brackets in name
Also use strncpy in case the command names grow.
---
diff --git a/src/comm.h b/src/comm.h
index 956383d..2b780b0 100644
--- a/src/comm.h
+++ b/src/comm.h
@@ -1,18 +1,37 @@
-/* comm.h - command name length definition */
-
-/* Copyright 1995 Werner Almesberger. See file COPYING for details. */
-
+/*
+ * comm.h - command name length definition
+ *
+ * Copyright 1995 Werner Almesberger
+ * Copyright 2012 Craig Small <csmall@enc.com.au>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
#ifndef COMM_H
#define COMM_H
-#if 0 /* broken in 1.3.xx */
-#include <linux/sched.h>
-#define COMM_LEN sizeof(dummy.comm)
-extern struct task_struct dummy;
-#else
-#define COMM_LEN 16 /* synchronize with size of comm in struct task_struct in
- /usr/include/linux/sched.h */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
#endif
+/*
+ * COMM_LEN should be the same size as TASK_COMM_LEN in the Linux source
+ * at include/linux/sched.h
+ * However, that doesn't include the brackets that may be in the field.
+ */
+#define COMM_LEN 18
+
#endif
diff --git a/src/pstree.c b/src/pstree.c
index 452f823..3129f76 100644
--- a/src/pstree.c
+++ b/src/pstree.c
@@ -264,7 +264,7 @@ static PROC *new_proc(const char *comm, pid_t pid, uid_t uid)
perror("malloc");
exit(1);
}
- strcpy(new->comm, comm);
+ strncpy(new->comm, comm, COMM_LEN);
new->pid = pid;
new->uid = uid;
new->flags = 0;
@@ -352,7 +352,7 @@ add_proc(const char *comm, pid_t pid, pid_t ppid, uid_t uid,
this = new_proc(comm, pid, uid);
#endif /*WITH_SELINUX */
else {
- strcpy(this->comm, comm);
+ strncpy(this->comm, comm, COMM_LEN);
this->uid = uid;
}
if (args)
|