Skip to content

Commit

Permalink
[PATCH] fs: sys_poll with timeout -1 bug fix
Browse files Browse the repository at this point in the history
If you do a poll() call with timeout -1, the wait will be a big number
(depending on HZ) instead of infinite wait, since -1 is passed to the
msecs_to_jiffies function.

Signed-off-by: Frode Isaksen <frode.isaksen@gmail.com>
Acked-by: Nishanth Aravamudan <nacc@us.ibm.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Frode Isaksen authored and Linus Torvalds committed Jun 25, 2006
1 parent 8bdd1d1 commit 04a3446
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions fs/select.c
Original file line number Diff line number Diff line change
Expand Up @@ -746,16 +746,19 @@ int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds, s64 *timeout)
asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
long timeout_msecs)
{
s64 timeout_jiffies = 0;
s64 timeout_jiffies;

if (timeout_msecs) {
if (timeout_msecs > 0) {
#if HZ > 1000
/* We can only overflow if HZ > 1000 */
if (timeout_msecs / 1000 > (s64)0x7fffffffffffffffULL / (s64)HZ)
timeout_jiffies = -1;
else
#endif
timeout_jiffies = msecs_to_jiffies(timeout_msecs);
} else {
/* Infinite (< 0) or no (0) timeout */
timeout_jiffies = timeout_msecs;
}

return do_sys_poll(ufds, nfds, &timeout_jiffies);
Expand Down

0 comments on commit 04a3446

Please sign in to comment.