aboutsummaryrefslogtreecommitdiff
path: root/linux-user/hppa/signal.c
diff options
context:
space:
mode:
authorMikulas Patocka <mpatocka@redhat.com>2023-09-16 18:32:45 +0200
committerHelge Deller <deller@gmx.de>2023-09-19 21:12:18 +0200
commit5b1270ef1477bb7f240c3bfe2cd8b0fe4721fd51 (patch)
tree1fc7707aad356850d6f8d704cd99b76508f69241 /linux-user/hppa/signal.c
parent2529497cb6b298e732e8dbe5212da7925240b4f4 (diff)
linux-user/hppa: lock both words of function descriptor
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 <mpatocka@redhat.com> Acked-by: Helge Deller <deller@gmx.de> Cc: qemu-stable@nongnu.org Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'linux-user/hppa/signal.c')
-rw-r--r--linux-user/hppa/signal.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/linux-user/hppa/signal.c b/linux-user/hppa/signal.c
index 3a976ac693..bda6e54655 100644
--- a/linux-user/hppa/signal.c
+++ b/linux-user/hppa/signal.c
@@ -149,12 +149,13 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
target_ulong *fdesc, dest;
haddr &= -4;
- if (!lock_user_struct(VERIFY_READ, fdesc, haddr, 1)) {
+ fdesc = lock_user(VERIFY_READ, haddr, 2 * sizeof(target_ulong), 1);
+ if (!fdesc) {
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;