|
|
|
@ -363,10 +363,7 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, |
|
|
|
|
else |
|
|
|
|
put_user_ex(0, &frame->uc.uc_flags); |
|
|
|
|
put_user_ex(0, &frame->uc.uc_link); |
|
|
|
|
put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); |
|
|
|
|
put_user_ex(sas_ss_flags(regs->sp), |
|
|
|
|
&frame->uc.uc_stack.ss_flags); |
|
|
|
|
put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size); |
|
|
|
|
err |= __save_altstack(&frame->uc.uc_stack, regs->sp); |
|
|
|
|
|
|
|
|
|
/* Set up to return from userspace. */ |
|
|
|
|
restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn); |
|
|
|
@ -413,7 +410,6 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, |
|
|
|
|
struct rt_sigframe __user *frame; |
|
|
|
|
void __user *fp = NULL; |
|
|
|
|
int err = 0; |
|
|
|
|
struct task_struct *me = current; |
|
|
|
|
|
|
|
|
|
frame = get_sigframe(ka, regs, sizeof(struct rt_sigframe), &fp); |
|
|
|
|
|
|
|
|
@ -432,10 +428,7 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, |
|
|
|
|
else |
|
|
|
|
put_user_ex(0, &frame->uc.uc_flags); |
|
|
|
|
put_user_ex(0, &frame->uc.uc_link); |
|
|
|
|
put_user_ex(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp); |
|
|
|
|
put_user_ex(sas_ss_flags(regs->sp), |
|
|
|
|
&frame->uc.uc_stack.ss_flags); |
|
|
|
|
put_user_ex(me->sas_ss_size, &frame->uc.uc_stack.ss_size); |
|
|
|
|
err |= __save_altstack(&frame->uc.uc_stack, regs->sp); |
|
|
|
|
|
|
|
|
|
/* Set up to return from userspace. If provided, use a stub
|
|
|
|
|
already in userspace. */ |
|
|
|
@ -502,10 +495,7 @@ static int x32_setup_rt_frame(int sig, struct k_sigaction *ka, |
|
|
|
|
else |
|
|
|
|
put_user_ex(0, &frame->uc.uc_flags); |
|
|
|
|
put_user_ex(0, &frame->uc.uc_link); |
|
|
|
|
put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); |
|
|
|
|
put_user_ex(sas_ss_flags(regs->sp), |
|
|
|
|
&frame->uc.uc_stack.ss_flags); |
|
|
|
|
put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size); |
|
|
|
|
err |= __compat_save_altstack(&frame->uc.uc_stack, regs->sp); |
|
|
|
|
put_user_ex(0, &frame->uc.uc__pad0); |
|
|
|
|
|
|
|
|
|
if (ka->sa.sa_flags & SA_RESTORER) { |
|
|
|
@ -651,7 +641,7 @@ long sys_rt_sigreturn(struct pt_regs *regs) |
|
|
|
|
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) |
|
|
|
|
goto badframe; |
|
|
|
|
|
|
|
|
|
if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->sp) == -EFAULT) |
|
|
|
|
if (restore_altstack(&frame->uc.uc_stack)) |
|
|
|
|
goto badframe; |
|
|
|
|
|
|
|
|
|
return ax; |
|
|
|
|