Message ID | 1393855661-33625-1-git-send-email-petar.jovanovic@rt-rk.com |
---|---|
State | New |
Headers | show |
On 3 March 2014 14:07, Petar Jovanovic <petar.jovanovic@rt-rk.com> wrote: > From: Petar Jovanovic <petar.jovanovic@imgtec.com> > > On success, sigtimedwait() returns a signal number that needs to be > translated from a host value to a target value. > > This change also fixes issues with sigwait (that is implemented using > sigtimedwait()). > > Signed-off-by: Petar Jovanovic <petar.jovanovic@imgtec.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 1407b7a..672766d 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6121,11 +6121,17 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, puts = NULL; } ret = get_errno(sigtimedwait(&set, &uinfo, puts)); - if (!is_error(ret) && arg2) { - if (!(p = lock_user(VERIFY_WRITE, arg2, sizeof(target_siginfo_t), 0))) - goto efault; - host_to_target_siginfo(p, &uinfo); - unlock_user(p, arg2, sizeof(target_siginfo_t)); + if (!is_error(ret)) { + if (arg2) { + p = lock_user(VERIFY_WRITE, arg2, sizeof(target_siginfo_t), + 0); + if (!p) { + goto efault; + } + host_to_target_siginfo(p, &uinfo); + unlock_user(p, arg2, sizeof(target_siginfo_t)); + } + ret = host_to_target_signal(ret); } } break;