small bug in popen_timeout_alarm_handler() in popen.c

Jason Crawford jasonrcrawford at gmail.com
Thu Feb 16 23:27:03 CET 2006


There is a small bug in popen_timeout_alarm_handler() in popen.c where
it assumes that the child_process variable actually exists, and I've
had it be NULL when the signal got sent, and had check_ping at least
core dump. It took me 2 days, but I found the bug and patched it
enough so it doesn't segfault anymore if the signal is sent. If
someone wants to go further into details about how I got this crash,
email me (on list, I'm subscribed), as it doesn't always happen, but I
think I found the situation where I can cause that signal to be sent
while child_process is NULL. But since accessing a pointer when it can
possibly be NULL is always bad, here's the patch that should go in
anyways:

Index: popen.c
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/popen.c,v
retrieving revision 1.13
diff -u -r1.13 popen.c
--- popen.c	12 Sep 2005 10:31:28 -0000	1.13
+++ popen.c	16 Feb 2006 22:08:38 -0000
@@ -270,9 +270,13 @@
 {
 	int fh;
 	if (signo == SIGALRM) {
-		fh=fileno (child_process);
-		if(fh >= 0){
-			kill (childpid[fh], SIGKILL);
+		if(child_process != NULL) {
+			fh=fileno (child_process);
+			if(fh >= 0){
+				kill (childpid[fh], SIGKILL);
+			}
+		} else {
+			printf (_("CRITICAL - No child process?!\n"));
 		}
 		printf (_("CRITICAL - Plugin timed out after %d seconds\n"),
 						timeout_interval);


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid3432&bid#0486&dat1642




More information about the Developers mailing list