Commit cda1e453 authored by Rusty Russell's avatar Rusty Russell Committed by Linus Torvalds

[PATCH] Futex II: Copy-from-user can fail.

This patch handles the case where copy_from_user fails (it could
have been unmapped from this address space by another thread).
parent 4ccfe3c5
......@@ -150,13 +150,14 @@ static int futex_wait(struct list_head *head,
set_current_state(TASK_INTERRUPTIBLE);
queue_me(head, &q, page, offset);
/* Page is pinned, can't fail */
if (get_user(curval, uaddr) != 0)
BUG();
/* Page is pinned, but may no longer be in this address space. */
if (get_user(curval, uaddr) != 0) {
ret = -EFAULT;
goto out;
}
if (curval != val) {
ret = -EWOULDBLOCK;
set_current_state(TASK_RUNNING);
goto out;
}
time = schedule_timeout(time);
......@@ -169,6 +170,7 @@ static int futex_wait(struct list_head *head,
goto out;
}
out:
set_current_state(TASK_RUNNING);
/* Were we woken up anyway? */
if (!unqueue_me(&q))
return 0;
......
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