mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	most of set_current_blocked() callers want SIGKILL/SIGSTOP removed from set
Only 3 out of 63 do not. Renamed the current variant to __set_current_blocked(), added set_current_blocked() that will exclude unblockable signals, switched open-coded instances to it. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									edd63a2763
								
							
						
					
					
						commit
						77097ae503
					
				
					 45 changed files with 17 additions and 141 deletions
				
			
		| 
						 | 
					@ -226,7 +226,6 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
 | 
				
			||||||
	if (__get_user(set.sig[0], &sc->sc_mask))
 | 
						if (__get_user(set.sig[0], &sc->sc_mask))
 | 
				
			||||||
		goto give_sigsegv;
 | 
							goto give_sigsegv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(sc, regs, sw))
 | 
						if (restore_sigcontext(sc, regs, sw))
 | 
				
			||||||
| 
						 | 
					@ -261,7 +260,6 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto give_sigsegv;
 | 
							goto give_sigsegv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
 | 
						if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,8 +22,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "signal.h"
 | 
					#include "signal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * For ARM syscalls, we encode the syscall number into the instruction.
 | 
					 * For ARM syscalls, we encode the syscall number into the instruction.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -210,10 +208,8 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
 | 
				
			||||||
	int err;
 | 
						int err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
 | 
						err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
 | 
				
			||||||
	if (err == 0) {
 | 
						if (err == 0)
 | 
				
			||||||
		sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
		set_current_blocked(&set);
 | 
							set_current_blocked(&set);
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__get_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err);
 | 
						__get_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err);
 | 
				
			||||||
	__get_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err);
 | 
						__get_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,8 +22,6 @@
 | 
				
			||||||
#include <asm/ucontext.h>
 | 
					#include <asm/ucontext.h>
 | 
				
			||||||
#include <asm/syscalls.h>
 | 
					#include <asm/syscalls.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
 | 
					asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
 | 
				
			||||||
			       struct pt_regs *regs)
 | 
								       struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -89,7 +87,6 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,8 +19,6 @@
 | 
				
			||||||
#include <asm/fixed_code.h>
 | 
					#include <asm/fixed_code.h>
 | 
				
			||||||
#include <asm/syscall.h>
 | 
					#include <asm/syscall.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Location of the trace bit in SYSCFG. */
 | 
					/* Location of the trace bit in SYSCFG. */
 | 
				
			||||||
#define TRACE_BITS 0x0001
 | 
					#define TRACE_BITS 0x0001
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,7 +96,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (rt_restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
 | 
						if (rt_restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,8 +20,6 @@
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Do a signal return, undo the signal stack.
 | 
					 * Do a signal return, undo the signal stack.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -87,7 +85,6 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,8 +31,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG 0
 | 
					#define DEBUG_SIG 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* a syscall in Linux/CRIS is a break 13 instruction which is 2 bytes */
 | 
					/* a syscall in Linux/CRIS is a break 13 instruction which is 2 bytes */
 | 
				
			||||||
/* manipulate regs so that upon return, it will be re-executed */
 | 
					/* manipulate regs so that upon return, it will be re-executed */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -176,7 +174,6 @@ asmlinkage int sys_sigreturn(long r10, long r11, long r12, long r13, long mof,
 | 
				
			||||||
				    sizeof(frame->extramask))))
 | 
									    sizeof(frame->extramask))))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->sc))
 | 
						if (restore_sigcontext(regs, &frame->sc))
 | 
				
			||||||
| 
						 | 
					@ -212,7 +209,6 @@ asmlinkage int sys_rt_sigreturn(long r10, long r11, long r12, long r13,
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,9 +24,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern unsigned long cris_signal_return_page;
 | 
					extern unsigned long cris_signal_return_page;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Flag to check if a signal is blockable. */
 | 
					 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * A syscall in CRIS is really a "break 13" instruction, which is 2
 | 
					 * A syscall in CRIS is really a "break 13" instruction, which is 2
 | 
				
			||||||
 * bytes. The registers is manipulated so upon return the instruction
 | 
					 * bytes. The registers is manipulated so upon return the instruction
 | 
				
			||||||
| 
						 | 
					@ -167,7 +164,6 @@ sys_sigreturn(long r10, long r11, long r12, long r13, long mof, long srp,
 | 
				
			||||||
						 sizeof(frame->extramask))))
 | 
											 sizeof(frame->extramask))))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->sc))
 | 
						if (restore_sigcontext(regs, &frame->sc))
 | 
				
			||||||
| 
						 | 
					@ -208,7 +204,6 @@ sys_rt_sigreturn(long r10, long r11, long r12, long r13, long mof, long srp,
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,8 +28,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG 0
 | 
					#define DEBUG_SIG 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct fdpic_func_descriptor {
 | 
					struct fdpic_func_descriptor {
 | 
				
			||||||
	unsigned long	text;
 | 
						unsigned long	text;
 | 
				
			||||||
	unsigned long	GOT;
 | 
						unsigned long	GOT;
 | 
				
			||||||
| 
						 | 
					@ -149,7 +147,6 @@ asmlinkage int sys_sigreturn(void)
 | 
				
			||||||
	    __copy_from_user(&set.sig[1], &frame->extramask, sizeof(frame->extramask)))
 | 
						    __copy_from_user(&set.sig[1], &frame->extramask, sizeof(frame->extramask)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(&frame->sc, &gr8))
 | 
						if (restore_sigcontext(&frame->sc, &gr8))
 | 
				
			||||||
| 
						 | 
					@ -172,7 +169,6 @@ asmlinkage int sys_rt_sigreturn(void)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(&frame->uc.uc_mcontext, &gr8))
 | 
						if (restore_sigcontext(&frame->uc.uc_mcontext, &gr8))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,8 +47,6 @@
 | 
				
			||||||
#include <asm/traps.h>
 | 
					#include <asm/traps.h>
 | 
				
			||||||
#include <asm/ucontext.h>
 | 
					#include <asm/ucontext.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Atomically swap in the new signal mask, and wait for a signal.
 | 
					 * Atomically swap in the new signal mask, and wait for a signal.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -186,7 +184,6 @@ asmlinkage int do_sigreturn(unsigned long __unused,...)
 | 
				
			||||||
			      sizeof(frame->extramask))))
 | 
								      sizeof(frame->extramask))))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->sc, &er0))
 | 
						if (restore_sigcontext(regs, &frame->sc, &er0))
 | 
				
			||||||
| 
						 | 
					@ -211,7 +208,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused,...)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &er0))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &er0))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,8 +31,6 @@
 | 
				
			||||||
#include <asm/signal.h>
 | 
					#include <asm/signal.h>
 | 
				
			||||||
#include <asm/vdso.h>
 | 
					#include <asm/vdso.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct rt_sigframe {
 | 
					struct rt_sigframe {
 | 
				
			||||||
	unsigned long tramp[2];
 | 
						unsigned long tramp[2];
 | 
				
			||||||
	struct siginfo info;
 | 
						struct siginfo info;
 | 
				
			||||||
| 
						 | 
					@ -273,7 +271,6 @@ asmlinkage int sys_rt_sigreturn(void)
 | 
				
			||||||
	if (__copy_from_user(&blocked, &frame->uc.uc_sigmask, sizeof(blocked)))
 | 
						if (__copy_from_user(&blocked, &frame->uc.uc_sigmask, sizeof(blocked)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&blocked, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&blocked);
 | 
						set_current_blocked(&blocked);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG	0
 | 
					#define DEBUG_SIG	0
 | 
				
			||||||
#define STACK_ALIGN	16		/* minimal alignment for stack pointer */
 | 
					#define STACK_ALIGN	16		/* minimal alignment for stack pointer */
 | 
				
			||||||
#define _BLOCKABLE	(~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if _NSIG_WORDS > 1
 | 
					#if _NSIG_WORDS > 1
 | 
				
			||||||
# define PUT_SIGSET(k,u)	__copy_to_user((u)->sig, (k)->sig, sizeof(sigset_t))
 | 
					# define PUT_SIGSET(k,u)	__copy_to_user((u)->sig, (k)->sig, sizeof(sigset_t))
 | 
				
			||||||
| 
						 | 
					@ -200,7 +199,6 @@ ia64_rt_sigreturn (struct sigscratch *scr)
 | 
				
			||||||
	if (GET_SIGSET(&set, &sc->sc_mask))
 | 
						if (GET_SIGSET(&set, &sc->sc_mask))
 | 
				
			||||||
		goto give_sigsegv;
 | 
							goto give_sigsegv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(sc, scr))
 | 
						if (restore_sigcontext(sc, scr))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,8 +28,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG 0
 | 
					#define DEBUG_SIG 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
asmlinkage int
 | 
					asmlinkage int
 | 
				
			||||||
sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
 | 
					sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
 | 
				
			||||||
		unsigned long r2, unsigned long r3, unsigned long r4,
 | 
							unsigned long r2, unsigned long r3, unsigned long r4,
 | 
				
			||||||
| 
						 | 
					@ -111,7 +109,6 @@ sys_rt_sigreturn(unsigned long r0, unsigned long r1,
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,8 +51,6 @@
 | 
				
			||||||
#include <asm/traps.h>
 | 
					#include <asm/traps.h>
 | 
				
			||||||
#include <asm/ucontext.h>
 | 
					#include <asm/ucontext.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_MMU
 | 
					#ifdef CONFIG_MMU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -795,7 +793,6 @@ asmlinkage int do_sigreturn(unsigned long __unused)
 | 
				
			||||||
			      sizeof(frame->extramask))))
 | 
								      sizeof(frame->extramask))))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->sc, frame + 1))
 | 
						if (restore_sigcontext(regs, &frame->sc, frame + 1))
 | 
				
			||||||
