Re: Serious bug in recent Linux kernels

Alan Modra (alan@spri.levels.unisa.edu.au)
Mon, 11 Jan 1999 13:56:04 +1030 (CST)


On Sun, 10 Jan 1999, Guest section DW wrote:

> From owner-linux-kernel-outgoing@vger.rutgers.edu Sat Jan 9 10:32:53 1999
>
> There is a serious bug in recent kernels with the timeout of the poll()
> system call. The calculation to turn the timeout value from milliseconds
>
> Hmm - yesterday I complained that you should have been more precise
> with this `recent kernels', but I happened to come along this code in
> select.c for some other reason. It must not produce a negative timeout.
> The change below makes sure of that.

There is still a problem for values of timeout a little larger than
((unsigned long)-1 / HZ). eg. for HZ==100, a timeout of 42949673 gets
turned into a timeout of 2.

better is something like

if ((unsigned long)timeout > (unsigned long)-999 / HZ)
timeout = MAX_SCHEDULE_TIMEOUT;
else if (timeout)
timeout = (timeout*HZ+999)/1000+1;

>
> --- ../../../linux-2.2.0pre6/linux/fs/select.c Sun Nov 22 19:08:50 1998
> +++ select.c Sun Jan 10 08:15:04 1999
> @@ -331,10 +331,10 @@
> if (nfds > NR_OPEN)
> goto out;
>
> + if (timeout > 0)
> + timeout = (timeout*HZ+999)/1000+1;
> if (timeout < 0)
> timeout = MAX_SCHEDULE_TIMEOUT;
> - else if (timeout)
> - timeout = (timeout*HZ+999)/1000+1;
>
> err = -ENOMEM;
> if (timeout) {

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/