The code in setup_rt_frame reads two words at haddr, but locks only one.
This patch fixes it to lock both.

Signed-off-by: Mikulas Patocka <[email protected]>

---
 linux-user/hppa/signal.c |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Index: qemu/linux-user/hppa/signal.c
===================================================================
--- qemu.orig/linux-user/hppa/signal.c
+++ qemu/linux-user/hppa/signal.c
@@ -149,12 +149,11 @@ void setup_rt_frame(int sig, struct targ
         target_ulong *fdesc, dest;
 
         haddr &= -4;
-        if (!lock_user_struct(VERIFY_READ, fdesc, haddr, 1)) {
+        if (!(fdesc = lock_user(VERIFY_READ, haddr, 2 * sizeof(target_ulong), 
1)))
             goto give_sigsegv;
-        }
         __get_user(dest, fdesc);
         __get_user(env->gr[19], fdesc + 1);
-        unlock_user_struct(fdesc, haddr, 1);
+        unlock_user(fdesc, haddr, 0);
         haddr = dest;
     }
     env->iaoq_f = haddr;


Reply via email to