Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Dec 1997 09:52:27 -0600 (CST)
From:      Lars Fredriksen <lars@fredriks-1.pr.mcs.net>
To:        current@freebsd.org
Subject:   EDOM and hz 
Message-ID:  <199712181552.JAA03716@fredriks-1.pr.mcs.net>

next in thread | raw e-mail | index | archive | help
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)


Lars

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

----- End of forwarded message from 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?199712181552.JAA03716>