chiark / gitweb /
missing: define kernel internal limit TASK_COMM_LEN in userspace too
authorLennart Poettering <lennart@poettering.net>
Fri, 1 Jun 2018 19:43:43 +0000 (21:43 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
We already use it at two places, and we are about to add one too.
Arbitrary literally hardcoded limits suck.

src/basic/missing.h
src/basic/process-util.c
src/test/test-process-util.c

index 03b954d17c85b49cd38cc63f1b4e5b969ac93680..5b194261d1f431b3073ed66230561a37ca33d4ad 100644 (file)
@@ -1416,4 +1416,11 @@ struct statx {
 #define AT_STATX_DONT_SYNC 0x4000
 #endif
 
+/* The maximum thread/process name length including trailing NUL byte. This mimics the kernel definition of the same
+ * name, which we need in userspace at various places but is not defined in userspace currently, neither under this
+ * name nor any other. */
+#ifndef TASK_COMM_LEN
+#define TASK_COMM_LEN 16
+#endif
+
 #include "missing_syscall.h"
index 1484a001190f82c94f8364ff4dd8e761138b0912..f74eebd585c3e180be57ef2b3f3d919f20ca0098 100644 (file)
@@ -296,7 +296,7 @@ int rename_process(const char name[]) {
          * can use PR_SET_NAME, which sets the thread name for the calling thread. */
         if (prctl(PR_SET_NAME, name) < 0)
                 log_debug_errno(errno, "PR_SET_NAME failed: %m");
-        if (l > 15) /* Linux process names can be 15 chars at max */
+        if (l >= TASK_COMM_LEN) /* Linux process names can be 15 chars at max */
                 truncated = true;
 
         /* Second step, change glibc's ID of the process name. */
index c5931c52247f194e12815ed2267deaaea5cffffa..0d890fa468e65e8719d12506e88d3e2842ff9647 100644 (file)
@@ -375,7 +375,7 @@ static void test_rename_process_now(const char *p, int ret) {
 
         assert_se(get_process_comm(0, &comm) >= 0);
         log_info("comm = <%s>", comm);
-        assert_se(strneq(comm, p, 15));
+        assert_se(strneq(comm, p, TASK_COMM_LEN-1));
 
         assert_se(get_process_cmdline(0, 0, false, &cmdline) >= 0);
         /* we cannot expect cmdline to be renamed properly without privileges */