Commit 407323e6 authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] sparse: signal annotation

	ss_sp in struct sigaltstack made __user
	->si_addr and ->sival_ptr made __user
	your ->sa_restorer and ->sa_handler changes propagated
	users of these guys annotated on i386/amd64/alpha/sparc/sparc64
parent de9c4ad8
...@@ -588,7 +588,7 @@ osf_sigstack(struct sigstack __user *uss, struct sigstack __user *uoss) ...@@ -588,7 +588,7 @@ osf_sigstack(struct sigstack __user *uss, struct sigstack __user *uoss)
int error; int error;
if (uss) { if (uss) {
void *ss_sp; void __user *ss_sp;
error = -EFAULT; error = -EFAULT;
if (get_user(ss_sp, &uss->ss_sp)) if (get_user(ss_sp, &uss->ss_sp))
......
...@@ -304,7 +304,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs, ...@@ -304,7 +304,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
info.si_signo = SIGTRAP; info.si_signo = SIGTRAP;
info.si_errno = 0; info.si_errno = 0;
info.si_code = TRAP_BRKPT; info.si_code = TRAP_BRKPT;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGTRAP, &info, current); send_sig_info(SIGTRAP, &info, current);
} }
...@@ -342,7 +342,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs, ...@@ -342,7 +342,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
info.si_signo = SIGTRAP; info.si_signo = SIGTRAP;
info.si_errno = 0; info.si_errno = 0;
info.si_code = TRAP_BRKPT; info.si_code = TRAP_BRKPT;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGTRAP, &info, current); send_sig_info(SIGTRAP, &info, current);
} }
......
...@@ -228,7 +228,7 @@ do_entArith(unsigned long summary, unsigned long write_mask, ...@@ -228,7 +228,7 @@ do_entArith(unsigned long summary, unsigned long write_mask,
info.si_signo = SIGFPE; info.si_signo = SIGFPE;
info.si_errno = 0; info.si_errno = 0;
info.si_code = si_code; info.si_code = si_code;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
send_sig_info(SIGFPE, &info, current); send_sig_info(SIGFPE, &info, current);
} }
...@@ -256,7 +256,7 @@ do_entIF(unsigned long type, struct pt_regs *regs) ...@@ -256,7 +256,7 @@ do_entIF(unsigned long type, struct pt_regs *regs)
info.si_errno = 0; info.si_errno = 0;
info.si_code = TRAP_BRKPT; info.si_code = TRAP_BRKPT;
info.si_trapno = 0; info.si_trapno = 0;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
if (ptrace_cancel_bpt(current)) { if (ptrace_cancel_bpt(current)) {
regs->pc -= 4; /* make pc point to former bpt */ regs->pc -= 4; /* make pc point to former bpt */
...@@ -269,13 +269,13 @@ do_entIF(unsigned long type, struct pt_regs *regs) ...@@ -269,13 +269,13 @@ do_entIF(unsigned long type, struct pt_regs *regs)
info.si_signo = SIGTRAP; info.si_signo = SIGTRAP;
info.si_errno = 0; info.si_errno = 0;
info.si_code = __SI_FAULT; info.si_code = __SI_FAULT;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGTRAP, &info, current); send_sig_info(SIGTRAP, &info, current);
return; return;
case 2: /* gentrap */ case 2: /* gentrap */
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
info.si_trapno = regs->r16; info.si_trapno = regs->r16;
switch ((long) regs->r16) { switch ((long) regs->r16) {
case GEN_INTOVF: case GEN_INTOVF:
...@@ -337,7 +337,7 @@ do_entIF(unsigned long type, struct pt_regs *regs) ...@@ -337,7 +337,7 @@ do_entIF(unsigned long type, struct pt_regs *regs)
info.si_signo = signo; info.si_signo = signo;
info.si_errno = 0; info.si_errno = 0;
info.si_code = code; info.si_code = code;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
send_sig_info(signo, &info, current); send_sig_info(signo, &info, current);
return; return;
...@@ -365,7 +365,7 @@ do_entIF(unsigned long type, struct pt_regs *regs) ...@@ -365,7 +365,7 @@ do_entIF(unsigned long type, struct pt_regs *regs)
info.si_signo = SIGFPE; info.si_signo = SIGFPE;
info.si_errno = 0; info.si_errno = 0;
info.si_code = si_code; info.si_code = si_code;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
send_sig_info(SIGFPE, &info, current); send_sig_info(SIGFPE, &info, current);
return; return;
} }
...@@ -394,7 +394,7 @@ do_entIF(unsigned long type, struct pt_regs *regs) ...@@ -394,7 +394,7 @@ do_entIF(unsigned long type, struct pt_regs *regs)
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_ILLOPC; info.si_code = ILL_ILLOPC;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
send_sig_info(SIGILL, &info, current); send_sig_info(SIGILL, &info, current);
} }
...@@ -415,7 +415,7 @@ do_entDbg(struct pt_regs *regs) ...@@ -415,7 +415,7 @@ do_entDbg(struct pt_regs *regs)
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_ILLOPC; info.si_code = ILL_ILLOPC;
info.si_addr = (void *) regs->pc; info.si_addr = (void __user *) regs->pc;
force_sig_info(SIGILL, &info, current); force_sig_info(SIGILL, &info, current);
} }
...@@ -765,7 +765,7 @@ static int unauser_reg_offsets[32] = { ...@@ -765,7 +765,7 @@ static int unauser_reg_offsets[32] = {
#undef R #undef R
asmlinkage void asmlinkage void
do_entUnaUser(void * va, unsigned long opcode, do_entUnaUser(void __user * va, unsigned long opcode,
unsigned long reg, struct pt_regs *regs) unsigned long reg, struct pt_regs *regs)
{ {
static int cnt = 0; static int cnt = 0;
......
...@@ -211,7 +211,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr, ...@@ -211,7 +211,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
info.si_signo = SIGBUS; info.si_signo = SIGBUS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = BUS_ADRERR; info.si_code = BUS_ADRERR;
info.si_addr = (void *) address; info.si_addr = (void __user *) address;
force_sig_info(SIGBUS, &info, current); force_sig_info(SIGBUS, &info, current);
if (!user_mode(regs)) if (!user_mode(regs))
goto no_context; goto no_context;
...@@ -221,7 +221,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr, ...@@ -221,7 +221,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
info.si_signo = SIGSEGV; info.si_signo = SIGSEGV;
info.si_errno = 0; info.si_errno = 0;
info.si_code = si_code; info.si_code = si_code;
info.si_addr = (void *) address; info.si_addr = (void __user *) address;
force_sig_info(SIGSEGV, &info, current); force_sig_info(SIGSEGV, &info, current);
return; return;
......
...@@ -320,11 +320,11 @@ void init_8259A(int auto_eoi) ...@@ -320,11 +320,11 @@ void init_8259A(int auto_eoi)
static irqreturn_t math_error_irq(int cpl, void *dev_id, struct pt_regs *regs) static irqreturn_t math_error_irq(int cpl, void *dev_id, struct pt_regs *regs)
{ {
extern void math_error(void *); extern void math_error(void __user *);
outb(0,0xF0); outb(0,0xF0);
if (ignore_fpu_irq || !boot_cpu_data.hard_math) if (ignore_fpu_irq || !boot_cpu_data.hard_math)
return IRQ_NONE; return IRQ_NONE;
math_error((void *)regs->eip); math_error((void __user *)regs->eip);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
...@@ -336,12 +336,13 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) ...@@ -336,12 +336,13 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
/* These symbols are defined with the addresses in the vsyscall page. /* These symbols are defined with the addresses in the vsyscall page.
See vsyscall-sigreturn.S. */ See vsyscall-sigreturn.S. */
extern void __kernel_sigreturn, __kernel_rt_sigreturn; extern void __user __kernel_sigreturn;
extern void __user __kernel_rt_sigreturn;
static void setup_frame(int sig, struct k_sigaction *ka, static void setup_frame(int sig, struct k_sigaction *ka,
sigset_t *set, struct pt_regs * regs) sigset_t *set, struct pt_regs * regs)
{ {
void *restorer; void __user *restorer;
struct sigframe __user *frame; struct sigframe __user *frame;
int err = 0; int err = 0;
...@@ -418,7 +419,7 @@ static void setup_frame(int sig, struct k_sigaction *ka, ...@@ -418,7 +419,7 @@ static void setup_frame(int sig, struct k_sigaction *ka,
static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
sigset_t *set, struct pt_regs * regs) sigset_t *set, struct pt_regs * regs)
{ {
void *restorer; void __user *restorer;
struct rt_sigframe __user *frame; struct rt_sigframe __user *frame;
int err = 0; int err = 0;
......
...@@ -397,7 +397,7 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \ ...@@ -397,7 +397,7 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
info.si_signo = signr; \ info.si_signo = signr; \
info.si_errno = 0; \ info.si_errno = 0; \
info.si_code = sicode; \ info.si_code = sicode; \
info.si_addr = (void *)siaddr; \ info.si_addr = (void __user *)siaddr; \
do_trap(trapnr, signr, str, 0, regs, error_code, &info); \ do_trap(trapnr, signr, str, 0, regs, error_code, &info); \
} }
...@@ -414,7 +414,7 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \ ...@@ -414,7 +414,7 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
info.si_signo = signr; \ info.si_signo = signr; \
info.si_errno = 0; \ info.si_errno = 0; \
info.si_code = sicode; \ info.si_code = sicode; \
info.si_addr = (void *)siaddr; \ info.si_addr = (void __user *)siaddr; \
do_trap(trapnr, signr, str, 1, regs, error_code, &info); \ do_trap(trapnr, signr, str, 1, regs, error_code, &info); \
} }
...@@ -630,8 +630,8 @@ asmlinkage void do_debug(struct pt_regs * regs, long error_code) ...@@ -630,8 +630,8 @@ asmlinkage void do_debug(struct pt_regs * regs, long error_code)
/* If this is a kernel mode trap, save the user PC on entry to /* If this is a kernel mode trap, save the user PC on entry to
* the kernel, that's what the debugger can make sense of. * the kernel, that's what the debugger can make sense of.
*/ */
info.si_addr = ((regs->xcs & 3) == 0) ? (void *)tsk->thread.eip : info.si_addr = ((regs->xcs & 3) == 0) ? (void __user *)tsk->thread.eip
(void *)regs->eip; : (void __user *)regs->eip;
force_sig_info(SIGTRAP, &info, tsk); force_sig_info(SIGTRAP, &info, tsk);
/* Disable additional traps. They'll be re-enabled when /* Disable additional traps. They'll be re-enabled when
...@@ -659,7 +659,7 @@ asmlinkage void do_debug(struct pt_regs * regs, long error_code) ...@@ -659,7 +659,7 @@ asmlinkage void do_debug(struct pt_regs * regs, long error_code)
* the correct behaviour even in the presence of the asynchronous * the correct behaviour even in the presence of the asynchronous
* IRQ13 behaviour * IRQ13 behaviour
*/ */
void math_error(void *eip) void math_error(void __user *eip)
{ {
struct task_struct * task; struct task_struct * task;
siginfo_t info; siginfo_t info;
...@@ -718,10 +718,10 @@ void math_error(void *eip) ...@@ -718,10 +718,10 @@ void math_error(void *eip)
asmlinkage void do_coprocessor_error(struct pt_regs * regs, long error_code) asmlinkage void do_coprocessor_error(struct pt_regs * regs, long error_code)
{ {
ignore_fpu_irq = 1; ignore_fpu_irq = 1;
math_error((void *)regs->eip); math_error((void __user *)regs->eip);
} }
void simd_math_error(void *eip) void simd_math_error(void __user *eip)
{ {
struct task_struct * task; struct task_struct * task;
siginfo_t info; siginfo_t info;
...@@ -775,7 +775,7 @@ asmlinkage void do_simd_coprocessor_error(struct pt_regs * regs, ...@@ -775,7 +775,7 @@ asmlinkage void do_simd_coprocessor_error(struct pt_regs * regs,
if (cpu_has_xmm) { if (cpu_has_xmm) {
/* Handle SIMD FPU exceptions on PIII+ processors. */ /* Handle SIMD FPU exceptions on PIII+ processors. */
ignore_fpu_irq = 1; ignore_fpu_irq = 1;
simd_math_error((void *)regs->eip); simd_math_error((void __user *)regs->eip);
} else { } else {
/* /*
* Handle strange cache flush from user space exception * Handle strange cache flush from user space exception
......
...@@ -389,7 +389,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code) ...@@ -389,7 +389,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
info.si_signo = SIGSEGV; info.si_signo = SIGSEGV;
info.si_errno = 0; info.si_errno = 0;
/* info.si_code has been set above */ /* info.si_code has been set above */
info.si_addr = (void *)address; info.si_addr = (void __user *)address;
force_sig_info(SIGSEGV, &info, tsk); force_sig_info(SIGSEGV, &info, tsk);
return; return;
} }
...@@ -499,7 +499,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code) ...@@ -499,7 +499,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
info.si_signo = SIGBUS; info.si_signo = SIGBUS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = BUS_ADRERR; info.si_code = BUS_ADRERR;
info.si_addr = (void *)address; info.si_addr = (void __user *)address;
force_sig_info(SIGBUS, &info, tsk); force_sig_info(SIGBUS, &info, tsk);
return; return;
......
...@@ -439,7 +439,7 @@ setup_frame(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *old ...@@ -439,7 +439,7 @@ setup_frame(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *old
unsigned long pc = regs->pc; unsigned long pc = regs->pc;
unsigned long npc = regs->npc; unsigned long npc = regs->npc;
struct thread_info *tp = current_thread_info(); struct thread_info *tp = current_thread_info();
void *sig_address; void __user *sig_address;
int sig_code; int sig_code;
synchronize_user_stack(); synchronize_user_stack();
......
...@@ -375,7 +375,7 @@ sparc_breakpoint (struct pt_regs *regs) ...@@ -375,7 +375,7 @@ sparc_breakpoint (struct pt_regs *regs)
info.si_signo = SIGTRAP; info.si_signo = SIGTRAP;
info.si_errno = 0; info.si_errno = 0;
info.si_code = TRAP_BRKPT; info.si_code = TRAP_BRKPT;
info.si_addr = (void *)regs->pc; info.si_addr = (void __user *)regs->pc;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGTRAP, &info, current); force_sig_info(SIGTRAP, &info, current);
......
...@@ -505,7 +505,7 @@ asmlinkage int sunos_nosys(void) ...@@ -505,7 +505,7 @@ asmlinkage int sunos_nosys(void)
info.si_signo = SIGSYS; info.si_signo = SIGSYS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = __SI_FAULT|0x100; info.si_code = __SI_FAULT|0x100;
info.si_addr = (void *)regs->pc; info.si_addr = (void __user *)regs->pc;
info.si_trapno = regs->u_regs[UREG_G1]; info.si_trapno = regs->u_regs[UREG_G1];
send_sig_info(SIGSYS, &info, current); send_sig_info(SIGSYS, &info, current);
if (cnt++ < 4) { if (cnt++ < 4) {
......
...@@ -147,7 +147,7 @@ void do_hw_interrupt(struct pt_regs *regs, unsigned long type) ...@@ -147,7 +147,7 @@ void do_hw_interrupt(struct pt_regs *regs, unsigned long type)
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_ILLTRP; info.si_code = ILL_ILLTRP;
info.si_addr = (void *)regs->pc; info.si_addr = (void __user *)regs->pc;
info.si_trapno = type - 0x80; info.si_trapno = type - 0x80;
force_sig_info(SIGILL, &info, current); force_sig_info(SIGILL, &info, current);
} }
...@@ -170,7 +170,7 @@ void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned lon ...@@ -170,7 +170,7 @@ void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned lon
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_ILLOPC; info.si_code = ILL_ILLOPC;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGILL, &info, current); send_sig_info(SIGILL, &info, current);
} }
...@@ -185,7 +185,7 @@ void do_priv_instruction(struct pt_regs *regs, unsigned long pc, unsigned long n ...@@ -185,7 +185,7 @@ void do_priv_instruction(struct pt_regs *regs, unsigned long pc, unsigned long n
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_PRVOPC; info.si_code = ILL_PRVOPC;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGILL, &info, current); send_sig_info(SIGILL, &info, current);
} }
...@@ -354,7 +354,7 @@ void do_fpe_trap(struct pt_regs *regs, unsigned long pc, unsigned long npc, ...@@ -354,7 +354,7 @@ void do_fpe_trap(struct pt_regs *regs, unsigned long pc, unsigned long npc,
fsr = fpt->thread.fsr; fsr = fpt->thread.fsr;
info.si_signo = SIGFPE; info.si_signo = SIGFPE;
info.si_errno = 0; info.si_errno = 0;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
info.si_code = __SI_FAULT; info.si_code = __SI_FAULT;
if ((fsr & 0x1c000) == (1 << 14)) { if ((fsr & 0x1c000) == (1 << 14)) {
...@@ -388,7 +388,7 @@ void handle_tag_overflow(struct pt_regs *regs, unsigned long pc, unsigned long n ...@@ -388,7 +388,7 @@ void handle_tag_overflow(struct pt_regs *regs, unsigned long pc, unsigned long n
info.si_signo = SIGEMT; info.si_signo = SIGEMT;
info.si_errno = 0; info.si_errno = 0;
info.si_code = EMT_TAGOVF; info.si_code = EMT_TAGOVF;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGEMT, &info, current); send_sig_info(SIGEMT, &info, current);
} }
...@@ -417,7 +417,7 @@ void handle_reg_access(struct pt_regs *regs, unsigned long pc, unsigned long npc ...@@ -417,7 +417,7 @@ void handle_reg_access(struct pt_regs *regs, unsigned long pc, unsigned long npc
info.si_signo = SIGBUS; info.si_signo = SIGBUS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = BUS_OBJERR; info.si_code = BUS_OBJERR;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGBUS, &info, current); force_sig_info(SIGBUS, &info, current);
} }
...@@ -430,7 +430,7 @@ void handle_cp_disabled(struct pt_regs *regs, unsigned long pc, unsigned long np ...@@ -430,7 +430,7 @@ void handle_cp_disabled(struct pt_regs *regs, unsigned long pc, unsigned long np
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_COPROC; info.si_code = ILL_COPROC;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGILL, &info, current); send_sig_info(SIGILL, &info, current);
} }
...@@ -447,7 +447,7 @@ void handle_cp_exception(struct pt_regs *regs, unsigned long pc, unsigned long n ...@@ -447,7 +447,7 @@ void handle_cp_exception(struct pt_regs *regs, unsigned long pc, unsigned long n
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_COPROC; info.si_code = ILL_COPROC;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGILL, &info, current); send_sig_info(SIGILL, &info, current);
} }
...@@ -460,7 +460,7 @@ void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, unsigned long npc ...@@ -460,7 +460,7 @@ void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, unsigned long npc
info.si_signo = SIGFPE; info.si_signo = SIGFPE;
info.si_errno = 0; info.si_errno = 0;
info.si_code = FPE_INTDIV; info.si_code = FPE_INTDIV;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGFPE, &info, current); send_sig_info(SIGFPE, &info, current);
} }
......
...@@ -473,7 +473,7 @@ void user_mna_trap_fault(struct pt_regs *regs, unsigned int insn) ...@@ -473,7 +473,7 @@ void user_mna_trap_fault(struct pt_regs *regs, unsigned int insn)
info.si_signo = SIGBUS; info.si_signo = SIGBUS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = BUS_ADRALN; info.si_code = BUS_ADRALN;
info.si_addr = (void *)safe_compute_effective_address(regs, insn); info.si_addr = (void __user *)safe_compute_effective_address(regs, insn);
info.si_trapno = 0; info.si_trapno = 0;
send_sig_info(SIGBUS, &info, current); send_sig_info(SIGBUS, &info, current);
} }
......
...@@ -326,7 +326,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write, ...@@ -326,7 +326,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
info.si_errno = 0; info.si_errno = 0;
/* info.si_code set above to make clear whether /* info.si_code set above to make clear whether
this was a SEGV_MAPERR or SEGV_ACCERR fault. */ this was a SEGV_MAPERR or SEGV_ACCERR fault. */
info.si_addr = (void *) compute_si_addr(regs, text_fault); info.si_addr = (void __user *)compute_si_addr(regs, text_fault);
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info (SIGSEGV, &info, tsk); force_sig_info (SIGSEGV, &info, tsk);
return; return;
...@@ -380,7 +380,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write, ...@@ -380,7 +380,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
info.si_signo = SIGBUS; info.si_signo = SIGBUS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = BUS_ADRERR; info.si_code = BUS_ADRERR;
info.si_addr = (void *) compute_si_addr(regs, text_fault); info.si_addr = (void __user *) compute_si_addr(regs, text_fault);
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info (SIGBUS, &info, tsk); force_sig_info (SIGBUS, &info, tsk);
if (!from_user) if (!from_user)
...@@ -549,7 +549,7 @@ inline void force_user_fault(unsigned long address, int write) ...@@ -549,7 +549,7 @@ inline void force_user_fault(unsigned long address, int write)
info.si_errno = 0; info.si_errno = 0;
/* info.si_code set above to make clear whether /* info.si_code set above to make clear whether
this was a SEGV_MAPERR or SEGV_ACCERR fault. */ this was a SEGV_MAPERR or SEGV_ACCERR fault. */
info.si_addr = (void *) address; info.si_addr = (void __user *) address;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info (SIGSEGV, &info, tsk); force_sig_info (SIGSEGV, &info, tsk);
return; return;
...@@ -559,7 +559,7 @@ inline void force_user_fault(unsigned long address, int write) ...@@ -559,7 +559,7 @@ inline void force_user_fault(unsigned long address, int write)
info.si_signo = SIGBUS; info.si_signo = SIGBUS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = BUS_ADRERR; info.si_code = BUS_ADRERR;
info.si_addr = (void *) address; info.si_addr = (void __user *) address;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info (SIGBUS, &info, tsk); force_sig_info (SIGBUS, &info, tsk);
} }
......
...@@ -461,7 +461,7 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) ...@@ -461,7 +461,7 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
err |= restore_fpu_state32(regs, &sf->fpu_state); err |= restore_fpu_state32(regs, &sf->fpu_state);
err |= copy_from_user(&seta, &sf->mask, sizeof(compat_sigset_t)); err |= copy_from_user(&seta, &sf->mask, sizeof(compat_sigset_t));
err |= __get_user(u_ss_sp, &sf->stack.ss_sp); err |= __get_user(u_ss_sp, &sf->stack.ss_sp);
st.ss_sp = (void *) (long) u_ss_sp; st.ss_sp = compat_ptr(u_ss_sp);
err |= __get_user(st.ss_flags, &sf->stack.ss_flags); err |= __get_user(st.ss_flags, &sf->stack.ss_flags);
err |= __get_user(st.ss_size, &sf->stack.ss_size); err |= __get_user(st.ss_size, &sf->stack.ss_size);
if (err) if (err)
...@@ -520,7 +520,7 @@ setup_frame32(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *o ...@@ -520,7 +520,7 @@ setup_frame32(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *o
struct sigcontext32 __user *sc; struct sigcontext32 __user *sc;
unsigned int seta[_COMPAT_NSIG_WORDS]; unsigned int seta[_COMPAT_NSIG_WORDS];
int err = 0; int err = 0;
void *sig_address; void __user *sig_address;
int sig_code; int sig_code;
unsigned long pc = regs->tpc; unsigned long pc = regs->tpc;
unsigned long npc = regs->tnpc; unsigned long npc = regs->tnpc;
...@@ -1031,7 +1031,7 @@ asmlinkage int svr4_setcontext(svr4_ucontext_t __user *c, struct pt_regs *regs) ...@@ -1031,7 +1031,7 @@ asmlinkage int svr4_setcontext(svr4_ucontext_t __user *c, struct pt_regs *regs)
set.sig[1] = setv.sigbits[2] | (((long)setv.sigbits[3]) << 32); set.sig[1] = setv.sigbits[2] | (((long)setv.sigbits[3]) << 32);
err |= __get_user(u_ss_sp, &c->stack.sp); err |= __get_user(u_ss_sp, &c->stack.sp);
st.ss_sp = (void *) (long) u_ss_sp; st.ss_sp = compat_ptr(u_ss_sp);
err |= __get_user(st.ss_flags, &c->stack.flags); err |= __get_user(st.ss_flags, &c->stack.flags);
err |= __get_user(st.ss_size, &c->stack.size); err |= __get_user(st.ss_size, &c->stack.size);
if (err) if (err)
...@@ -1360,7 +1360,7 @@ asmlinkage long do_sys32_sigaltstack(u32 ussa, u32 uossa, unsigned long sp) ...@@ -1360,7 +1360,7 @@ asmlinkage long do_sys32_sigaltstack(u32 ussa, u32 uossa, unsigned long sp)
__get_user(uss.ss_flags, &((stack_t32 __user *)(long)ussa)->ss_flags) || __get_user(uss.ss_flags, &((stack_t32 __user *)(long)ussa)->ss_flags) ||
__get_user(uss.ss_size, &((stack_t32 __user *)(long)ussa)->ss_size))) __get_user(uss.ss_size, &((stack_t32 __user *)(long)ussa)->ss_size)))
return -EFAULT; return -EFAULT;
uss.ss_sp = (void *) (long) u_ss_sp; uss.ss_sp = compat_ptr(u_ss_sp);
old_fs = get_fs(); old_fs = get_fs();
set_fs(KERNEL_DS); set_fs(KERNEL_DS);
ret = do_sigaltstack(ussa ? (stack_t __user *) &uss : NULL, ret = do_sigaltstack(ussa ? (stack_t __user *) &uss : NULL,
......
...@@ -448,7 +448,7 @@ asmlinkage void sparc_breakpoint(struct pt_regs *regs) ...@@ -448,7 +448,7 @@ asmlinkage void sparc_breakpoint(struct pt_regs *regs)
info.si_signo = SIGTRAP; info.si_signo = SIGTRAP;
info.si_errno = 0; info.si_errno = 0;
info.si_code = TRAP_BRKPT; info.si_code = TRAP_BRKPT;
info.si_addr = (void *)regs->tpc; info.si_addr = (void __user *)regs->tpc;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGTRAP, &info, current); force_sig_info(SIGTRAP, &info, current);
#ifdef DEBUG_SPARC_BREAKPOINT #ifdef DEBUG_SPARC_BREAKPOINT
......
...@@ -1293,9 +1293,9 @@ asmlinkage long compat_sys_sigaction(int sig, struct old_sigaction32 __user *act ...@@ -1293,9 +1293,9 @@ asmlinkage long compat_sys_sigaction(int sig, struct old_sigaction32 __user *act
u32 u_handler, u_restorer; u32 u_handler, u_restorer;
ret = get_user(u_handler, &act->sa_handler); ret = get_user(u_handler, &act->sa_handler);
new_ka.sa.sa_handler = (void *) (long) u_handler; new_ka.sa.sa_handler = compat_ptr(u_handler);
ret |= __get_user(u_restorer, &act->sa_restorer); ret |= __get_user(u_restorer, &act->sa_restorer);
new_ka.sa.sa_restorer = (void *) (long) u_restorer; new_ka.sa.sa_restorer = compat_ptr(u_restorer);
ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags);
ret |= __get_user(mask, &act->sa_mask); ret |= __get_user(mask, &act->sa_mask);
if (ret) if (ret)
...@@ -1340,7 +1340,7 @@ asmlinkage long compat_sys_rt_sigaction(int sig, ...@@ -1340,7 +1340,7 @@ asmlinkage long compat_sys_rt_sigaction(int sig,
new_ka.ka_restorer = restorer; new_ka.ka_restorer = restorer;
ret = get_user(u_handler, &act->sa_handler); ret = get_user(u_handler, &act->sa_handler);
new_ka.sa.sa_handler = (void *) (long) u_handler; new_ka.sa.sa_handler = compat_ptr(u_handler);
ret |= __copy_from_user(&set32, &act->sa_mask, sizeof(compat_sigset_t)); ret |= __copy_from_user(&set32, &act->sa_mask, sizeof(compat_sigset_t));
switch (_NSIG_WORDS) { switch (_NSIG_WORDS) {
case 4: new_ka.sa.sa_mask.sig[3] = set32.sig[6] | (((long)set32.sig[7]) << 32); case 4: new_ka.sa.sa_mask.sig[3] = set32.sig[6] | (((long)set32.sig[7]) << 32);
...@@ -1350,7 +1350,7 @@ asmlinkage long compat_sys_rt_sigaction(int sig, ...@@ -1350,7 +1350,7 @@ asmlinkage long compat_sys_rt_sigaction(int sig,
} }
ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags);
ret |= __get_user(u_restorer, &act->sa_restorer); ret |= __get_user(u_restorer, &act->sa_restorer);
new_ka.sa.sa_restorer = (void *) (long) u_restorer; new_ka.sa.sa_restorer = compat_ptr(u_restorer);
if (ret) if (ret)
return -EFAULT; return -EFAULT;
} }
......
...@@ -465,7 +465,7 @@ asmlinkage int sunos_nosys(void) ...@@ -465,7 +465,7 @@ asmlinkage int sunos_nosys(void)
info.si_signo = SIGSYS; info.si_signo = SIGSYS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = __SI_FAULT|0x100; info.si_code = __SI_FAULT|0x100;
info.si_addr = (void *)regs->tpc; info.si_addr = (void __user *)regs->tpc;
info.si_trapno = regs->u_regs[UREG_G1]; info.si_trapno = regs->u_regs[UREG_G1];
send_sig_info(SIGSYS, &info, current); send_sig_info(SIGSYS, &info, current);
if (cnt++ < 4) { if (cnt++ < 4) {
...@@ -1280,7 +1280,7 @@ asmlinkage int sunos_sigaction (int sig, ...@@ -1280,7 +1280,7 @@ asmlinkage int sunos_sigaction (int sig,
if (get_user(u_handler, &act->sa_handler) || if (get_user(u_handler, &act->sa_handler) ||
__get_user(new_ka.sa.sa_flags, &act->sa_flags)) __get_user(new_ka.sa.sa_flags, &act->sa_flags))
return -EFAULT; return -EFAULT;
new_ka.sa.sa_handler = (void *) (long) u_handler; new_ka.sa.sa_handler = compat_ptr(u_handler);
__get_user(mask, &act->sa_mask); __get_user(mask, &act->sa_mask);
new_ka.sa.sa_restorer = NULL; new_ka.sa.sa_restorer = NULL;
new_ka.ka_restorer = NULL; new_ka.ka_restorer = NULL;
......
...@@ -93,7 +93,7 @@ void bad_trap (struct pt_regs *regs, long lvl) ...@@ -93,7 +93,7 @@ void bad_trap (struct pt_regs *regs, long lvl)
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_ILLTRP; info.si_code = ILL_ILLTRP;
info.si_addr = (void *)regs->tpc; info.si_addr = (void __user *)regs->tpc;
info.si_trapno = lvl; info.si_trapno = lvl;
force_sig_info(SIGILL, &info, current); force_sig_info(SIGILL, &info, current);
} }
...@@ -133,7 +133,7 @@ void instruction_access_exception(struct pt_regs *regs, ...@@ -133,7 +133,7 @@ void instruction_access_exception(struct pt_regs *regs,
info.si_signo = SIGSEGV; info.si_signo = SIGSEGV;
info.si_errno = 0; info.si_errno = 0;
info.si_code = SEGV_MAPERR; info.si_code = SEGV_MAPERR;
info.si_addr = (void *)regs->tpc; info.si_addr = (void __user *)regs->tpc;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGSEGV, &info, current); force_sig_info(SIGSEGV, &info, current);
} }
...@@ -176,7 +176,7 @@ void data_access_exception (struct pt_regs *regs, ...@@ -176,7 +176,7 @@ void data_access_exception (struct pt_regs *regs,
info.si_signo = SIGSEGV; info.si_signo = SIGSEGV;
info.si_errno = 0; info.si_errno = 0;
info.si_code = SEGV_MAPERR; info.si_code = SEGV_MAPERR;
info.si_addr = (void *)sfar; info.si_addr = (void __user *)sfar;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGSEGV, &info, current); force_sig_info(SIGSEGV, &info, current);
} }
...@@ -1617,7 +1617,7 @@ void do_fpe_common(struct pt_regs *regs) ...@@ -1617,7 +1617,7 @@ void do_fpe_common(struct pt_regs *regs)
} }
info.si_signo = SIGFPE; info.si_signo = SIGFPE;
info.si_errno = 0; info.si_errno = 0;
info.si_addr = (void *)regs->tpc; info.si_addr = (void __user *)regs->tpc;
info.si_trapno = 0; info.si_trapno = 0;
info.si_code = __SI_FAULT; info.si_code = __SI_FAULT;
if ((fsr & 0x1c000) == (1 << 14)) { if ((fsr & 0x1c000) == (1 << 14)) {
...@@ -1672,7 +1672,7 @@ void do_tof(struct pt_regs *regs) ...@@ -1672,7 +1672,7 @@ void do_tof(struct pt_regs *regs)
info.si_signo = SIGEMT; info.si_signo = SIGEMT;
info.si_errno = 0; info.si_errno = 0;
info.si_code = EMT_TAGOVF; info.si_code = EMT_TAGOVF;
info.si_addr = (void *)regs->tpc; info.si_addr = (void __user *)regs->tpc;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGEMT, &info, current); force_sig_info(SIGEMT, &info, current);
} }
...@@ -1690,7 +1690,7 @@ void do_div0(struct pt_regs *regs) ...@@ -1690,7 +1690,7 @@ void do_div0(struct pt_regs *regs)
info.si_signo = SIGFPE; info.si_signo = SIGFPE;
info.si_errno = 0; info.si_errno = 0;
info.si_code = FPE_INTDIV; info.si_code = FPE_INTDIV;
info.si_addr = (void *)regs->tpc; info.si_addr = (void __user *)regs->tpc;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGFPE, &info, current); force_sig_info(SIGFPE, &info, current);
} }
...@@ -1850,7 +1850,7 @@ void do_illegal_instruction(struct pt_regs *regs) ...@@ -1850,7 +1850,7 @@ void do_illegal_instruction(struct pt_regs *regs)
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_ILLOPC; info.si_code = ILL_ILLOPC;
info.si_addr = (void *)pc; info.si_addr = (void __user *)pc;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGILL, &info, current); force_sig_info(SIGILL, &info, current);
} }
...@@ -1872,7 +1872,7 @@ void mem_address_unaligned(struct pt_regs *regs, unsigned long sfar, unsigned lo ...@@ -1872,7 +1872,7 @@ void mem_address_unaligned(struct pt_regs *regs, unsigned long sfar, unsigned lo
info.si_signo = SIGBUS; info.si_signo = SIGBUS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = BUS_ADRALN; info.si_code = BUS_ADRALN;
info.si_addr = (void *)sfar; info.si_addr = (void __user *)sfar;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGBUS, &info, current); force_sig_info(SIGBUS, &info, current);
} }
...@@ -1888,7 +1888,7 @@ void do_privop(struct pt_regs *regs) ...@@ -1888,7 +1888,7 @@ void do_privop(struct pt_regs *regs)
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_PRVOPC; info.si_code = ILL_PRVOPC;
info.si_addr = (void *)regs->tpc; info.si_addr = (void __user *)regs->tpc;
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(SIGILL, &info, current); force_sig_info(SIGILL, &info, current);
} }
......
...@@ -218,9 +218,9 @@ static void do_fault_siginfo(int code, int sig, struct pt_regs *regs, ...@@ -218,9 +218,9 @@ static void do_fault_siginfo(int code, int sig, struct pt_regs *regs,
info.si_signo = sig; info.si_signo = sig;
info.si_errno = 0; info.si_errno = 0;
if (fault_code & FAULT_CODE_ITLB) if (fault_code & FAULT_CODE_ITLB)
info.si_addr = (void *) regs->tpc; info.si_addr = (void __user *) regs->tpc;
else else
info.si_addr = (void *) info.si_addr = (void __user *)
compute_effective_address(regs, insn, 0); compute_effective_address(regs, insn, 0);
info.si_trapno = 0; info.si_trapno = 0;
force_sig_info(sig, &info, current); force_sig_info(sig, &info, current);
......
...@@ -109,7 +109,7 @@ int ia32_copy_siginfo_from_user(siginfo_t *to, siginfo_t32 __user *from) ...@@ -109,7 +109,7 @@ int ia32_copy_siginfo_from_user(siginfo_t *to, siginfo_t32 __user *from)
err |= __get_user(to->si_pid, &from->si_pid); err |= __get_user(to->si_pid, &from->si_pid);
err |= __get_user(to->si_uid, &from->si_uid); err |= __get_user(to->si_uid, &from->si_uid);
err |= __get_user(ptr32, &from->si_ptr); err |= __get_user(ptr32, &from->si_ptr);
to->si_ptr = (void*)(u64)ptr32; to->si_ptr = compat_ptr(ptr32);
return err; return err;
} }
...@@ -151,7 +151,7 @@ sys32_sigaltstack(const stack_ia32_t __user *uss_ptr, ...@@ -151,7 +151,7 @@ sys32_sigaltstack(const stack_ia32_t __user *uss_ptr,
__get_user(uss.ss_flags, &uss_ptr->ss_flags) || __get_user(uss.ss_flags, &uss_ptr->ss_flags) ||
__get_user(uss.ss_size, &uss_ptr->ss_size)) __get_user(uss.ss_size, &uss_ptr->ss_size))
return -EFAULT; return -EFAULT;
uss.ss_sp = (void *)(u64)ptr; uss.ss_sp = compat_ptr(ptr);
} }
seg = get_fs(); seg = get_fs();
set_fs(KERNEL_DS); set_fs(KERNEL_DS);
...@@ -448,7 +448,7 @@ void ia32_setup_frame(int sig, struct k_sigaction *ka, ...@@ -448,7 +448,7 @@ void ia32_setup_frame(int sig, struct k_sigaction *ka,
/* Return stub is in 32bit vsyscall page */ /* Return stub is in 32bit vsyscall page */
{ {
void *restorer = VSYSCALL32_SIGRETURN; void __user *restorer = VSYSCALL32_SIGRETURN;
if (ka->sa.sa_flags & SA_RESTORER) if (ka->sa.sa_flags & SA_RESTORER)
restorer = ka->sa.sa_restorer; restorer = ka->sa.sa_restorer;
err |= __put_user(ptr_to_u32(restorer), &frame->pretcode); err |= __put_user(ptr_to_u32(restorer), &frame->pretcode);
...@@ -541,7 +541,7 @@ void ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, ...@@ -541,7 +541,7 @@ void ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
{ {
void *restorer = VSYSCALL32_RTSIGRETURN; void __user *restorer = VSYSCALL32_RTSIGRETURN;
if (ka->sa.sa_flags & SA_RESTORER) if (ka->sa.sa_flags & SA_RESTORER)
restorer = ka->sa.sa_restorer; restorer = ka->sa.sa_restorer;
err |= __put_user(ptr_to_u32(restorer), &frame->pretcode); err |= __put_user(ptr_to_u32(restorer), &frame->pretcode);
......
...@@ -448,7 +448,7 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \ ...@@ -448,7 +448,7 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
info.si_signo = signr; \ info.si_signo = signr; \
info.si_errno = 0; \ info.si_errno = 0; \
info.si_code = sicode; \ info.si_code = sicode; \
info.si_addr = (void *)siaddr; \ info.si_addr = (void __user *)siaddr; \
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) == NOTIFY_BAD) \ if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) == NOTIFY_BAD) \
return; \ return; \
do_trap(trapnr, signr, str, regs, error_code, &info); \ do_trap(trapnr, signr, str, regs, error_code, &info); \
...@@ -662,7 +662,7 @@ asmlinkage void *do_debug(struct pt_regs * regs, unsigned long error_code) ...@@ -662,7 +662,7 @@ asmlinkage void *do_debug(struct pt_regs * regs, unsigned long error_code)
if ((regs->cs & 3) == 0) if ((regs->cs & 3) == 0)
goto clear_dr7; goto clear_dr7;
info.si_addr = (void *)regs->rip; info.si_addr = (void __user *)regs->rip;
force_sig_info(SIGTRAP, &info, tsk); force_sig_info(SIGTRAP, &info, tsk);
clear_dr7: clear_dr7:
asm volatile("movq %0,%%db7"::"r"(0UL)); asm volatile("movq %0,%%db7"::"r"(0UL));
...@@ -686,7 +686,7 @@ asmlinkage void *do_debug(struct pt_regs * regs, unsigned long error_code) ...@@ -686,7 +686,7 @@ asmlinkage void *do_debug(struct pt_regs * regs, unsigned long error_code)
* the correct behaviour even in the presence of the asynchronous * the correct behaviour even in the presence of the asynchronous
* IRQ13 behaviour * IRQ13 behaviour
*/ */
void math_error(void *rip) void math_error(void __user *rip)
{ {
struct task_struct * task; struct task_struct * task;
siginfo_t info; siginfo_t info;
...@@ -743,7 +743,7 @@ void math_error(void *rip) ...@@ -743,7 +743,7 @@ void math_error(void *rip)
asmlinkage void do_coprocessor_error(struct pt_regs * regs) asmlinkage void do_coprocessor_error(struct pt_regs * regs)
{ {
conditional_sti(regs); conditional_sti(regs);
math_error((void *)regs->rip); math_error((void __user *)regs->rip);
} }
asmlinkage void bad_intr(void) asmlinkage void bad_intr(void)
...@@ -751,7 +751,7 @@ asmlinkage void bad_intr(void) ...@@ -751,7 +751,7 @@ asmlinkage void bad_intr(void)
printk("bad interrupt"); printk("bad interrupt");
} }
static inline void simd_math_error(void *rip) static inline void simd_math_error(void __user *rip)
{ {
struct task_struct * task; struct task_struct * task;
siginfo_t info; siginfo_t info;
...@@ -802,7 +802,7 @@ static inline void simd_math_error(void *rip) ...@@ -802,7 +802,7 @@ static inline void simd_math_error(void *rip)
asmlinkage void do_simd_coprocessor_error(struct pt_regs * regs) asmlinkage void do_simd_coprocessor_error(struct pt_regs * regs)
{ {
conditional_sti(regs); conditional_sti(regs);
simd_math_error((void *)regs->rip); simd_math_error((void __user *)regs->rip);
} }
asmlinkage void do_spurious_interrupt_bug(struct pt_regs * regs) asmlinkage void do_spurious_interrupt_bug(struct pt_regs * regs)
......
...@@ -389,7 +389,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code) ...@@ -389,7 +389,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
info.si_signo = SIGSEGV; info.si_signo = SIGSEGV;
info.si_errno = 0; info.si_errno = 0;
/* info.si_code has been set above */ /* info.si_code has been set above */
info.si_addr = (void *)address; info.si_addr = (void __user *)address;
force_sig_info(SIGSEGV, &info, tsk); force_sig_info(SIGSEGV, &info, tsk);
return; return;
} }
...@@ -463,7 +463,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code) ...@@ -463,7 +463,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
info.si_signo = SIGBUS; info.si_signo = SIGBUS;
info.si_errno = 0; info.si_errno = 0;
info.si_code = BUS_ADRERR; info.si_code = BUS_ADRERR;
info.si_addr = (void *)address; info.si_addr = (void __user *)address;
force_sig_info(SIGBUS, &info, tsk); force_sig_info(SIGBUS, &info, tsk);
return; return;
......
...@@ -269,7 +269,7 @@ static void async_completed(struct urb *urb, struct pt_regs *regs) ...@@ -269,7 +269,7 @@ static void async_completed(struct urb *urb, struct pt_regs *regs)
sinfo.si_signo = as->signr; sinfo.si_signo = as->signr;
sinfo.si_errno = as->urb->status; sinfo.si_errno = as->urb->status;
sinfo.si_code = SI_ASYNCIO; sinfo.si_code = SI_ASYNCIO;
sinfo.si_addr = (void *)as->userurb; sinfo.si_addr = as->userurb;
send_sig_info(as->signr, &sinfo, as->task); send_sig_info(as->signr, &sinfo, as->task);
} }
wake_up(&ps->wait); wake_up(&ps->wait);
......
...@@ -128,7 +128,11 @@ typedef unsigned long sigset_t; ...@@ -128,7 +128,11 @@ typedef unsigned long sigset_t;
#define SIG_SETMASK 3 /* for setting the signal mask */ #define SIG_SETMASK 3 /* for setting the signal mask */
/* Type of a signal handler. */ /* Type of a signal handler. */
typedef void (*__sighandler_t)(int); typedef void __signalfn_t(int);
typedef __signalfn_t __user *__sighandler_t;
typedef void __restorefn_t(void);
typedef __restorefn_t __user *__sigrestore_t;
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */ #define SIG_DFL ((__sighandler_t)0) /* default signal handling */
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */ #define SIG_IGN ((__sighandler_t)1) /* ignore signal */
...@@ -149,7 +153,7 @@ struct sigaction { ...@@ -149,7 +153,7 @@ struct sigaction {
struct k_sigaction { struct k_sigaction {
struct sigaction sa; struct sigaction sa;
void (*ka_restorer)(void); __sigrestore_t ka_restorer;
}; };
#else #else
/* Here we must cater to libcs that poke about in kernel headers. */ /* Here we must cater to libcs that poke about in kernel headers. */
...@@ -169,7 +173,7 @@ struct sigaction { ...@@ -169,7 +173,7 @@ struct sigaction {
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
typedef struct sigaltstack { typedef struct sigaltstack {
void *ss_sp; void __user *ss_sp;
int ss_flags; int ss_flags;
size_t ss_size; size_t ss_size;
} stack_t; } stack_t;
...@@ -179,7 +183,7 @@ typedef struct sigaltstack { ...@@ -179,7 +183,7 @@ typedef struct sigaltstack {
implemented here for OSF/1 compatibility. */ implemented here for OSF/1 compatibility. */
struct sigstack { struct sigstack {
void *ss_sp; void __user *ss_sp;
int ss_onstack; int ss_onstack;
}; };
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
typedef union sigval { typedef union sigval {
int sival_int; int sival_int;
void *sival_ptr; void __user *sival_ptr;
} sigval_t; } sigval_t;
/* /*
...@@ -78,7 +78,7 @@ typedef struct siginfo { ...@@ -78,7 +78,7 @@ typedef struct siginfo {
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct { struct {
void *_addr; /* faulting insn/memory ref. */ void __user *_addr; /* faulting insn/memory ref. */
#ifdef __ARCH_SI_TRAPNO #ifdef __ARCH_SI_TRAPNO
int _trapno; /* TRAP # which caused the signal */ int _trapno; /* TRAP # which caused the signal */
#endif #endif
......
...@@ -186,9 +186,14 @@ struct sigstack { ...@@ -186,9 +186,14 @@ struct sigstack {
/* Type of a signal handler. */ /* Type of a signal handler. */
#ifdef __KERNEL__ #ifdef __KERNEL__
typedef void (*__sighandler_t)(int, struct sigcontext *); typedef void __signalfn_t(int);
typedef __signalfn_t __user *__sighandler_t;
typedef void __restorefn_t(void);
typedef __restorefn_t __user *__sigrestore_t;
#else #else
typedef void (*__sighandler_t)(int); typedef void (*__sighandler_t)(int);
typedef void (*__sigrestore_t)(void);
#endif #endif
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */ #define SIG_DFL ((__sighandler_t)0) /* default signal handling */
...@@ -198,7 +203,7 @@ typedef void (*__sighandler_t)(int); ...@@ -198,7 +203,7 @@ typedef void (*__sighandler_t)(int);
struct __new_sigaction { struct __new_sigaction {
__sighandler_t sa_handler; __sighandler_t sa_handler;
unsigned long sa_flags; unsigned long sa_flags;
void (*sa_restorer)(void); /* not used by Linux/SPARC yet */ __sigrestore_t sa_restorer; /* not used by Linux/SPARC yet */
__new_sigset_t sa_mask; __new_sigset_t sa_mask;
}; };
...@@ -233,7 +238,7 @@ struct __old_sigaction32 { ...@@ -233,7 +238,7 @@ struct __old_sigaction32 {
#endif #endif
typedef struct sigaltstack { typedef struct sigaltstack {
void *ss_sp; void __user *ss_sp;
int ss_flags; int ss_flags;
size_t ss_size; size_t ss_size;
} stack_t; } stack_t;
......
...@@ -136,7 +136,11 @@ typedef unsigned long sigset_t; ...@@ -136,7 +136,11 @@ typedef unsigned long sigset_t;
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
/* Type of a signal handler. */ /* Type of a signal handler. */
typedef void (*__sighandler_t)(int); typedef void __signalfn_t(int);
typedef __signalfn_t __user *__sighandler_t;
typedef void __restorefn_t(void);
typedef __restorefn_t __user *__sigrestore_t;
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */ #define SIG_DFL ((__sighandler_t)0) /* default signal handling */
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */ #define SIG_IGN ((__sighandler_t)1) /* ignore signal */
...@@ -145,7 +149,7 @@ typedef void (*__sighandler_t)(int); ...@@ -145,7 +149,7 @@ typedef void (*__sighandler_t)(int);
struct sigaction { struct sigaction {
__sighandler_t sa_handler; __sighandler_t sa_handler;
unsigned long sa_flags; unsigned long sa_flags;
void (*sa_restorer)(void); __sigrestore_t sa_restorer;
sigset_t sa_mask; /* mask last for extensibility */ sigset_t sa_mask; /* mask last for extensibility */
}; };
...@@ -154,7 +158,7 @@ struct k_sigaction { ...@@ -154,7 +158,7 @@ struct k_sigaction {
}; };
typedef struct sigaltstack { typedef struct sigaltstack {
void *ss_sp; void __user *ss_sp;
int ss_flags; int ss_flags;
size_t ss_size; size_t ss_size;
} stack_t; } stack_t;
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
#define VSYSCALL32_VSYSCALL ((void *)VSYSCALL32_BASE + 0x400) #define VSYSCALL32_VSYSCALL ((void *)VSYSCALL32_BASE + 0x400)
#define VSYSCALL32_SYSEXIT ((void *)VSYSCALL32_BASE + 0x410) #define VSYSCALL32_SYSEXIT ((void *)VSYSCALL32_BASE + 0x410)
#define VSYSCALL32_SIGRETURN ((void *)VSYSCALL32_BASE + 0x500) #define VSYSCALL32_SIGRETURN ((void __user *)VSYSCALL32_BASE + 0x500)
#define VSYSCALL32_RTSIGRETURN ((void *)VSYSCALL32_BASE + 0x600) #define VSYSCALL32_RTSIGRETURN ((void __user *)VSYSCALL32_BASE + 0x600)
#endif #endif
#endif #endif
...@@ -296,7 +296,7 @@ int allow_signal(int sig) ...@@ -296,7 +296,7 @@ int allow_signal(int sig)
Let the signal code know it'll be handled, so Let the signal code know it'll be handled, so
that they don't get converted to SIGKILL or that they don't get converted to SIGKILL or
just silently dropped */ just silently dropped */
current->sighand->action[(sig)-1].sa.sa_handler = (void *)2; current->sighand->action[(sig)-1].sa.sa_handler = (void __user *)2;
} }
recalc_sigpending(); recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock); spin_unlock_irq(&current->sighand->siglock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment