diff options
author | Sven Nierlein <sven@nierlein.org> | 2019-02-19 21:42:02 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-19 21:42:02 +0100 |
commit | 931ed78b5dc062fff33652d87406f1547da5ddbe (patch) | |
tree | 9caf8031a15d7f046e77693c4002bf750bfef3d3 /plugins/popen.c | |
parent | 2813d08b92d08ba56ec22da00a23fff3a22ed74b (diff) | |
parent | 7cafb0e84550035fe671662c293122be975065ca (diff) | |
download | monitoring-plugins-931ed78.tar.gz |
Merge pull request #1583 from sni/fix_check_by_ssh_timeout_child_leak
check_by_ssh: fix child process leak on timeouts
Diffstat (limited to 'plugins/popen.c')
-rw-r--r-- | plugins/popen.c | 29 |
1 files changed, 0 insertions, 29 deletions
diff --git a/plugins/popen.c b/plugins/popen.c index 592263fd..116d168d 100644 --- a/plugins/popen.c +++ b/plugins/popen.c | |||
@@ -78,7 +78,6 @@ RETSIGTYPE popen_timeout_alarm_handler (int); | |||
78 | 78 | ||
79 | #define min(a,b) ((a) < (b) ? (a) : (b)) | 79 | #define min(a,b) ((a) < (b) ? (a) : (b)) |
80 | #define max(a,b) ((a) > (b) ? (a) : (b)) | 80 | #define max(a,b) ((a) > (b) ? (a) : (b)) |
81 | int open_max (void); /* {Prog openmax} */ | ||
82 | static void err_sys (const char *, ...) __attribute__((noreturn,format(printf, 1, 2))); | 81 | static void err_sys (const char *, ...) __attribute__((noreturn,format(printf, 1, 2))); |
83 | char *rtrim (char *, const char *); | 82 | char *rtrim (char *, const char *); |
84 | 83 | ||
@@ -86,7 +85,6 @@ char *pname = NULL; /* caller can set this from argv[0] */ | |||
86 | 85 | ||
87 | /*int *childerr = NULL;*//* ptr to array allocated at run-time */ | 86 | /*int *childerr = NULL;*//* ptr to array allocated at run-time */ |
88 | /*extern pid_t *childpid = NULL; *//* ptr to array allocated at run-time */ | 87 | /*extern pid_t *childpid = NULL; *//* ptr to array allocated at run-time */ |
89 | static int maxfd; /* from our open_max(), {Prog openmax} */ | ||
90 | 88 | ||
91 | #ifdef REDHAT_SPOPEN_ERROR | 89 | #ifdef REDHAT_SPOPEN_ERROR |
92 | static volatile int childtermd = 0; | 90 | static volatile int childtermd = 0; |
@@ -187,13 +185,11 @@ spopen (const char *cmdstring) | |||
187 | argv[i] = NULL; | 185 | argv[i] = NULL; |
188 | 186 | ||
189 | if (childpid == NULL) { /* first time through */ | 187 | if (childpid == NULL) { /* first time through */ |
190 | maxfd = open_max (); /* allocate zeroed out array for child pids */ | ||
191 | if ((childpid = calloc ((size_t)maxfd, sizeof (pid_t))) == NULL) | 188 | if ((childpid = calloc ((size_t)maxfd, sizeof (pid_t))) == NULL) |
192 | return (NULL); | 189 | return (NULL); |
193 | } | 190 | } |
194 | 191 | ||
195 | if (child_stderr_array == NULL) { /* first time through */ | 192 | if (child_stderr_array == NULL) { /* first time through */ |
196 | maxfd = open_max (); /* allocate zeroed out array for child pids */ | ||
197 | if ((child_stderr_array = calloc ((size_t)maxfd, sizeof (int))) == NULL) | 193 | if ((child_stderr_array = calloc ((size_t)maxfd, sizeof (int))) == NULL) |
198 | return (NULL); | 194 | return (NULL); |
199 | } | 195 | } |
@@ -273,15 +269,6 @@ spclose (FILE * fp) | |||
273 | return (1); | 269 | return (1); |
274 | } | 270 | } |
275 | 271 | ||
276 | #ifdef OPEN_MAX | ||
277 | static int openmax = OPEN_MAX; | ||
278 | #else | ||
279 | static int openmax = 0; | ||
280 | #endif | ||
281 | |||
282 | #define OPEN_MAX_GUESS 256 /* if OPEN_MAX is indeterminate */ | ||
283 | /* no guarantee this is adequate */ | ||
284 | |||
285 | #ifdef REDHAT_SPOPEN_ERROR | 272 | #ifdef REDHAT_SPOPEN_ERROR |
286 | RETSIGTYPE | 273 | RETSIGTYPE |
287 | popen_sigchld_handler (int signo) | 274 | popen_sigchld_handler (int signo) |
@@ -311,22 +298,6 @@ popen_timeout_alarm_handler (int signo) | |||
311 | } | 298 | } |
312 | 299 | ||
313 | 300 | ||
314 | int | ||
315 | open_max (void) | ||
316 | { | ||
317 | if (openmax == 0) { /* first time through */ | ||
318 | errno = 0; | ||
319 | if ((openmax = sysconf (_SC_OPEN_MAX)) < 0) { | ||
320 | if (errno == 0) | ||
321 | openmax = OPEN_MAX_GUESS; /* it's indeterminate */ | ||
322 | else | ||
323 | err_sys (_("sysconf error for _SC_OPEN_MAX")); | ||
324 | } | ||
325 | } | ||
326 | return (openmax); | ||
327 | } | ||
328 | |||
329 | |||
330 | /* Fatal error related to a system call. | 301 | /* Fatal error related to a system call. |
331 | * Print a message and die. */ | 302 | * Print a message and die. */ |
332 | 303 | ||