[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 09/27] linux-user/sh4: Clean env->flags on signal
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v2 09/27] linux-user/sh4: Clean env->flags on signal boundaries |
Date: |
Thu, 6 Jul 2017 16:20:53 -1000 |
If a signal is delivered during the execution of a delay slot,
or a gUSA region, clear those bits from the environment so that
the signal handler does not start in that same state.
Cleaning the bits on signal return is paranoid good sense.
Signed-off-by: Richard Henderson <address@hidden>
---
linux-user/signal.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/linux-user/signal.c b/linux-user/signal.c
index a537778..8c0b851 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -3544,6 +3544,7 @@ static void restore_sigcontext(CPUSH4State *regs, struct
target_sigcontext *sc)
__get_user(regs->fpul, &sc->sc_fpul);
regs->tra = -1; /* disable syscall checks */
+ regs->flags &= ~(DELAY_SLOT_MASK | GUSA_MASK);
}
static void setup_frame(int sig, struct target_sigaction *ka,
@@ -3587,6 +3588,7 @@ static void setup_frame(int sig, struct target_sigaction
*ka,
regs->gregs[5] = 0;
regs->gregs[6] = frame_addr += offsetof(typeof(*frame), sc);
regs->pc = (unsigned long) ka->_sa_handler;
+ regs->flags &= ~(DELAY_SLOT_MASK | GUSA_MASK);
unlock_user_struct(frame, frame_addr, 1);
return;
@@ -3649,6 +3651,7 @@ static void setup_rt_frame(int sig, struct
target_sigaction *ka,
regs->gregs[5] = frame_addr + offsetof(typeof(*frame), info);
regs->gregs[6] = frame_addr + offsetof(typeof(*frame), uc);
regs->pc = (unsigned long) ka->_sa_handler;
+ regs->flags &= ~(DELAY_SLOT_MASK | GUSA_MASK);
unlock_user_struct(frame, frame_addr, 1);
return;
--
2.9.4
Re: [Qemu-devel] [PATCH v2 08/27] linux-user/sh4: Notice gUSA regions during signal delivery, Laurent Vivier, 2017/07/07
Re: [Qemu-devel] [PATCH v2 08/27] linux-user/sh4: Notice gUSA regions during signal delivery, Aurelien Jarno, 2017/07/15
[Qemu-devel] [PATCH v2 09/27] linux-user/sh4: Clean env->flags on signal boundaries,
Richard Henderson <=
[Qemu-devel] [PATCH v2 10/27] target/sh4: Hoist register bank selection, Richard Henderson, 2017/07/06
[Qemu-devel] [PATCH v2 11/27] target/sh4: Unify cpu_fregs into FREG, Richard Henderson, 2017/07/06
[Qemu-devel] [PATCH v2 12/27] target/sh4: Pass DisasContext to fpr64 routines, Richard Henderson, 2017/07/06