[1/3] linux-user: change do_semop to return target errno when unsuccessful

Submitted by riku.voipio@linaro.org on April 19, 2013, 1:59 p.m.


Message ID c7128c9fd58ee92cae70c7cd1d53acc529cebbbb.1366377671.git.riku.voipio@linaro.org
State New
Headers show

Commit Message

riku.voipio@linaro.org April 19, 2013, 1:59 p.m.
From: Petar Jovanovic <petar.jovanovic@imgtec.com>

do_semop() is called from two places, and one of these fails to convert
return error to target errno when semop fails. This patch changes the
function to always return target errno in case of an unsuccessful call.

Signed-off-by: Petar Jovanovic <petar.jovanovic@imgtec.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
 linux-user/syscall.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 1f07621..d6d2050 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -2764,7 +2764,7 @@  static inline abi_long do_semop(int semid, abi_long ptr, unsigned nsops)
     if (target_to_host_sembuf(sops, ptr, nsops))
         return -TARGET_EFAULT;
-    return semop(semid, sops, nsops);
+    return get_errno(semop(semid, sops, nsops));
 struct target_msqid_ds
@@ -6957,7 +6957,7 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
 #ifdef TARGET_NR_semop
     case TARGET_NR_semop:
-        ret = get_errno(do_semop(arg1, arg2, arg3));
+        ret = do_semop(arg1, arg2, arg3);
 #ifdef TARGET_NR_semctl