qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] linux-user/signal.c: Skip calling unlock_user_struc


From: gang . chen . 5i5j
Subject: [Qemu-devel] [PATCH] linux-user/signal.c: Skip calling unlock_user_struct() when lock_user_struct() failed for target m68k
Date: Sun, 13 Sep 2015 11:25:43 +0800

From: Chen Gang <address@hidden>

For target m68k, setup_rt_frame() and do_rt_sigreturn() have this issue.

Signed-off-by: Chen Gang <address@hidden>
---
 linux-user/signal.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/linux-user/signal.c b/linux-user/signal.c
index cead97b..0265c46 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -5160,7 +5160,7 @@ static void setup_rt_frame(int sig, struct 
target_sigaction *ka,
 
     frame_addr = get_sigframe(ka, env, sizeof *frame);
     if (!lock_user_struct(VERIFY_WRITE, frame, frame_addr, 0))
-       goto give_sigsegv;
+        goto err;
 
     __put_user(sig, &frame->sig);
 
@@ -5215,6 +5215,7 @@ static void setup_rt_frame(int sig, struct 
target_sigaction *ka,
 
 give_sigsegv:
     unlock_user_struct(frame, frame_addr, 1);
+err:
     force_sig(TARGET_SIGSEGV);
 }
 
@@ -5261,7 +5262,7 @@ long do_rt_sigreturn(CPUM68KState *env)
     int d0;
 
     if (!lock_user_struct(VERIFY_READ, frame, frame_addr, 1))
-        goto badframe;
+        goto err;
 
     target_to_host_sigset_internal(&set, &target_set);
     do_sigprocmask(SIG_SETMASK, &set, NULL);
@@ -5281,6 +5282,7 @@ long do_rt_sigreturn(CPUM68KState *env)
 
 badframe:
     unlock_user_struct(frame, frame_addr, 0);
+err:
     force_sig(TARGET_SIGSEGV);
     return 0;
 }
-- 
1.9.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]