Commit 04a3446c authored by Frode Isaksen's avatar Frode Isaksen Committed by Linus Torvalds

[PATCH] fs: sys_poll with timeout -1 bug fix

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: default avatarFrode Isaksen <frode.isaksen@gmail.com>
Acked-by: default avatarNishanth Aravamudan <nacc@us.ibm.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 8bdd1d12
...@@ -746,9 +746,9 @@ int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds, s64 *timeout) ...@@ -746,9 +746,9 @@ int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds, s64 *timeout)
asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds, asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
long timeout_msecs) long timeout_msecs)
{ {
s64 timeout_jiffies = 0; s64 timeout_jiffies;
if (timeout_msecs) { if (timeout_msecs > 0) {
#if HZ > 1000 #if HZ > 1000
/* We can only overflow if HZ > 1000 */ /* We can only overflow if HZ > 1000 */
if (timeout_msecs / 1000 > (s64)0x7fffffffffffffffULL / (s64)HZ) if (timeout_msecs / 1000 > (s64)0x7fffffffffffffffULL / (s64)HZ)
...@@ -756,6 +756,9 @@ asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds, ...@@ -756,6 +756,9 @@ asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
else else
#endif #endif
timeout_jiffies = msecs_to_jiffies(timeout_msecs); 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); return do_sys_poll(ufds, nfds, &timeout_jiffies);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment