--- ./fs/select.c.bad 2005-12-04 18:05:26.000000000 +0100 +++ ./fs/select.c 2005-12-04 21:15:25.000000000 +0100 @@ -433,11 +433,10 @@ return -EINVAL; if (timeout) { - /* Careful about overflow in the intermediate values */ - if ((unsigned long) timeout < MAX_SCHEDULE_TIMEOUT / HZ) - timeout = (unsigned long)(timeout*HZ+999)/1000+1; - else /* Negative or overflow */ - timeout = MAX_SCHEDULE_TIMEOUT; + if (unlikely(timeout < 0 || + (timeout = msec_to_jiffies(timeout)) >= + MAX_JIFFY_OFFSET)) + timeout = MAX_SCHEDULE_TIMEOUT; } poll_initwait(&table);