| 
						 | 
					@ -820,7 +817,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (rt_restore_ucontext(regs, sw, &frame->uc))
 | 
						if (rt_restore_ucontext(regs, sw, &frame->uc))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,6 @@
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
#include <asm/syscalls.h>
 | 
					#include <asm/syscalls.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
asmlinkage long
 | 
					asmlinkage long
 | 
				
			||||||
sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
 | 
					sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
 | 
				
			||||||
		struct pt_regs *regs)
 | 
							struct pt_regs *regs)
 | 
				
			||||||
| 
						 | 
					@ -106,7 +104,6 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &rval))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &rval))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,8 +19,6 @@
 | 
				
			||||||
#  define DEBUGP(fmt, args...)
 | 
					#  define DEBUGP(fmt, args...)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Determine which stack to use..
 | 
					 * Determine which stack to use..
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -339,7 +339,6 @@ asmlinkage void sys_sigreturn(nabi_no_regargs struct pt_regs regs)
 | 
				
			||||||
	if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked)))
 | 
						if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&blocked, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&blocked);
 | 
						set_current_blocked(&blocked);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sig = restore_sigcontext(®s, &frame->sf_sc);
 | 
						sig = restore_sigcontext(®s, &frame->sf_sc);
 | 
				
			||||||
| 
						 | 
					@ -375,7 +374,6 @@ asmlinkage void sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sig = restore_sigcontext(®s, &frame->rs_uc.uc_mcontext);
 | 
						sig = restore_sigcontext(®s, &frame->rs_uc.uc_mcontext);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -465,7 +465,6 @@ asmlinkage void sys32_sigreturn(nabi_no_regargs struct pt_regs regs)
 | 
				
			||||||
	if (__copy_conv_sigset_from_user(&blocked, &frame->sf_mask))
 | 
						if (__copy_conv_sigset_from_user(&blocked, &frame->sf_mask))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&blocked, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&blocked);
 | 
						set_current_blocked(&blocked);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sig = restore_sigcontext32(®s, &frame->sf_sc);
 | 
						sig = restore_sigcontext32(®s, &frame->sf_sc);
 | 
				
			||||||
| 
						 | 
					@ -503,7 +502,6 @@ asmlinkage void sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
 | 
				
			||||||
	if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask))
 | 
						if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sig = restore_sigcontext32(®s, &frame->rs_uc.uc_mcontext);
 | 
						sig = restore_sigcontext32(®s, &frame->rs_uc.uc_mcontext);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -109,7 +109,6 @@ asmlinkage void sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
 | 
				
			||||||
	if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask))
 | 
						if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sig = restore_sigcontext(®s, &frame->rs_uc.uc_mcontext);
 | 
						sig = restore_sigcontext(®s, &frame->rs_uc.uc_mcontext);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,8 +31,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG 0
 | 
					#define DEBUG_SIG 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * atomically swap in the new signal mask, and wait for a signal.
 | 
					 * atomically swap in the new signal mask, and wait for a signal.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -163,7 +161,6 @@ asmlinkage long sys_sigreturn(void)
 | 
				
			||||||
			     sizeof(frame->extramask)))
 | 
								     sizeof(frame->extramask)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(current_frame(), &frame->sc, &d0))
 | 
						if (restore_sigcontext(current_frame(), &frame->sc, &d0))
 | 
				
			||||||
| 
						 | 
					@ -191,7 +188,6 @@ asmlinkage long sys_rt_sigreturn(void)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(current_frame(), &frame->uc.uc_mcontext, &d0))
 | 
						if (restore_sigcontext(current_frame(), &frame->uc.uc_mcontext, &d0))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,8 +33,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG 0
 | 
					#define DEBUG_SIG 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
asmlinkage long
 | 
					asmlinkage long
 | 
				
			||||||
_sys_sigaltstack(const stack_t *uss, stack_t *uoss, struct pt_regs *regs)
 | 
					_sys_sigaltstack(const stack_t *uss, stack_t *uoss, struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -101,7 +99,6 @@ asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,9 +48,6 @@
 | 
				
			||||||
#define DBG(LEVEL, ...)
 | 
					#define DBG(LEVEL, ...)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* gcc will complain if a pointer is cast to an integer of different
 | 
					/* gcc will complain if a pointer is cast to an integer of different
 | 
				
			||||||
 * size.  If you really need to do this (and we do for an ELF32 user
 | 
					 * size.  If you really need to do this (and we do for an ELF32 user
 | 
				
			||||||
 * application in an ELF64 kernel) then you have to do a cast to an
 | 
					 * application in an ELF64 kernel) then you have to do a cast to an
 | 
				
			||||||
| 
						 | 
					@ -131,7 +128,6 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
 | 
				
			||||||
			goto give_sigsegv;
 | 
								goto give_sigsegv;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Good thing we saved the old gr[30], eh? */
 | 
						/* Good thing we saved the old gr[30], eh? */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,8 +47,6 @@
 | 
				
			||||||
#define DBG(LEVEL, ...)
 | 
					#define DBG(LEVEL, ...)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
inline void
 | 
					inline void
 | 
				
			||||||
sigset_32to64(sigset_t *s64, compat_sigset_t *s32)
 | 
					sigset_32to64(sigset_t *s64, compat_sigset_t *s32)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,6 @@ void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void restore_sigmask(sigset_t *set)
 | 
					void restore_sigmask(sigset_t *set)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	sigdelsetmask(set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(set);
 | 
						set_current_blocked(set);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,8 +10,6 @@
 | 
				
			||||||
#ifndef _POWERPC_ARCH_SIGNAL_H
 | 
					#ifndef _POWERPC_ARCH_SIGNAL_H
 | 
				
			||||||
#define _POWERPC_ARCH_SIGNAL_H
 | 
					#define _POWERPC_ARCH_SIGNAL_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags);
 | 
					extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
 | 
					extern void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,8 +32,6 @@
 | 
				
			||||||
#include "compat_ptrace.h"
 | 
					#include "compat_ptrace.h"
 | 
				
			||||||
#include "entry.h"
 | 
					#include "entry.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct 
 | 
					typedef struct 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__u8 callee_used_stack[__SIGNAL_FRAMESIZE32];
 | 
						__u8 callee_used_stack[__SIGNAL_FRAMESIZE32];
 | 
				
			||||||
| 
						 | 
					@ -364,7 +362,6 @@ asmlinkage long sys32_sigreturn(void)
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
	if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32))
 | 
						if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	if (restore_sigregs32(regs, &frame->sregs))
 | 
						if (restore_sigregs32(regs, &frame->sregs))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
| 
						 | 
					@ -390,7 +387,6 @@ asmlinkage long sys32_rt_sigreturn(void)
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	if (restore_sigregs32(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigregs32(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,9 +33,6 @@
 | 
				
			||||||
#include <asm/switch_to.h>
 | 
					#include <asm/switch_to.h>
 | 
				
			||||||
#include "entry.h"
 | 
					#include "entry.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct 
 | 
					typedef struct 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__u8 callee_used_stack[__SIGNAL_FRAMESIZE];
 | 
						__u8 callee_used_stack[__SIGNAL_FRAMESIZE];
 | 
				
			||||||
| 
						 | 
					@ -169,7 +166,6 @@ SYSCALL_DEFINE0(sigreturn)
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
	if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE))
 | 
						if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	if (restore_sigregs(regs, &frame->sregs))
 | 
						if (restore_sigregs(regs, &frame->sregs))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
| 
						 | 
					@ -189,7 +185,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
	if (__copy_from_user(&set.sig, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set.sig, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	if (restore_sigregs(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigregs(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,8 +34,6 @@
 | 
				
			||||||
#include <asm/syscalls.h>
 | 
					#include <asm/syscalls.h>
 | 
				
			||||||
#include <asm/ucontext.h>
 | 
					#include <asm/ucontext.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct rt_sigframe {
 | 
					struct rt_sigframe {
 | 
				
			||||||
	u32 rs_ass[4];		/* argument save space */
 | 
						u32 rs_ass[4];		/* argument save space */
 | 
				
			||||||
	u32 rs_code[2];		/* signal trampoline */
 | 
						u32 rs_code[2];		/* signal trampoline */
 | 
				
			||||||
| 
						 | 
					@ -162,7 +160,6 @@ score_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sig = restore_sigcontext(regs, &frame->rs_uc.uc_mcontext);
 | 
						sig = restore_sigcontext(regs, &frame->rs_uc.uc_mcontext);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,8 +32,6 @@
 | 
				
			||||||
#include <asm/syscalls.h>
 | 
					#include <asm/syscalls.h>
 | 
				
			||||||
#include <asm/fpu.h>
 | 
					#include <asm/fpu.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct fdpic_func_descriptor {
 | 
					struct fdpic_func_descriptor {
 | 
				
			||||||
	unsigned long	text;
 | 
						unsigned long	text;
 | 
				
			||||||
	unsigned long	GOT;
 | 
						unsigned long	GOT;
 | 
				
			||||||
| 
						 | 
					@ -226,7 +224,6 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5,
 | 
				
			||||||
				    sizeof(frame->extramask))))
 | 
									    sizeof(frame->extramask))))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->sc, &r0))
 | 
						if (restore_sigcontext(regs, &frame->sc, &r0))
 | 
				
			||||||
| 
						 | 
					@ -256,7 +253,6 @@ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG 0
 | 
					#define DEBUG_SIG 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
 | 
					handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
 | 
				
			||||||
		struct pt_regs * regs);
 | 
							struct pt_regs * regs);
 | 
				
			||||||
| 
						 | 
					@ -330,7 +328,6 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3,
 | 
				
			||||||
				    sizeof(frame->extramask))))
 | 
									    sizeof(frame->extramask))))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->sc, &ret))
 | 
						if (restore_sigcontext(regs, &frame->sc, &ret))
 | 
				
			||||||
| 
						 | 
					@ -363,7 +360,6 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,8 +32,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "sigutil.h"
 | 
					#include "sigutil.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* This magic should be in g_upper[0] for all upper parts
 | 
					/* This magic should be in g_upper[0] for all upper parts
 | 
				
			||||||
 * to be valid.
 | 
					 * to be valid.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -274,7 +272,6 @@ void do_sigreturn32(struct pt_regs *regs)
 | 
				
			||||||
		case 2: set.sig[1] = seta[2] + (((long)seta[3]) << 32);
 | 
							case 2: set.sig[1] = seta[2] + (((long)seta[3]) << 32);
 | 
				
			||||||
		case 1: set.sig[0] = seta[0] + (((long)seta[1]) << 32);
 | 
							case 1: set.sig[0] = seta[0] + (((long)seta[1]) << 32);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -376,7 +373,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
 | 
				
			||||||
		case 2: set.sig[1] = seta.sig[2] + (((long)seta.sig[3]) << 32);
 | 
							case 2: set.sig[1] = seta.sig[2] + (((long)seta.sig[3]) << 32);
 | 
				
			||||||
		case 1: set.sig[0] = seta.sig[0] + (((long)seta.sig[1]) << 32);
 | 
							case 1: set.sig[0] = seta.sig[0] + (((long)seta.sig[1]) << 32);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
segv:
 | 
					segv:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,8 +29,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "sigutil.h"
 | 
					#include "sigutil.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern void fpsave(unsigned long *fpregs, unsigned long *fsr,
 | 
					extern void fpsave(unsigned long *fpregs, unsigned long *fsr,
 | 
				
			||||||
		   void *fpqueue, unsigned long *fpqdepth);
 | 
							   void *fpqueue, unsigned long *fpqdepth);
 | 
				
			||||||
extern void fpload(unsigned long *fpregs, unsigned long *fsr);
 | 
					extern void fpload(unsigned long *fpregs, unsigned long *fsr);
 | 
				
			||||||
| 
						 | 
					@ -130,7 +128,6 @@ asmlinkage void do_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		goto segv_and_exit;
 | 
							goto segv_and_exit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -197,7 +194,6 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
			goto segv;
 | 
								goto segv;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
segv:
 | 
					segv:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,8 +38,6 @@
 | 
				
			||||||
#include "systbls.h"
 | 
					#include "systbls.h"
 | 
				
			||||||
#include "sigutil.h"
 | 
					#include "sigutil.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* {set, get}context() needed for 64-bit SparcLinux userland. */
 | 
					/* {set, get}context() needed for 64-bit SparcLinux userland. */
 | 
				
			||||||
asmlinkage void sparc64_set_context(struct pt_regs *regs)
 | 
					asmlinkage void sparc64_set_context(struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -71,7 +69,6 @@ asmlinkage void sparc64_set_context(struct pt_regs *regs)
 | 
				
			||||||
			if (__copy_from_user(&set, &ucp->uc_sigmask, sizeof(sigset_t)))
 | 
								if (__copy_from_user(&set, &ucp->uc_sigmask, sizeof(sigset_t)))
 | 
				
			||||||
				goto do_sigsegv;
 | 
									goto do_sigsegv;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
		set_current_blocked(&set);
 | 
							set_current_blocked(&set);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (test_thread_flag(TIF_32BIT)) {
 | 
						if (test_thread_flag(TIF_32BIT)) {
 | 
				
			||||||
| 
						 | 
					@ -315,7 +312,6 @@ void do_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	/* Prevent syscall restart.  */
 | 
						/* Prevent syscall restart.  */
 | 
				
			||||||
	pt_regs_clear_syscall(regs);
 | 
						pt_regs_clear_syscall(regs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
segv:
 | 
					segv:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,8 +118,6 @@ struct compat_rt_sigframe {
 | 
				
			||||||
	struct compat_ucontext uc;
 | 
						struct compat_ucontext uc;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
long compat_sys_rt_sigaction(int sig, struct compat_sigaction __user *act,
 | 
					long compat_sys_rt_sigaction(int sig, struct compat_sigaction __user *act,
 | 
				
			||||||
			     struct compat_sigaction __user *oact,
 | 
								     struct compat_sigaction __user *oact,
 | 
				
			||||||
			     size_t sigsetsize)
 | 
								     size_t sigsetsize)
 | 
				
			||||||
| 
						 | 
					@ -302,7 +300,6 @@ long compat_sys_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,8 +37,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG 0
 | 
					#define DEBUG_SIG 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SYSCALL_DEFINE3(sigaltstack, const stack_t __user *, uss,
 | 
					SYSCALL_DEFINE3(sigaltstack, const stack_t __user *, uss,
 | 
				
			||||||
		stack_t __user *, uoss, struct pt_regs *, regs)
 | 
							stack_t __user *, uoss, struct pt_regs *, regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -96,7 +94,6 @@ SYSCALL_DEFINE1(rt_sigreturn, struct pt_regs *, regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,9 +6,6 @@
 | 
				
			||||||
#ifndef __FRAME_KERN_H_
 | 
					#ifndef __FRAME_KERN_H_
 | 
				
			||||||
#define __FRAME_KERN_H_
 | 
					#define __FRAME_KERN_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _S(nr) (1<<((nr)-1))
 | 
					 | 
				
			||||||
#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern int setup_signal_stack_sc(unsigned long stack_top, int sig, 
 | 
					extern int setup_signal_stack_sc(unsigned long stack_top, int sig, 
 | 
				
			||||||
				 struct k_sigaction *ka,
 | 
									 struct k_sigaction *ka,
 | 
				
			||||||
				 struct pt_regs *regs, 
 | 
									 struct pt_regs *regs, 
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,10 +15,6 @@
 | 
				
			||||||
EXPORT_SYMBOL(block_signals);
 | 
					EXPORT_SYMBOL(block_signals);
 | 
				
			||||||
EXPORT_SYMBOL(unblock_signals);
 | 
					EXPORT_SYMBOL(unblock_signals);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _S(nr) (1<<((nr)-1))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * OK, we're invoking a handler
 | 
					 * OK, we're invoking a handler
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,8 +21,6 @@
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
#include <asm/ucontext.h>
 | 
					#include <asm/ucontext.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * For UniCore syscalls, we encode the syscall number into the instruction.
 | 
					 * For UniCore syscalls, we encode the syscall number into the instruction.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -61,10 +59,8 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
 | 
				
			||||||
	int err;
 | 
						int err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
 | 
						err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
 | 
				
			||||||
	if (err == 0) {
 | 
						if (err == 0)
 | 
				
			||||||
		sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
		set_current_blocked(&set);
 | 
							set_current_blocked(&set);
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err |= __get_user(regs->UCreg_00, &sf->uc.uc_mcontext.regs.UCreg_00);
 | 
						err |= __get_user(regs->UCreg_00, &sf->uc.uc_mcontext.regs.UCreg_00);
 | 
				
			||||||
	err |= __get_user(regs->UCreg_01, &sf->uc.uc_mcontext.regs.UCreg_01);
 | 
						err |= __get_user(regs->UCreg_01, &sf->uc.uc_mcontext.regs.UCreg_01);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -273,7 +273,6 @@ asmlinkage long sys32_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
				    sizeof(frame->extramask))))
 | 
									    sizeof(frame->extramask))))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ia32_restore_sigcontext(regs, &frame->sc, &ax))
 | 
						if (ia32_restore_sigcontext(regs, &frame->sc, &ax))
 | 
				
			||||||
| 
						 | 
					@ -299,7 +298,6 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ia32_restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 | 
						if (ia32_restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,8 +7,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/processor-flags.h>
 | 
					#include <asm/processor-flags.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __FIX_EFLAGS	(X86_EFLAGS_AC | X86_EFLAGS_OF | \
 | 
					#define __FIX_EFLAGS	(X86_EFLAGS_AC | X86_EFLAGS_OF | \
 | 
				
			||||||
			 X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \
 | 
								 X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \
 | 
				
			||||||
			 X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \
 | 
								 X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -555,7 +555,6 @@ unsigned long sys_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
				    sizeof(frame->extramask))))
 | 
									    sizeof(frame->extramask))))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->sc, &ax))
 | 
						if (restore_sigcontext(regs, &frame->sc, &ax))
 | 
				
			||||||
| 
						 | 
					@ -581,7 +580,6 @@ long sys_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 | 
				
			||||||
| 
						 | 
					@ -915,7 +913,6 @@ asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 | 
						if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -486,7 +486,6 @@ long sys_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	    copy_from_user(&set.sig[1], extramask, sig_size))
 | 
						    copy_from_user(&set.sig[1], extramask, sig_size))
 | 
				
			||||||
		goto segfault;
 | 
							goto segfault;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (copy_sc_from_user(¤t->thread.regs, sc))
 | 
						if (copy_sc_from_user(¤t->thread.regs, sc))
 | 
				
			||||||
| 
						 | 
					@ -600,7 +599,6 @@ long sys_rt_sigreturn(struct pt_regs *regs)
 | 
				
			||||||
	if (copy_from_user(&set, &uc->uc_sigmask, sizeof(set)))
 | 
						if (copy_from_user(&set, &uc->uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto segfault;
 | 
							goto segfault;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (copy_sc_from_user(¤t->thread.regs, &uc->uc_mcontext))
 | 
						if (copy_sc_from_user(¤t->thread.regs, &uc->uc_mcontext))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,8 +30,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEBUG_SIG  0
 | 
					#define DEBUG_SIG  0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern struct task_struct *coproc_owners[];
 | 
					extern struct task_struct *coproc_owners[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct rt_sigframe
 | 
					struct rt_sigframe
 | 
				
			||||||
| 
						 | 
					@ -261,7 +259,6 @@ asmlinkage long xtensa_rt_sigreturn(long a0, long a1, long a2, long a3,
 | 
				
			||||||
	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
						if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sigdelsetmask(&set, ~_BLOCKABLE);
 | 
					 | 
				
			||||||
	set_current_blocked(&set);
 | 
						set_current_blocked(&set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (restore_sigcontext(regs, frame))
 | 
						if (restore_sigcontext(regs, frame))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2210,7 +2210,7 @@ extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned lon
 | 
				
			||||||
static inline void restore_saved_sigmask(void)
 | 
					static inline void restore_saved_sigmask(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (test_and_clear_restore_sigmask())
 | 
						if (test_and_clear_restore_sigmask())
 | 
				
			||||||
		set_current_blocked(¤t->saved_sigmask);
 | 
							__set_current_blocked(¤t->saved_sigmask);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline sigset_t *sigmask_to_save(void)
 | 
					static inline sigset_t *sigmask_to_save(void)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -250,7 +250,8 @@ extern long do_sigpending(void __user *, unsigned long);
 | 
				
			||||||
extern int do_sigtimedwait(const sigset_t *, siginfo_t *,
 | 
					extern int do_sigtimedwait(const sigset_t *, siginfo_t *,
 | 
				
			||||||
				const struct timespec *);
 | 
									const struct timespec *);
 | 
				
			||||||
extern int sigprocmask(int, sigset_t *, sigset_t *);
 | 
					extern int sigprocmask(int, sigset_t *, sigset_t *);
 | 
				
			||||||
extern void set_current_blocked(const sigset_t *);
 | 
					extern void set_current_blocked(sigset_t *);
 | 
				
			||||||
 | 
					extern void __set_current_blocked(const sigset_t *);
 | 
				
			||||||
extern int show_unhandled_signals;
 | 
					extern int show_unhandled_signals;
 | 
				
			||||||
extern int sigsuspend(sigset_t *);
 | 
					extern int sigsuspend(sigset_t *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2524,7 +2524,16 @@ static void __set_task_blocked(struct task_struct *tsk, const sigset_t *newset)
 | 
				
			||||||
 * It is wrong to change ->blocked directly, this helper should be used
 | 
					 * It is wrong to change ->blocked directly, this helper should be used
 | 
				
			||||||
 * to ensure the process can't miss a shared signal we are going to block.
 | 
					 * to ensure the process can't miss a shared signal we are going to block.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void set_current_blocked(const sigset_t *newset)
 | 
					void set_current_blocked(sigset_t *newset)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct task_struct *tsk = current;
 | 
				
			||||||
 | 
						sigdelsetmask(newset, sigmask(SIGKILL) | sigmask(SIGSTOP));
 | 
				
			||||||
 | 
						spin_lock_irq(&tsk->sighand->siglock);
 | 
				
			||||||
 | 
						__set_task_blocked(tsk, newset);
 | 
				
			||||||
 | 
						spin_unlock_irq(&tsk->sighand->siglock);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void __set_current_blocked(const sigset_t *newset)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct task_struct *tsk = current;
 | 
						struct task_struct *tsk = current;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2564,7 +2573,7 @@ int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set_current_blocked(&newset);
 | 
						__set_current_blocked(&newset);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3138,7 +3147,7 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		set_current_blocked(&new_blocked);
 | 
							__set_current_blocked(&new_blocked);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (oset) {
 | 
						if (oset) {
 | 
				
			||||||
| 
						 | 
					@ -3202,7 +3211,6 @@ SYSCALL_DEFINE1(ssetmask, int, newmask)
 | 
				
			||||||
	int old = current->blocked.sig[0];
 | 
						int old = current->blocked.sig[0];
 | 
				
			||||||
	sigset_t newset;
 | 
						sigset_t newset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	siginitset(&newset, newmask & ~(sigmask(SIGKILL) | sigmask(SIGSTOP)));
 | 
					 | 
				
			||||||
	set_current_blocked(&newset);
 | 
						set_current_blocked(&newset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return old;
 | 
						return old;
 | 
				
			||||||
| 
						 | 
					@ -3243,8 +3251,6 @@ SYSCALL_DEFINE0(pause)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int sigsuspend(sigset_t *set)
 | 
					int sigsuspend(sigset_t *set)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	sigdelsetmask(set, sigmask(SIGKILL)|sigmask(SIGSTOP));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	current->saved_sigmask = current->blocked;
 | 
						current->saved_sigmask = current->blocked;
 | 
				
			||||||
	set_current_blocked(set);
 | 
						set_current_blocked(set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue