Fix: get_cmdline_by_pid path length assumes a max pid of 65535
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 23 Jun 2015 21:27:31 +0000 (23:27 +0200)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 23 Jun 2015 21:36:21 +0000 (23:36 +0200)
PROC(5) mentions that "On 64-bit systems, pid_max can be set to any
value up to 2^22 (PID_MAX_LIMIT, approximately 4 million)."

We use 32 bits for simplicity's sake.

Reported-by: Zhenyu Ren <zhenyu.ren@aliyun.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/lttng/constant.h
src/bin/lttng/commands/list.c

index ed3ebe073b25c973495d059372a8a32e8ce091d9..10f1bf694503fc5e42d9a20632fb5c5c9c2fdce7 100644 (file)
 /*
  * Event symbol length. Copied from LTTng kernel ABI.
  */
-#define LTTNG_SYMBOL_NAME_LEN             256
+#define LTTNG_SYMBOL_NAME_LEN                  256
+
+/*
+ * PROC(5) mentions that PID_MAX_LIMIT may not exceed 2^22 on 64-bit HW.
+ * We prefer to use 32-bits for simplicity's sake.
+ */
+#define LTTNG_MAX_PID                          INT32_MAX
+#define LTTNG_MAX_PID_STR                      "2147483647"
 
 #endif /* LTTNG_CONSTANT_H */
index 87c99dde443d4d53c241954b21201f3bd2c8dcec..d7970a8b9ab2e0a2553ef5475d66fbc3ebd7d460 100644 (file)
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <assert.h>
 
+#include <lttng/constant.h>
 #include "../command.h"
 
 static int opt_userspace;
@@ -107,7 +108,8 @@ static char *get_cmdline_by_pid(pid_t pid)
        int ret;
        FILE *fp;
        char *cmdline = NULL;
-       char path[20];  /* Can't go bigger than /proc/65535/cmdline */
+       /* Can't go bigger than /proc/LTTNG_MAX_PID/cmdline */
+       char path[sizeof("/proc//cmdline") + sizeof(LTTNG_MAX_PID_STR) - 1];
 
        snprintf(path, sizeof(path), "/proc/%d/cmdline", pid);
        fp = fopen(path, "r");
This page took 0.026767 seconds and 4 git commands to generate.