bin/71651: [PATCH] cron may attept to close unopened file

Dan Lukes dan at obluda.cz
Sun Sep 12 07:20:23 PDT 2004


>Number:         71651
>Category:       bin
>Synopsis:       [PATCH] cron may attept to close unopened file
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Sep 12 14:20:22 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Dan Lukes
>Release:        FreeBSD 5.3-BETA3 i386
>Organization:
Obludarium
>Environment:
System: FreeBSD kulesh.obluda.cz 5.3-BETA3 FreeBSD 5.3-BETA3 #8: Sun Sep 5 07:06:40 CEST 2004 dan at kulesh.obluda.cz:/usr/obj/usr/src/sys/Dan i386
usr.sbin/cron/lib/misc.c,v 1.11 2002/08/04 04:32:27 tjr
usr.sbin/cron/cron/cron.c,v 1.15 2004/05/16 19:29:33 yar
usr.sbin/cron/cron/do_command.c,v 1.22 2004/05/16 19:29:33 yar

>Description:
usr.sbin/cron/lib/misc.c:413: warning: 'deny' might be used uninitialized in this function

It's sign of true bug. When fopen of ALLOW_FILE fail for other than ENOENT
reason, then "goto out" apply then 'if (deny)' is evaluated and
'fclose(deny)' may be called athought 'deny' is uninitialized variable.

I want to eliminate the following warning also, but they are
"false-positives" only ...:
usr.sbin/cron/cron/cron.c:165: warning: 'otzminute' might be used uninitialized in this function
usr.sbin/cron/cron/cron.c:165: warning: 'otzhour' might be used uninitialized in this function
usr.sbin/cron/cron/cron.c:165: warning: 'otzdom' might be used uninitialized in this function
usr.sbin/cron/cron/cron.c:165: warning: 'otzmonth' might be used uninitialized in this function
usr.sbin/cron/cron/cron.c:165: warning: 'otzdow' might be used uninitialized in this function
usr.sbin/cron/cron/do_command.c:388: warning: 'mail' might be used uninitialized in this function

>How-To-Repeat:
	N/A
>Fix:
*** usr.sbin/cron/lib/misc.c.ORIG	Wed Aug  7 00:03:16 2002
--- usr.sbin/cron/lib/misc.c	Sun Sep 12 15:52:00 2004
***************
*** 419,425 ****
  	if ((allow = fopen(ALLOW_FILE, "r")) == NULL && errno != ENOENT)
  		goto out;
  	if ((deny = fopen(DENY_FILE, "r")) == NULL && errno != ENOENT)
! 		goto out;
  	Debug(DMISC, ("allow/deny enabled, %d/%d\n", !!allow, !!deny))
  #else
  	allow = NULL;
--- 419,425 ----
  	if ((allow = fopen(ALLOW_FILE, "r")) == NULL && errno != ENOENT)
  		goto out;
  	if ((deny = fopen(DENY_FILE, "r")) == NULL && errno != ENOENT)
! 		goto out1;
  	Debug(DMISC, ("allow/deny enabled, %d/%d\n", !!allow, !!deny))
  #else
  	allow = NULL;
***************
*** 437,446 ****
  		isallowed = TRUE; 
  #endif
  	}
  out:	if (allow)
  		fclose(allow);
- 	if (deny)
- 		fclose(deny);
  	return (isallowed);
  }
  
--- 437,446 ----
  		isallowed = TRUE; 
  #endif
  	}
+ out1:	if (deny)
+ 		fclose(deny);
  out:	if (allow)
  		fclose(allow);
  	return (isallowed);
  }
  
*** usr.sbin/cron/cron/cron.c.ORIG	Tue May 18 22:20:13 2004
--- usr.sbin/cron/cron/cron.c	Sun Sep 12 16:00:03 2004
***************
*** 162,168 ****
  	static time_t	diff = 0, /* time difference in seconds from the last offset change */
  		difflimit = 0; /* end point for the time zone correction */
  	struct tm	otztm; /* time in the old time zone */
! 	int		otzminute, otzhour, otzdom, otzmonth, otzdow;
   	register struct tm	*tm = localtime(&TargetTime);
  	register int		minute, hour, dom, month, dow;
  	register user		*u;
--- 162,170 ----
  	static time_t	diff = 0, /* time difference in seconds from the last offset change */
  		difflimit = 0; /* end point for the time zone correction */
  	struct tm	otztm; /* time in the old time zone */
! 	int		otzminute = otzminute, /* "init" to avoid "might be used uninitialized" warning */
! 		otzhour = otzhour, otzdom = otzdom, 
! 		otzmonth = otzmonth, otzdow = otzmonth;
   	register struct tm	*tm = localtime(&TargetTime);
  	register int		minute, hour, dom, month, dow;
  	register user		*u;
*** usr.sbin/cron/cron/do_command.c.ORIG	Tue May 18 22:20:13 2004
--- usr.sbin/cron/cron/do_command.c	Sun Sep 12 16:04:42 2004
***************
*** 385,391 ****
  
  		ch = getc(in);
  		if (ch != EOF) {
! 			register FILE	*mail;
  			register int	bytes = 1;
  			int		status = 0;
  
--- 385,391 ----
  
  		ch = getc(in);
  		if (ch != EOF) {
! 			register FILE	*mail = mail; /* "init" to avoid "might be used uninitialized" warning */
  			register int	bytes = 1;
  			int		status = 0;
  
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list