|
@@ -41,6 +41,10 @@ static void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
|
|
|
{
|
|
|
unsigned long sp = regs->r29;
|
|
|
|
|
|
+ /* check if we would overflow the alt stack */
|
|
|
+ if (on_sig_stack(sp) && !likely(on_sig_stack(sp - frame_size)))
|
|
|
+ return (void __user __force *)-1UL;
|
|
|
+
|
|
|
/* Switch to signal stack if appropriate */
|
|
|
if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags(sp) == 0))
|
|
|
sp = current->sas_ss_sp + current->sas_ss_size;
|