From: Florian Forster Date: Mon, 8 Sep 2014 15:07:39 +0000 (+0200) Subject: processes plugin: Limit the buffer size used for command line matching. X-Git-Tag: collectd-5.5.0~205 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=c0a9b7b38edf881e134f602b62990518a79bf191;p=collectd.git processes plugin: Limit the buffer size used for command line matching. ARG_MAX is quite big on many systems, for example >100 kByte on GNU/Linux. This is a problem for systems with tight memory constraints, for example embedded devices. This patch uses at most 4 kByte for this, which out to be enough for the vast majority of users. Users with specific requirements can compile with "CMDLINE_BUFFER_SIZE=${LOTS}" in their CPPFLAGS to override this default. Fixes: #652 --- diff --git a/src/processes.c b/src/processes.c index 5601d290..aa47f332 100644 --- a/src/processes.c +++ b/src/processes.c @@ -128,8 +128,12 @@ # include #endif -#ifndef ARG_MAX -# define ARG_MAX 4096 +#ifndef CMDLINE_BUFFER_SIZE +# if defined(ARG_MAX) && (ARG_MAX < 4096) +# define CMDLINE_BUFFER_SIZE ARG_MAX +# else +# define CMDLINE_BUFFER_SIZE 4096 +# endif #endif typedef struct procstat_entry_s @@ -1686,7 +1690,7 @@ static int ps_read (void) DIR *proc; int pid; - char cmdline[ARG_MAX]; + char cmdline[CMDLINE_BUFFER_SIZE]; int status; procstat_t ps; @@ -1824,7 +1828,7 @@ static int ps_read (void) * filter out threads (duplicate PID entries). */ if ((proc_ptr == NULL) || (proc_ptr->ki_pid != procs[i].ki_pid)) { - char cmdline[ARG_MAX] = ""; + char cmdline[CMDLINE_BUFFER_SIZE] = ""; _Bool have_cmdline = 0; proc_ptr = &(procs[i]);