[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: 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>
This commit is contained in:
parent
8bdd1d1250
commit
04a3446c90
1 changed files with 5 additions and 2 deletions
|
@ -746,9 +746,9 @@ out_fds:
|
||||||
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,
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue