Handle ss_flags value longjmp safe.
* exceptions.cc (_cygtls::call_signal_handler): Drop manipulating thread's ss_flags here. It's not safe against longjmp. * signal.cc (sigaltstack): Check if we're running on the alternate stack and set ss_flags returned in oss to SS_ONSTACK. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
@ -1599,8 +1599,6 @@ _cygtls::call_signal_handler ()
|
||||
uintptr_t new_sp = (uintptr_t) _my_tls.altstack.ss_sp
|
||||
+ _my_tls.altstack.ss_size;
|
||||
new_sp &= ~0xf;
|
||||
/* Mark alternate stack as used. */
|
||||
_my_tls.altstack.ss_flags = SS_ONSTACK;
|
||||
/* In assembler: Save regs on new stack, move to alternate stack,
|
||||
call thisfunc, revert stack regs. */
|
||||
#ifdef __x86_64__
|
||||
@ -1671,8 +1669,6 @@ _cygtls::call_signal_handler ()
|
||||
[FUNC] "o" (thisfunc)
|
||||
: "memory");
|
||||
#endif
|
||||
/* Revert alternate stack to unused. */
|
||||
_my_tls.altstack.ss_flags = 0;
|
||||
}
|
||||
else
|
||||
/* No alternate signal stack requested or available, just call
|
||||
|
Reference in New Issue
Block a user