[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] linux-user: Fix incorrect offset of tuc_stack in AR
From: |
Timothy E Baldwin |
Subject: |
[Qemu-devel] [PATCH] linux-user: Fix incorrect offset of tuc_stack in ARM do_sigframe_return_v2 |
Date: |
Fri, 9 Sep 2016 19:35:58 +0100 |
struct target_ucontext_v2 is not at the begining of the signal frame,
therefore do_sigaltstack was being passed bogus arguments.
As the offset depends on the type of signal frame fixed by passing in the
beginning of the context from do_sigreturn_v2 and do_rt_sigreturn_v2.
Suggested-by: Peter Maydell <address@hidden>
Signed-off-by: Timothy Edward Baldwin <address@hidden>
---
Changes since v2:
Change do_sigreturn_v2 and do_rt_sigreturn_v2 to pass in context.
Rename frame_addr to context_addr
linux-user/signal.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 9a4d894..b5cdb25 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -2035,7 +2035,8 @@ static abi_ulong *restore_sigframe_v2_iwmmxt(CPUARMState
*env,
return (abi_ulong*)(iwmmxtframe + 1);
}
-static int do_sigframe_return_v2(CPUARMState *env, target_ulong frame_addr,
+static int do_sigframe_return_v2(CPUARMState *env,
+ target_ulong context_addr,
struct target_ucontext_v2 *uc)
{
sigset_t host_set;
@@ -2062,8 +2063,11 @@ static int do_sigframe_return_v2(CPUARMState *env,
target_ulong frame_addr,
}
}
- if (do_sigaltstack(frame_addr + offsetof(struct target_ucontext_v2,
tuc_stack), 0, get_sp_from_cpustate(env)) == -EFAULT)
+ if (do_sigaltstack(context_addr
+ + offsetof(struct target_ucontext_v2, tuc_stack),
+ 0, get_sp_from_cpustate(env)) == -EFAULT) {
return 1;
+ }
#if 0
/* Send SIGTRAP if we're single-stepping */
@@ -2094,7 +2098,10 @@ static long do_sigreturn_v2(CPUARMState *env)
goto badframe;
}
- if (do_sigframe_return_v2(env, frame_addr, &frame->uc)) {
+ if (do_sigframe_return_v2(env,
+ frame_addr
+ + offsetof(struct sigframe_v2, uc),
+ &frame->uc)) {
goto badframe;
}
@@ -2181,7 +2188,10 @@ static long do_rt_sigreturn_v2(CPUARMState *env)
goto badframe;
}
- if (do_sigframe_return_v2(env, frame_addr, &frame->uc)) {
+ if (do_sigframe_return_v2(env,
+ frame_addr
+ + offsetof(struct rt_sigframe_v2, uc),
+ &frame->uc)) {
goto badframe;
}
--
2.9.3
- [Qemu-devel] [PATCH] linux-user: Fix incorrect offset of tuc_stack in ARM do_sigframe_return_v2,
Timothy E Baldwin <=