Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Dec 1997 22:53:15 -0600 (CST)
From:      Lars Fredriksen <lars@fredriks-1.pr.mcs.net>
To:        jmb@FreeBSD.ORG (Jonathan M. Bresler)
Cc:        current@FreeBSD.ORG
Subject:   Re: EDOM and hz
Message-ID:  <199712190453.WAA17100@fredriks-1.pr.mcs.net>
In-Reply-To: <199712190202.SAA11500@hub.freebsd.org> from "Jonathan M. Bresler" at "Dec 18, 97 06:02:44 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
Jonathan M. Bresler writes:
> Lars Fredriksen wrote:
> > 
> > Hi,
> > 
> > This is a section of code in uipc_socket.c:
> > 
> >                 case SO_SNDTIMEO:
> >                 case SO_RCVTIMEO:
> >                     {
> >                         struct timeval *tv;
> >                         short val;
> >  
> >                         if (m == NULL || m->m_len < sizeof (*tv)) {  
> >                                 error = EINVAL;
> >                                 goto bad; 
> >                         }
> >                         tv = mtod(m, struct timeval *); 
> >                         if (tv->tv_sec > SHRT_MAX / hz - hz) {
> >                                 error = EDOM;
> >                                 goto bad;
> >                         }
> >                         val = tv->tv_sec * hz + tv->tv_usec / tick;  
> > 
> > 
> > If we are running with hz anything but 100 this code sort of breaks. 
> > 
> > That is:
> > 
> > 32767/100-100 = 227
> > 
> > but 
> > 32767/250-250 = -119
> > 
> > 
> > Can we modify this check in such a fashion that works more universally?
> > 
> > Perhaps by changing val to an int??
> > 
> > and make it:
> > 	if (tv->tv_sec > INT_MAX/hz -hz)
> 
> 	<hmmm....better grab stevens v2....ah, let's see on p 543,4>
> 
> Rich Stevens recommends:
> 
> 	if (tv->tv_sec*hz + tv_usec/tick > SHRT_MAX) {
> 		error = EDOM;
> 		goto bad;
> 	}
> 
> 
> 	where tick = 1,000,000 / hz
> 	and   SHRT_MAX = 32767
> jmb
> 

Looks like a winner to me! Anyone care to commit - or I can. Just
say the word..

Lars


-- 
-------------------------------------------------------------------
Lars Fredriksen		fredriks@mcs.com		(home)
			lars@fredriks-1.pr.mcs.net	(home-home)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712190453.WAA17100>