[IA64] signal(ia64_ia32): add a signal stack overflow check
The similar check has been added to x86_32(i386) in commit
id 83bd01024b
.
So we add this check to ia64_ia32 and improve it a liitle bit in that
we need to check for stack overflow only when the signal is on stack.
Signed-off-by: Shi Weihua <shiwh@cn.fujitsu.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
d7a6c68a2f
commit
86dffa4cd1
|
@ -766,8 +766,19 @@ get_sigframe (struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
|
||||||
|
|
||||||
/* This is the X/Open sanctioned signal stack switching. */
|
/* This is the X/Open sanctioned signal stack switching. */
|
||||||
if (ka->sa.sa_flags & SA_ONSTACK) {
|
if (ka->sa.sa_flags & SA_ONSTACK) {
|
||||||
if (!on_sig_stack(esp))
|
int onstack = sas_ss_flags(esp);
|
||||||
|
|
||||||
|
if (onstack == 0)
|
||||||
esp = current->sas_ss_sp + current->sas_ss_size;
|
esp = current->sas_ss_sp + current->sas_ss_size;
|
||||||
|
else if (onstack == SS_ONSTACK) {
|
||||||
|
/*
|
||||||
|
* If we are on the alternate signal stack and would
|
||||||
|
* overflow it, don't. Return an always-bogus address
|
||||||
|
* instead so we will die with SIGSEGV.
|
||||||
|
*/
|
||||||
|
if (!likely(on_sig_stack(esp - frame_size)))
|
||||||
|
return (void __user *) -1L;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* Legacy stack switching not supported */
|
/* Legacy stack switching not supported */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue