diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2012-11-09 23:51:47 -0500 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-02-14 09:21:17 -0500 | 
| commit | 235b80226b986dabcbba844968f7807866bd0bfe (patch) | |
| tree | 834a02573bcb1986c0b5e73af8fc8bd7d16dbffb /arch/x86/ia32 | |
| parent | 08f739570de697dc06b949ba3be33acdda21498c (diff) | |
| download | linux-235b80226b986dabcbba844968f7807866bd0bfe.tar.bz2 | |
x86: convert to ksignal
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/x86/ia32')
| -rw-r--r-- | arch/x86/ia32/ia32_signal.c | 37 | 
1 files changed, 17 insertions, 20 deletions
| diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c index b0460cd7de5a..cf1a471a18a2 100644 --- a/arch/x86/ia32/ia32_signal.c +++ b/arch/x86/ia32/ia32_signal.c @@ -309,7 +309,7 @@ static int ia32_setup_sigcontext(struct sigcontext_ia32 __user *sc,  /*   * Determine which stack to use..   */ -static void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, +static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs,  				 size_t frame_size,  				 void __user **fpstate)  { @@ -319,16 +319,13 @@ static void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,  	sp = regs->sp;  	/* This is the X/Open sanctioned signal stack switching.  */ -	if (ka->sa.sa_flags & SA_ONSTACK) { -		if (sas_ss_flags(sp) == 0) -			sp = current->sas_ss_sp + current->sas_ss_size; -	} - +	if (ksig->ka.sa.sa_flags & SA_ONSTACK) +		sp = sigsp(sp, ksig);  	/* This is the legacy signal stack switching. */  	else if ((regs->ss & 0xffff) != __USER32_DS && -		!(ka->sa.sa_flags & SA_RESTORER) && -		 ka->sa.sa_restorer) -		sp = (unsigned long) ka->sa.sa_restorer; +		!(ksig->ka.sa.sa_flags & SA_RESTORER) && +		 ksig->ka.sa.sa_restorer) +		sp = (unsigned long) ksig->ka.sa.sa_restorer;  	if (used_math()) {  		unsigned long fx_aligned, math_size; @@ -347,7 +344,7 @@ static void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,  	return (void __user *) sp;  } -int ia32_setup_frame(int sig, struct k_sigaction *ka, +int ia32_setup_frame(int sig, struct ksignal *ksig,  		     compat_sigset_t *set, struct pt_regs *regs)  {  	struct sigframe_ia32 __user *frame; @@ -366,7 +363,7 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,  		0x80cd,		/* int $0x80 */  	}; -	frame = get_sigframe(ka, regs, sizeof(*frame), &fpstate); +	frame = get_sigframe(ksig, regs, sizeof(*frame), &fpstate);  	if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))  		return -EFAULT; @@ -383,8 +380,8 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,  			return -EFAULT;  	} -	if (ka->sa.sa_flags & SA_RESTORER) { -		restorer = ka->sa.sa_restorer; +	if (ksig->ka.sa.sa_flags & SA_RESTORER) { +		restorer = ksig->ka.sa.sa_restorer;  	} else {  		/* Return stub is in 32bit vsyscall page */  		if (current->mm->context.vdso) @@ -409,7 +406,7 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,  	/* Set up registers for signal handler */  	regs->sp = (unsigned long) frame; -	regs->ip = (unsigned long) ka->sa.sa_handler; +	regs->ip = (unsigned long) ksig->ka.sa.sa_handler;  	/* Make -mregparm=3 work */  	regs->ax = sig; @@ -425,7 +422,7 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,  	return 0;  } -int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, +int ia32_setup_rt_frame(int sig, struct ksignal *ksig,  			compat_sigset_t *set, struct pt_regs *regs)  {  	struct rt_sigframe_ia32 __user *frame; @@ -446,7 +443,7 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  		0,  	}; -	frame = get_sigframe(ka, regs, sizeof(*frame), &fpstate); +	frame = get_sigframe(ksig, regs, sizeof(*frame), &fpstate);  	if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))  		return -EFAULT; @@ -464,8 +461,8 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  		put_user_ex(0, &frame->uc.uc_link);  		err |= __compat_save_altstack(&frame->uc.uc_stack, regs->sp); -		if (ka->sa.sa_flags & SA_RESTORER) -			restorer = ka->sa.sa_restorer; +		if (ksig->ka.sa.sa_flags & SA_RESTORER) +			restorer = ksig->ka.sa.sa_restorer;  		else  			restorer = VDSO32_SYMBOL(current->mm->context.vdso,  						 rt_sigreturn); @@ -478,7 +475,7 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  		put_user_ex(*((u64 *)&code), (u64 __user *)frame->retcode);  	} put_user_catch(err); -	err |= copy_siginfo_to_user32(&frame->info, info); +	err |= copy_siginfo_to_user32(&frame->info, &ksig->info);  	err |= ia32_setup_sigcontext(&frame->uc.uc_mcontext, fpstate,  				     regs, set->sig[0]);  	err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); @@ -488,7 +485,7 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  	/* Set up registers for signal handler */  	regs->sp = (unsigned long) frame; -	regs->ip = (unsigned long) ka->sa.sa_handler; +	regs->ip = (unsigned long) ksig->ka.sa.sa_handler;  	/* Make -mregparm=3 work */  	regs->ax = sig; |