提交 9b7e30ab 编写于 作者: A Aurelien Jarno 提交者: Rich Felker

sh: fix futex FUTEX_OP_SET op on userspace addresses

Commit 00b73d8d ("sh: add working futex atomic ops on userspace
addresses for smp") changed the futex_atomic_op_inuser function to
use a loop. In case of the FUTEX_OP_SET op with a userspace address
containing a value different of 0, this loop is an endless loop.

Fix that by loading the value of oldval from the userspace before doing
the cmpxchg op, also for the FUTEX_OP_SET case.
Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>
Signed-off-by: NRich Felker <dalias@libc.org>
上级 0adb3285
......@@ -37,9 +37,6 @@ static inline int arch_futex_atomic_op_inuser(int op, u32 oparg, int *oval,
pagefault_disable();
do {
if (op == FUTEX_OP_SET)
ret = oldval = 0;
else
ret = get_user(oldval, uaddr);
if (ret) break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册