From: Petar Jovanovic Date: Mon, 3 Mar 2014 14:07:41 +0000 (+0100) Subject: linux-user: translate signal number on return from sigtimedwait X-Git-Tag: TizenStudio_2.0_p2.3.2~208^2~1008^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=974a196d7fc9f2f5553589b0022226b877e5c9b1;p=sdk%2Femulator%2Fqemu.git linux-user: translate signal number on return from sigtimedwait 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 Signed-off-by: Riku Voipio Reviewed-by: Peter Maydell --- diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 1f64867..e2c10cc 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6185,11 +6185,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;