signal_32.c revision 451a651d33b240481b063765016472c0be10d350
1/*
2 * Signal handling for 32bit PPC and 32bit tasks on 64bit PPC
3 *
4 *  PowerPC version
5 *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
6 * Copyright (C) 2001 IBM
7 * Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
8 * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
9 *
10 *  Derived from "arch/i386/kernel/signal.c"
11 *    Copyright (C) 1991, 1992 Linus Torvalds
12 *    1997-11-28  Modified for POSIX.1b signals by Richard Henderson
13 *
14 *  This program is free software; you can redistribute it and/or
15 *  modify it under the terms of the GNU General Public License
16 *  as published by the Free Software Foundation; either version
17 *  2 of the License, or (at your option) any later version.
18 */
19
20#include <linux/sched.h>
21#include <linux/mm.h>
22#include <linux/smp.h>
23#include <linux/kernel.h>
24#include <linux/signal.h>
25#include <linux/errno.h>
26#include <linux/elf.h>
27#include <linux/ptrace.h>
28#include <linux/ratelimit.h>
29#ifdef CONFIG_PPC64
30#include <linux/syscalls.h>
31#include <linux/compat.h>
32#else
33#include <linux/wait.h>
34#include <linux/unistd.h>
35#include <linux/stddef.h>
36#include <linux/tty.h>
37#include <linux/binfmts.h>
38#endif
39
40#include <asm/uaccess.h>
41#include <asm/cacheflush.h>
42#include <asm/syscalls.h>
43#include <asm/sigcontext.h>
44#include <asm/vdso.h>
45#include <asm/switch_to.h>
46#ifdef CONFIG_PPC64
47#include "ppc32.h"
48#include <asm/unistd.h>
49#else
50#include <asm/ucontext.h>
51#include <asm/pgtable.h>
52#endif
53
54#include "signal.h"
55
56#undef DEBUG_SIG
57
58#ifdef CONFIG_PPC64
59#define sys_sigsuspend	compat_sys_sigsuspend
60#define sys_rt_sigreturn	compat_sys_rt_sigreturn
61#define sys_sigaction	compat_sys_sigaction
62#define sys_swapcontext	compat_sys_swapcontext
63#define sys_sigreturn	compat_sys_sigreturn
64
65#define old_sigaction	old_sigaction32
66#define sigcontext	sigcontext32
67#define mcontext	mcontext32
68#define ucontext	ucontext32
69
70#define __save_altstack __compat_save_altstack
71
72/*
73 * Userspace code may pass a ucontext which doesn't include VSX added
74 * at the end.  We need to check for this case.
75 */
76#define UCONTEXTSIZEWITHOUTVSX \
77		(sizeof(struct ucontext) - sizeof(elf_vsrreghalf_t32))
78
79/*
80 * Returning 0 means we return to userspace via
81 * ret_from_except and thus restore all user
82 * registers from *regs.  This is what we need
83 * to do when a signal has been delivered.
84 */
85
86#define GP_REGS_SIZE	min(sizeof(elf_gregset_t32), sizeof(struct pt_regs32))
87#undef __SIGNAL_FRAMESIZE
88#define __SIGNAL_FRAMESIZE	__SIGNAL_FRAMESIZE32
89#undef ELF_NVRREG
90#define ELF_NVRREG	ELF_NVRREG32
91
92/*
93 * Functions for flipping sigsets (thanks to brain dead generic
94 * implementation that makes things simple for little endian only)
95 */
96static inline int put_sigset_t(compat_sigset_t __user *uset, sigset_t *set)
97{
98	compat_sigset_t	cset;
99
100	switch (_NSIG_WORDS) {
101	case 4: cset.sig[6] = set->sig[3] & 0xffffffffull;
102		cset.sig[7] = set->sig[3] >> 32;
103	case 3: cset.sig[4] = set->sig[2] & 0xffffffffull;
104		cset.sig[5] = set->sig[2] >> 32;
105	case 2: cset.sig[2] = set->sig[1] & 0xffffffffull;
106		cset.sig[3] = set->sig[1] >> 32;
107	case 1: cset.sig[0] = set->sig[0] & 0xffffffffull;
108		cset.sig[1] = set->sig[0] >> 32;
109	}
110	return copy_to_user(uset, &cset, sizeof(*uset));
111}
112
113static inline int get_sigset_t(sigset_t *set,
114			       const compat_sigset_t __user *uset)
115{
116	compat_sigset_t s32;
117
118	if (copy_from_user(&s32, uset, sizeof(*uset)))
119		return -EFAULT;
120
121	/*
122	 * Swap the 2 words of the 64-bit sigset_t (they are stored
123	 * in the "wrong" endian in 32-bit user storage).
124	 */
125	switch (_NSIG_WORDS) {
126	case 4: set->sig[3] = s32.sig[6] | (((long)s32.sig[7]) << 32);
127	case 3: set->sig[2] = s32.sig[4] | (((long)s32.sig[5]) << 32);
128	case 2: set->sig[1] = s32.sig[2] | (((long)s32.sig[3]) << 32);
129	case 1: set->sig[0] = s32.sig[0] | (((long)s32.sig[1]) << 32);
130	}
131	return 0;
132}
133
134static inline int get_old_sigaction(struct k_sigaction *new_ka,
135		struct old_sigaction __user *act)
136{
137	compat_old_sigset_t mask;
138	compat_uptr_t handler, restorer;
139
140	if (get_user(handler, &act->sa_handler) ||
141	    __get_user(restorer, &act->sa_restorer) ||
142	    __get_user(new_ka->sa.sa_flags, &act->sa_flags) ||
143	    __get_user(mask, &act->sa_mask))
144		return -EFAULT;
145	new_ka->sa.sa_handler = compat_ptr(handler);
146	new_ka->sa.sa_restorer = compat_ptr(restorer);
147	siginitset(&new_ka->sa.sa_mask, mask);
148	return 0;
149}
150
151#define to_user_ptr(p)		ptr_to_compat(p)
152#define from_user_ptr(p)	compat_ptr(p)
153
154static inline int save_general_regs(struct pt_regs *regs,
155		struct mcontext __user *frame)
156{
157	elf_greg_t64 *gregs = (elf_greg_t64 *)regs;
158	int i;
159
160	WARN_ON(!FULL_REGS(regs));
161
162	for (i = 0; i <= PT_RESULT; i ++) {
163		if (i == 14 && !FULL_REGS(regs))
164			i = 32;
165		if (__put_user((unsigned int)gregs[i], &frame->mc_gregs[i]))
166			return -EFAULT;
167	}
168	return 0;
169}
170
171static inline int restore_general_regs(struct pt_regs *regs,
172		struct mcontext __user *sr)
173{
174	elf_greg_t64 *gregs = (elf_greg_t64 *)regs;
175	int i;
176
177	for (i = 0; i <= PT_RESULT; i++) {
178		if ((i == PT_MSR) || (i == PT_SOFTE))
179			continue;
180		if (__get_user(gregs[i], &sr->mc_gregs[i]))
181			return -EFAULT;
182	}
183	return 0;
184}
185
186#else /* CONFIG_PPC64 */
187
188#define GP_REGS_SIZE	min(sizeof(elf_gregset_t), sizeof(struct pt_regs))
189
190static inline int put_sigset_t(sigset_t __user *uset, sigset_t *set)
191{
192	return copy_to_user(uset, set, sizeof(*uset));
193}
194
195static inline int get_sigset_t(sigset_t *set, const sigset_t __user *uset)
196{
197	return copy_from_user(set, uset, sizeof(*uset));
198}
199
200static inline int get_old_sigaction(struct k_sigaction *new_ka,
201		struct old_sigaction __user *act)
202{
203	old_sigset_t mask;
204
205	if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
206			__get_user(new_ka->sa.sa_handler, &act->sa_handler) ||
207			__get_user(new_ka->sa.sa_restorer, &act->sa_restorer) ||
208			__get_user(new_ka->sa.sa_flags, &act->sa_flags) ||
209			__get_user(mask, &act->sa_mask))
210		return -EFAULT;
211	siginitset(&new_ka->sa.sa_mask, mask);
212	return 0;
213}
214
215#define to_user_ptr(p)		((unsigned long)(p))
216#define from_user_ptr(p)	((void __user *)(p))
217
218static inline int save_general_regs(struct pt_regs *regs,
219		struct mcontext __user *frame)
220{
221	WARN_ON(!FULL_REGS(regs));
222	return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE);
223}
224
225static inline int restore_general_regs(struct pt_regs *regs,
226		struct mcontext __user *sr)
227{
228	/* copy up to but not including MSR */
229	if (__copy_from_user(regs, &sr->mc_gregs,
230				PT_MSR * sizeof(elf_greg_t)))
231		return -EFAULT;
232	/* copy from orig_r3 (the word after the MSR) up to the end */
233	if (__copy_from_user(&regs->orig_gpr3, &sr->mc_gregs[PT_ORIG_R3],
234				GP_REGS_SIZE - PT_ORIG_R3 * sizeof(elf_greg_t)))
235		return -EFAULT;
236	return 0;
237}
238
239#endif /* CONFIG_PPC64 */
240
241/*
242 * Atomically swap in the new signal mask, and wait for a signal.
243 */
244long sys_sigsuspend(old_sigset_t mask)
245{
246	sigset_t blocked;
247	siginitset(&blocked, mask);
248	return sigsuspend(&blocked);
249}
250
251long sys_sigaction(int sig, struct old_sigaction __user *act,
252		struct old_sigaction __user *oact)
253{
254	struct k_sigaction new_ka, old_ka;
255	int ret;
256
257#ifdef CONFIG_PPC64
258	if (sig < 0)
259		sig = -sig;
260#endif
261
262	if (act) {
263		if (get_old_sigaction(&new_ka, act))
264			return -EFAULT;
265	}
266
267	ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
268	if (!ret && oact) {
269		if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
270		    __put_user(to_user_ptr(old_ka.sa.sa_handler),
271			    &oact->sa_handler) ||
272		    __put_user(to_user_ptr(old_ka.sa.sa_restorer),
273			    &oact->sa_restorer) ||
274		    __put_user(old_ka.sa.sa_flags, &oact->sa_flags) ||
275		    __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask))
276			return -EFAULT;
277	}
278
279	return ret;
280}
281
282/*
283 * When we have signals to deliver, we set up on the
284 * user stack, going down from the original stack pointer:
285 *	an ABI gap of 56 words
286 *	an mcontext struct
287 *	a sigcontext struct
288 *	a gap of __SIGNAL_FRAMESIZE bytes
289 *
290 * Each of these things must be a multiple of 16 bytes in size. The following
291 * structure represent all of this except the __SIGNAL_FRAMESIZE gap
292 *
293 */
294struct sigframe {
295	struct sigcontext sctx;		/* the sigcontext */
296	struct mcontext	mctx;		/* all the register values */
297	/*
298	 * Programs using the rs6000/xcoff abi can save up to 19 gp
299	 * regs and 18 fp regs below sp before decrementing it.
300	 */
301	int			abigap[56];
302};
303
304/* We use the mc_pad field for the signal return trampoline. */
305#define tramp	mc_pad
306
307/*
308 *  When we have rt signals to deliver, we set up on the
309 *  user stack, going down from the original stack pointer:
310 *	one rt_sigframe struct (siginfo + ucontext + ABI gap)
311 *	a gap of __SIGNAL_FRAMESIZE+16 bytes
312 *  (the +16 is to get the siginfo and ucontext in the same
313 *  positions as in older kernels).
314 *
315 *  Each of these things must be a multiple of 16 bytes in size.
316 *
317 */
318struct rt_sigframe {
319#ifdef CONFIG_PPC64
320	compat_siginfo_t info;
321#else
322	struct siginfo info;
323#endif
324	struct ucontext	uc;
325	/*
326	 * Programs using the rs6000/xcoff abi can save up to 19 gp
327	 * regs and 18 fp regs below sp before decrementing it.
328	 */
329	int			abigap[56];
330};
331
332#ifdef CONFIG_VSX
333unsigned long copy_fpr_to_user(void __user *to,
334			       struct task_struct *task)
335{
336	double buf[ELF_NFPREG];
337	int i;
338
339	/* save FPR copy to local buffer then write to the thread_struct */
340	for (i = 0; i < (ELF_NFPREG - 1) ; i++)
341		buf[i] = task->thread.TS_FPR(i);
342	memcpy(&buf[i], &task->thread.fpscr, sizeof(double));
343	return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double));
344}
345
346unsigned long copy_fpr_from_user(struct task_struct *task,
347				 void __user *from)
348{
349	double buf[ELF_NFPREG];
350	int i;
351
352	if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double)))
353		return 1;
354	for (i = 0; i < (ELF_NFPREG - 1) ; i++)
355		task->thread.TS_FPR(i) = buf[i];
356	memcpy(&task->thread.fpscr, &buf[i], sizeof(double));
357
358	return 0;
359}
360
361unsigned long copy_vsx_to_user(void __user *to,
362			       struct task_struct *task)
363{
364	double buf[ELF_NVSRHALFREG];
365	int i;
366
367	/* save FPR copy to local buffer then write to the thread_struct */
368	for (i = 0; i < ELF_NVSRHALFREG; i++)
369		buf[i] = task->thread.fpr[i][TS_VSRLOWOFFSET];
370	return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double));
371}
372
373unsigned long copy_vsx_from_user(struct task_struct *task,
374				 void __user *from)
375{
376	double buf[ELF_NVSRHALFREG];
377	int i;
378
379	if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double)))
380		return 1;
381	for (i = 0; i < ELF_NVSRHALFREG ; i++)
382		task->thread.fpr[i][TS_VSRLOWOFFSET] = buf[i];
383	return 0;
384}
385#else
386inline unsigned long copy_fpr_to_user(void __user *to,
387				      struct task_struct *task)
388{
389	return __copy_to_user(to, task->thread.fpr,
390			      ELF_NFPREG * sizeof(double));
391}
392
393inline unsigned long copy_fpr_from_user(struct task_struct *task,
394					void __user *from)
395{
396	return __copy_from_user(task->thread.fpr, from,
397			      ELF_NFPREG * sizeof(double));
398}
399#endif
400
401/*
402 * Save the current user registers on the user stack.
403 * We only save the altivec/spe registers if the process has used
404 * altivec/spe instructions at some point.
405 */
406static int save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
407		int sigret, int ctx_has_vsx_region)
408{
409	unsigned long msr = regs->msr;
410
411	/* Make sure floating point registers are stored in regs */
412	flush_fp_to_thread(current);
413
414	/* save general registers */
415	if (save_general_regs(regs, frame))
416		return 1;
417
418#ifdef CONFIG_ALTIVEC
419	/* save altivec registers */
420	if (current->thread.used_vr) {
421		flush_altivec_to_thread(current);
422		if (__copy_to_user(&frame->mc_vregs, current->thread.vr,
423				   ELF_NVRREG * sizeof(vector128)))
424			return 1;
425		/* set MSR_VEC in the saved MSR value to indicate that
426		   frame->mc_vregs contains valid data */
427		msr |= MSR_VEC;
428	}
429	/* else assert((regs->msr & MSR_VEC) == 0) */
430
431	/* We always copy to/from vrsave, it's 0 if we don't have or don't
432	 * use altivec. Since VSCR only contains 32 bits saved in the least
433	 * significant bits of a vector, we "cheat" and stuff VRSAVE in the
434	 * most significant bits of that same vector. --BenH
435	 */
436	if (__put_user(current->thread.vrsave, (u32 __user *)&frame->mc_vregs[32]))
437		return 1;
438#endif /* CONFIG_ALTIVEC */
439	if (copy_fpr_to_user(&frame->mc_fregs, current))
440		return 1;
441#ifdef CONFIG_VSX
442	/*
443	 * Copy VSR 0-31 upper half from thread_struct to local
444	 * buffer, then write that to userspace.  Also set MSR_VSX in
445	 * the saved MSR value to indicate that frame->mc_vregs
446	 * contains valid data
447	 */
448	if (current->thread.used_vsr && ctx_has_vsx_region) {
449		__giveup_vsx(current);
450		if (copy_vsx_to_user(&frame->mc_vsregs, current))
451			return 1;
452		msr |= MSR_VSX;
453	}
454#endif /* CONFIG_VSX */
455#ifdef CONFIG_SPE
456	/* save spe registers */
457	if (current->thread.used_spe) {
458		flush_spe_to_thread(current);
459		if (__copy_to_user(&frame->mc_vregs, current->thread.evr,
460				   ELF_NEVRREG * sizeof(u32)))
461			return 1;
462		/* set MSR_SPE in the saved MSR value to indicate that
463		   frame->mc_vregs contains valid data */
464		msr |= MSR_SPE;
465	}
466	/* else assert((regs->msr & MSR_SPE) == 0) */
467
468	/* We always copy to/from spefscr */
469	if (__put_user(current->thread.spefscr, (u32 __user *)&frame->mc_vregs + ELF_NEVRREG))
470		return 1;
471#endif /* CONFIG_SPE */
472
473	if (__put_user(msr, &frame->mc_gregs[PT_MSR]))
474		return 1;
475	if (sigret) {
476		/* Set up the sigreturn trampoline: li r0,sigret; sc */
477		if (__put_user(0x38000000UL + sigret, &frame->tramp[0])
478		    || __put_user(0x44000002UL, &frame->tramp[1]))
479			return 1;
480		flush_icache_range((unsigned long) &frame->tramp[0],
481				   (unsigned long) &frame->tramp[2]);
482	}
483
484	return 0;
485}
486
487/*
488 * Restore the current user register values from the user stack,
489 * (except for MSR).
490 */
491static long restore_user_regs(struct pt_regs *regs,
492			      struct mcontext __user *sr, int sig)
493{
494	long err;
495	unsigned int save_r2 = 0;
496	unsigned long msr;
497#ifdef CONFIG_VSX
498	int i;
499#endif
500
501	/*
502	 * restore general registers but not including MSR or SOFTE. Also
503	 * take care of keeping r2 (TLS) intact if not a signal
504	 */
505	if (!sig)
506		save_r2 = (unsigned int)regs->gpr[2];
507	err = restore_general_regs(regs, sr);
508	regs->trap = 0;
509	err |= __get_user(msr, &sr->mc_gregs[PT_MSR]);
510	if (!sig)
511		regs->gpr[2] = (unsigned long) save_r2;
512	if (err)
513		return 1;
514
515	/* if doing signal return, restore the previous little-endian mode */
516	if (sig)
517		regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE);
518
519	/*
520	 * Do this before updating the thread state in
521	 * current->thread.fpr/vr/evr.  That way, if we get preempted
522	 * and another task grabs the FPU/Altivec/SPE, it won't be
523	 * tempted to save the current CPU state into the thread_struct
524	 * and corrupt what we are writing there.
525	 */
526	discard_lazy_cpu_state();
527
528#ifdef CONFIG_ALTIVEC
529	/*
530	 * Force the process to reload the altivec registers from
531	 * current->thread when it next does altivec instructions
532	 */
533	regs->msr &= ~MSR_VEC;
534	if (msr & MSR_VEC) {
535		/* restore altivec registers from the stack */
536		if (__copy_from_user(current->thread.vr, &sr->mc_vregs,
537				     sizeof(sr->mc_vregs)))
538			return 1;
539	} else if (current->thread.used_vr)
540		memset(current->thread.vr, 0, ELF_NVRREG * sizeof(vector128));
541
542	/* Always get VRSAVE back */
543	if (__get_user(current->thread.vrsave, (u32 __user *)&sr->mc_vregs[32]))
544		return 1;
545#endif /* CONFIG_ALTIVEC */
546	if (copy_fpr_from_user(current, &sr->mc_fregs))
547		return 1;
548
549#ifdef CONFIG_VSX
550	/*
551	 * Force the process to reload the VSX registers from
552	 * current->thread when it next does VSX instruction.
553	 */
554	regs->msr &= ~MSR_VSX;
555	if (msr & MSR_VSX) {
556		/*
557		 * Restore altivec registers from the stack to a local
558		 * buffer, then write this out to the thread_struct
559		 */
560		if (copy_vsx_from_user(current, &sr->mc_vsregs))
561			return 1;
562	} else if (current->thread.used_vsr)
563		for (i = 0; i < 32 ; i++)
564			current->thread.fpr[i][TS_VSRLOWOFFSET] = 0;
565#endif /* CONFIG_VSX */
566	/*
567	 * force the process to reload the FP registers from
568	 * current->thread when it next does FP instructions
569	 */
570	regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1);
571
572#ifdef CONFIG_SPE
573	/* force the process to reload the spe registers from
574	   current->thread when it next does spe instructions */
575	regs->msr &= ~MSR_SPE;
576	if (msr & MSR_SPE) {
577		/* restore spe registers from the stack */
578		if (__copy_from_user(current->thread.evr, &sr->mc_vregs,
579				     ELF_NEVRREG * sizeof(u32)))
580			return 1;
581	} else if (current->thread.used_spe)
582		memset(current->thread.evr, 0, ELF_NEVRREG * sizeof(u32));
583
584	/* Always get SPEFSCR back */
585	if (__get_user(current->thread.spefscr, (u32 __user *)&sr->mc_vregs + ELF_NEVRREG))
586		return 1;
587#endif /* CONFIG_SPE */
588
589	return 0;
590}
591
592#ifdef CONFIG_PPC64
593long compat_sys_rt_sigaction(int sig, const struct sigaction32 __user *act,
594		struct sigaction32 __user *oact, size_t sigsetsize)
595{
596	struct k_sigaction new_ka, old_ka;
597	int ret;
598
599	/* XXX: Don't preclude handling different sized sigset_t's.  */
600	if (sigsetsize != sizeof(compat_sigset_t))
601		return -EINVAL;
602
603	if (act) {
604		compat_uptr_t handler;
605
606		ret = get_user(handler, &act->sa_handler);
607		new_ka.sa.sa_handler = compat_ptr(handler);
608		ret |= get_sigset_t(&new_ka.sa.sa_mask, &act->sa_mask);
609		ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags);
610		if (ret)
611			return -EFAULT;
612	}
613
614	ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
615	if (!ret && oact) {
616		ret = put_user(to_user_ptr(old_ka.sa.sa_handler), &oact->sa_handler);
617		ret |= put_sigset_t(&oact->sa_mask, &old_ka.sa.sa_mask);
618		ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
619	}
620	return ret;
621}
622
623long compat_sys_rt_sigpending(compat_sigset_t __user *set, compat_size_t sigsetsize)
624{
625	sigset_t s;
626	int ret;
627	mm_segment_t old_fs = get_fs();
628
629	set_fs(KERNEL_DS);
630	/* The __user pointer cast is valid because of the set_fs() */
631	ret = sys_rt_sigpending((sigset_t __user *) &s, sigsetsize);
632	set_fs(old_fs);
633	if (!ret) {
634		if (put_sigset_t(set, &s))
635			return -EFAULT;
636	}
637	return ret;
638}
639
640
641int copy_siginfo_to_user32(struct compat_siginfo __user *d, siginfo_t *s)
642{
643	int err;
644
645	if (!access_ok (VERIFY_WRITE, d, sizeof(*d)))
646		return -EFAULT;
647
648	/* If you change siginfo_t structure, please be sure
649	 * this code is fixed accordingly.
650	 * It should never copy any pad contained in the structure
651	 * to avoid security leaks, but must copy the generic
652	 * 3 ints plus the relevant union member.
653	 * This routine must convert siginfo from 64bit to 32bit as well
654	 * at the same time.
655	 */
656	err = __put_user(s->si_signo, &d->si_signo);
657	err |= __put_user(s->si_errno, &d->si_errno);
658	err |= __put_user((short)s->si_code, &d->si_code);
659	if (s->si_code < 0)
660		err |= __copy_to_user(&d->_sifields._pad, &s->_sifields._pad,
661				      SI_PAD_SIZE32);
662	else switch(s->si_code >> 16) {
663	case __SI_CHLD >> 16:
664		err |= __put_user(s->si_pid, &d->si_pid);
665		err |= __put_user(s->si_uid, &d->si_uid);
666		err |= __put_user(s->si_utime, &d->si_utime);
667		err |= __put_user(s->si_stime, &d->si_stime);
668		err |= __put_user(s->si_status, &d->si_status);
669		break;
670	case __SI_FAULT >> 16:
671		err |= __put_user((unsigned int)(unsigned long)s->si_addr,
672				  &d->si_addr);
673		break;
674	case __SI_POLL >> 16:
675		err |= __put_user(s->si_band, &d->si_band);
676		err |= __put_user(s->si_fd, &d->si_fd);
677		break;
678	case __SI_TIMER >> 16:
679		err |= __put_user(s->si_tid, &d->si_tid);
680		err |= __put_user(s->si_overrun, &d->si_overrun);
681		err |= __put_user(s->si_int, &d->si_int);
682		break;
683	case __SI_RT >> 16: /* This is not generated by the kernel as of now.  */
684	case __SI_MESGQ >> 16:
685		err |= __put_user(s->si_int, &d->si_int);
686		/* fallthrough */
687	case __SI_KILL >> 16:
688	default:
689		err |= __put_user(s->si_pid, &d->si_pid);
690		err |= __put_user(s->si_uid, &d->si_uid);
691		break;
692	}
693	return err;
694}
695
696#define copy_siginfo_to_user	copy_siginfo_to_user32
697
698int copy_siginfo_from_user32(siginfo_t *to, struct compat_siginfo __user *from)
699{
700	memset(to, 0, sizeof *to);
701
702	if (copy_from_user(to, from, 3*sizeof(int)) ||
703	    copy_from_user(to->_sifields._pad,
704			   from->_sifields._pad, SI_PAD_SIZE32))
705		return -EFAULT;
706
707	return 0;
708}
709
710/*
711 * Note: it is necessary to treat pid and sig as unsigned ints, with the
712 * corresponding cast to a signed int to insure that the proper conversion
713 * (sign extension) between the register representation of a signed int
714 * (msr in 32-bit mode) and the register representation of a signed int
715 * (msr in 64-bit mode) is performed.
716 */
717long compat_sys_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo)
718{
719	siginfo_t info;
720	int ret;
721	mm_segment_t old_fs = get_fs();
722
723	ret = copy_siginfo_from_user32(&info, uinfo);
724	if (unlikely(ret))
725		return ret;
726
727	set_fs (KERNEL_DS);
728	/* The __user pointer cast is valid becasuse of the set_fs() */
729	ret = sys_rt_sigqueueinfo((int)pid, (int)sig, (siginfo_t __user *) &info);
730	set_fs (old_fs);
731	return ret;
732}
733#endif /* CONFIG_PPC64 */
734
735/*
736 * Set up a signal frame for a "real-time" signal handler
737 * (one which gets siginfo).
738 */
739int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka,
740		siginfo_t *info, sigset_t *oldset,
741		struct pt_regs *regs)
742{
743	struct rt_sigframe __user *rt_sf;
744	struct mcontext __user *frame;
745	void __user *addr;
746	unsigned long newsp = 0;
747
748	/* Set up Signal Frame */
749	/* Put a Real Time Context onto stack */
750	rt_sf = get_sigframe(ka, regs, sizeof(*rt_sf), 1);
751	addr = rt_sf;
752	if (unlikely(rt_sf == NULL))
753		goto badframe;
754
755	/* Put the siginfo & fill in most of the ucontext */
756	if (copy_siginfo_to_user(&rt_sf->info, info)
757	    || __put_user(0, &rt_sf->uc.uc_flags)
758	    || __put_user(0, &rt_sf->uc.uc_link)
759	    || __save_altstack(&rt_sf->uc.uc_stack, regs->gpr[1])
760	    || __put_user(to_user_ptr(&rt_sf->uc.uc_mcontext),
761		    &rt_sf->uc.uc_regs)
762	    || put_sigset_t(&rt_sf->uc.uc_sigmask, oldset))
763		goto badframe;
764
765	/* Save user registers on the stack */
766	frame = &rt_sf->uc.uc_mcontext;
767	addr = frame;
768	if (vdso32_rt_sigtramp && current->mm->context.vdso_base) {
769		if (save_user_regs(regs, frame, 0, 1))
770			goto badframe;
771		regs->link = current->mm->context.vdso_base + vdso32_rt_sigtramp;
772	} else {
773		if (save_user_regs(regs, frame, __NR_rt_sigreturn, 1))
774			goto badframe;
775		regs->link = (unsigned long) frame->tramp;
776	}
777
778	current->thread.fpscr.val = 0;	/* turn off all fp exceptions */
779
780	/* create a stack frame for the caller of the handler */
781	newsp = ((unsigned long)rt_sf) - (__SIGNAL_FRAMESIZE + 16);
782	addr = (void __user *)regs->gpr[1];
783	if (put_user(regs->gpr[1], (u32 __user *)newsp))
784		goto badframe;
785
786	/* Fill registers for signal handler */
787	regs->gpr[1] = newsp;
788	regs->gpr[3] = sig;
789	regs->gpr[4] = (unsigned long) &rt_sf->info;
790	regs->gpr[5] = (unsigned long) &rt_sf->uc;
791	regs->gpr[6] = (unsigned long) rt_sf;
792	regs->nip = (unsigned long) ka->sa.sa_handler;
793	/* enter the signal handler in big-endian mode */
794	regs->msr &= ~MSR_LE;
795	return 1;
796
797badframe:
798#ifdef DEBUG_SIG
799	printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n",
800	       regs, frame, newsp);
801#endif
802	if (show_unhandled_signals)
803		printk_ratelimited(KERN_INFO
804				   "%s[%d]: bad frame in handle_rt_signal32: "
805				   "%p nip %08lx lr %08lx\n",
806				   current->comm, current->pid,
807				   addr, regs->nip, regs->link);
808
809	force_sigsegv(sig, current);
810	return 0;
811}
812
813static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int sig)
814{
815	sigset_t set;
816	struct mcontext __user *mcp;
817
818	if (get_sigset_t(&set, &ucp->uc_sigmask))
819		return -EFAULT;
820#ifdef CONFIG_PPC64
821	{
822		u32 cmcp;
823
824		if (__get_user(cmcp, &ucp->uc_regs))
825			return -EFAULT;
826		mcp = (struct mcontext __user *)(u64)cmcp;
827		/* no need to check access_ok(mcp), since mcp < 4GB */
828	}
829#else
830	if (__get_user(mcp, &ucp->uc_regs))
831		return -EFAULT;
832	if (!access_ok(VERIFY_READ, mcp, sizeof(*mcp)))
833		return -EFAULT;
834#endif
835	set_current_blocked(&set);
836	if (restore_user_regs(regs, mcp, sig))
837		return -EFAULT;
838
839	return 0;
840}
841
842long sys_swapcontext(struct ucontext __user *old_ctx,
843		     struct ucontext __user *new_ctx,
844		     int ctx_size, int r6, int r7, int r8, struct pt_regs *regs)
845{
846	unsigned char tmp;
847	int ctx_has_vsx_region = 0;
848
849#ifdef CONFIG_PPC64
850	unsigned long new_msr = 0;
851
852	if (new_ctx) {
853		struct mcontext __user *mcp;
854		u32 cmcp;
855
856		/*
857		 * Get pointer to the real mcontext.  No need for
858		 * access_ok since we are dealing with compat
859		 * pointers.
860		 */
861		if (__get_user(cmcp, &new_ctx->uc_regs))
862			return -EFAULT;
863		mcp = (struct mcontext __user *)(u64)cmcp;
864		if (__get_user(new_msr, &mcp->mc_gregs[PT_MSR]))
865			return -EFAULT;
866	}
867	/*
868	 * Check that the context is not smaller than the original
869	 * size (with VMX but without VSX)
870	 */
871	if (ctx_size < UCONTEXTSIZEWITHOUTVSX)
872		return -EINVAL;
873	/*
874	 * If the new context state sets the MSR VSX bits but
875	 * it doesn't provide VSX state.
876	 */
877	if ((ctx_size < sizeof(struct ucontext)) &&
878	    (new_msr & MSR_VSX))
879		return -EINVAL;
880	/* Does the context have enough room to store VSX data? */
881	if (ctx_size >= sizeof(struct ucontext))
882		ctx_has_vsx_region = 1;
883#else
884	/* Context size is for future use. Right now, we only make sure
885	 * we are passed something we understand
886	 */
887	if (ctx_size < sizeof(struct ucontext))
888		return -EINVAL;
889#endif
890	if (old_ctx != NULL) {
891		struct mcontext __user *mctx;
892
893		/*
894		 * old_ctx might not be 16-byte aligned, in which
895		 * case old_ctx->uc_mcontext won't be either.
896		 * Because we have the old_ctx->uc_pad2 field
897		 * before old_ctx->uc_mcontext, we need to round down
898		 * from &old_ctx->uc_mcontext to a 16-byte boundary.
899		 */
900		mctx = (struct mcontext __user *)
901			((unsigned long) &old_ctx->uc_mcontext & ~0xfUL);
902		if (!access_ok(VERIFY_WRITE, old_ctx, ctx_size)
903		    || save_user_regs(regs, mctx, 0, ctx_has_vsx_region)
904		    || put_sigset_t(&old_ctx->uc_sigmask, &current->blocked)
905		    || __put_user(to_user_ptr(mctx), &old_ctx->uc_regs))
906			return -EFAULT;
907	}
908	if (new_ctx == NULL)
909		return 0;
910	if (!access_ok(VERIFY_READ, new_ctx, ctx_size)
911	    || __get_user(tmp, (u8 __user *) new_ctx)
912	    || __get_user(tmp, (u8 __user *) new_ctx + ctx_size - 1))
913		return -EFAULT;
914
915	/*
916	 * If we get a fault copying the context into the kernel's
917	 * image of the user's registers, we can't just return -EFAULT
918	 * because the user's registers will be corrupted.  For instance
919	 * the NIP value may have been updated but not some of the
920	 * other registers.  Given that we have done the access_ok
921	 * and successfully read the first and last bytes of the region
922	 * above, this should only happen in an out-of-memory situation
923	 * or if another thread unmaps the region containing the context.
924	 * We kill the task with a SIGSEGV in this situation.
925	 */
926	if (do_setcontext(new_ctx, regs, 0))
927		do_exit(SIGSEGV);
928
929	set_thread_flag(TIF_RESTOREALL);
930	return 0;
931}
932
933long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
934		     struct pt_regs *regs)
935{
936	struct rt_sigframe __user *rt_sf;
937
938	/* Always make any pending restarted system calls return -EINTR */
939	current_thread_info()->restart_block.fn = do_no_restart_syscall;
940
941	rt_sf = (struct rt_sigframe __user *)
942		(regs->gpr[1] + __SIGNAL_FRAMESIZE + 16);
943	if (!access_ok(VERIFY_READ, rt_sf, sizeof(*rt_sf)))
944		goto bad;
945	if (do_setcontext(&rt_sf->uc, regs, 1))
946		goto bad;
947
948	/*
949	 * It's not clear whether or why it is desirable to save the
950	 * sigaltstack setting on signal delivery and restore it on
951	 * signal return.  But other architectures do this and we have
952	 * always done it up until now so it is probably better not to
953	 * change it.  -- paulus
954	 */
955#ifdef CONFIG_PPC64
956	if (compat_restore_altstack(&rt_sf->uc.uc_stack))
957		goto bad;
958#else
959	if (restore_altstack(&rt_sf->uc.uc_stack))
960		goto bad;
961#endif
962	set_thread_flag(TIF_RESTOREALL);
963	return 0;
964
965 bad:
966	if (show_unhandled_signals)
967		printk_ratelimited(KERN_INFO
968				   "%s[%d]: bad frame in sys_rt_sigreturn: "
969				   "%p nip %08lx lr %08lx\n",
970				   current->comm, current->pid,
971				   rt_sf, regs->nip, regs->link);
972
973	force_sig(SIGSEGV, current);
974	return 0;
975}
976
977#ifdef CONFIG_PPC32
978int sys_debug_setcontext(struct ucontext __user *ctx,
979			 int ndbg, struct sig_dbg_op __user *dbg,
980			 int r6, int r7, int r8,
981			 struct pt_regs *regs)
982{
983	struct sig_dbg_op op;
984	int i;
985	unsigned char tmp;
986	unsigned long new_msr = regs->msr;
987#ifdef CONFIG_PPC_ADV_DEBUG_REGS
988	unsigned long new_dbcr0 = current->thread.dbcr0;
989#endif
990
991	for (i=0; i<ndbg; i++) {
992		if (copy_from_user(&op, dbg + i, sizeof(op)))
993			return -EFAULT;
994		switch (op.dbg_type) {
995		case SIG_DBG_SINGLE_STEPPING:
996#ifdef CONFIG_PPC_ADV_DEBUG_REGS
997			if (op.dbg_value) {
998				new_msr |= MSR_DE;
999				new_dbcr0 |= (DBCR0_IDM | DBCR0_IC);
1000			} else {
1001				new_dbcr0 &= ~DBCR0_IC;
1002				if (!DBCR_ACTIVE_EVENTS(new_dbcr0,
1003						current->thread.dbcr1)) {
1004					new_msr &= ~MSR_DE;
1005					new_dbcr0 &= ~DBCR0_IDM;
1006				}
1007			}
1008#else
1009			if (op.dbg_value)
1010				new_msr |= MSR_SE;
1011			else
1012				new_msr &= ~MSR_SE;
1013#endif
1014			break;
1015		case SIG_DBG_BRANCH_TRACING:
1016#ifdef CONFIG_PPC_ADV_DEBUG_REGS
1017			return -EINVAL;
1018#else
1019			if (op.dbg_value)
1020				new_msr |= MSR_BE;
1021			else
1022				new_msr &= ~MSR_BE;
1023#endif
1024			break;
1025
1026		default:
1027			return -EINVAL;
1028		}
1029	}
1030
1031	/* We wait until here to actually install the values in the
1032	   registers so if we fail in the above loop, it will not
1033	   affect the contents of these registers.  After this point,
1034	   failure is a problem, anyway, and it's very unlikely unless
1035	   the user is really doing something wrong. */
1036	regs->msr = new_msr;
1037#ifdef CONFIG_PPC_ADV_DEBUG_REGS
1038	current->thread.dbcr0 = new_dbcr0;
1039#endif
1040
1041	if (!access_ok(VERIFY_READ, ctx, sizeof(*ctx))
1042	    || __get_user(tmp, (u8 __user *) ctx)
1043	    || __get_user(tmp, (u8 __user *) (ctx + 1) - 1))
1044		return -EFAULT;
1045
1046	/*
1047	 * If we get a fault copying the context into the kernel's
1048	 * image of the user's registers, we can't just return -EFAULT
1049	 * because the user's registers will be corrupted.  For instance
1050	 * the NIP value may have been updated but not some of the
1051	 * other registers.  Given that we have done the access_ok
1052	 * and successfully read the first and last bytes of the region
1053	 * above, this should only happen in an out-of-memory situation
1054	 * or if another thread unmaps the region containing the context.
1055	 * We kill the task with a SIGSEGV in this situation.
1056	 */
1057	if (do_setcontext(ctx, regs, 1)) {
1058		if (show_unhandled_signals)
1059			printk_ratelimited(KERN_INFO "%s[%d]: bad frame in "
1060					   "sys_debug_setcontext: %p nip %08lx "
1061					   "lr %08lx\n",
1062					   current->comm, current->pid,
1063					   ctx, regs->nip, regs->link);
1064
1065		force_sig(SIGSEGV, current);
1066		goto out;
1067	}
1068
1069	/*
1070	 * It's not clear whether or why it is desirable to save the
1071	 * sigaltstack setting on signal delivery and restore it on
1072	 * signal return.  But other architectures do this and we have
1073	 * always done it up until now so it is probably better not to
1074	 * change it.  -- paulus
1075	 */
1076	restore_altstack(&ctx->uc_stack);
1077
1078	set_thread_flag(TIF_RESTOREALL);
1079 out:
1080	return 0;
1081}
1082#endif
1083
1084/*
1085 * OK, we're invoking a handler
1086 */
1087int handle_signal32(unsigned long sig, struct k_sigaction *ka,
1088		    siginfo_t *info, sigset_t *oldset, struct pt_regs *regs)
1089{
1090	struct sigcontext __user *sc;
1091	struct sigframe __user *frame;
1092	unsigned long newsp = 0;
1093
1094	/* Set up Signal Frame */
1095	frame = get_sigframe(ka, regs, sizeof(*frame), 1);
1096	if (unlikely(frame == NULL))
1097		goto badframe;
1098	sc = (struct sigcontext __user *) &frame->sctx;
1099
1100#if _NSIG != 64
1101#error "Please adjust handle_signal()"
1102#endif
1103	if (__put_user(to_user_ptr(ka->sa.sa_handler), &sc->handler)
1104	    || __put_user(oldset->sig[0], &sc->oldmask)
1105#ifdef CONFIG_PPC64
1106	    || __put_user((oldset->sig[0] >> 32), &sc->_unused[3])
1107#else
1108	    || __put_user(oldset->sig[1], &sc->_unused[3])
1109#endif
1110	    || __put_user(to_user_ptr(&frame->mctx), &sc->regs)
1111	    || __put_user(sig, &sc->signal))
1112		goto badframe;
1113
1114	if (vdso32_sigtramp && current->mm->context.vdso_base) {
1115		if (save_user_regs(regs, &frame->mctx, 0, 1))
1116			goto badframe;
1117		regs->link = current->mm->context.vdso_base + vdso32_sigtramp;
1118	} else {
1119		if (save_user_regs(regs, &frame->mctx, __NR_sigreturn, 1))
1120			goto badframe;
1121		regs->link = (unsigned long) frame->mctx.tramp;
1122	}
1123
1124	current->thread.fpscr.val = 0;	/* turn off all fp exceptions */
1125
1126	/* create a stack frame for the caller of the handler */
1127	newsp = ((unsigned long)frame) - __SIGNAL_FRAMESIZE;
1128	if (put_user(regs->gpr[1], (u32 __user *)newsp))
1129		goto badframe;
1130
1131	regs->gpr[1] = newsp;
1132	regs->gpr[3] = sig;
1133	regs->gpr[4] = (unsigned long) sc;
1134	regs->nip = (unsigned long) ka->sa.sa_handler;
1135	/* enter the signal handler in big-endian mode */
1136	regs->msr &= ~MSR_LE;
1137
1138	return 1;
1139
1140badframe:
1141#ifdef DEBUG_SIG
1142	printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n",
1143	       regs, frame, newsp);
1144#endif
1145	if (show_unhandled_signals)
1146		printk_ratelimited(KERN_INFO
1147				   "%s[%d]: bad frame in handle_signal32: "
1148				   "%p nip %08lx lr %08lx\n",
1149				   current->comm, current->pid,
1150				   frame, regs->nip, regs->link);
1151
1152	force_sigsegv(sig, current);
1153	return 0;
1154}
1155
1156/*
1157 * Do a signal return; undo the signal stack.
1158 */
1159long sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
1160		       struct pt_regs *regs)
1161{
1162	struct sigcontext __user *sc;
1163	struct sigcontext sigctx;
1164	struct mcontext __user *sr;
1165	void __user *addr;
1166	sigset_t set;
1167
1168	/* Always make any pending restarted system calls return -EINTR */
1169	current_thread_info()->restart_block.fn = do_no_restart_syscall;
1170
1171	sc = (struct sigcontext __user *)(regs->gpr[1] + __SIGNAL_FRAMESIZE);
1172	addr = sc;
1173	if (copy_from_user(&sigctx, sc, sizeof(sigctx)))
1174		goto badframe;
1175
1176#ifdef CONFIG_PPC64
1177	/*
1178	 * Note that PPC32 puts the upper 32 bits of the sigmask in the
1179	 * unused part of the signal stackframe
1180	 */
1181	set.sig[0] = sigctx.oldmask + ((long)(sigctx._unused[3]) << 32);
1182#else
1183	set.sig[0] = sigctx.oldmask;
1184	set.sig[1] = sigctx._unused[3];
1185#endif
1186	set_current_blocked(&set);
1187
1188	sr = (struct mcontext __user *)from_user_ptr(sigctx.regs);
1189	addr = sr;
1190	if (!access_ok(VERIFY_READ, sr, sizeof(*sr))
1191	    || restore_user_regs(regs, sr, 1))
1192		goto badframe;
1193
1194	set_thread_flag(TIF_RESTOREALL);
1195	return 0;
1196
1197badframe:
1198	if (show_unhandled_signals)
1199		printk_ratelimited(KERN_INFO
1200				   "%s[%d]: bad frame in sys_sigreturn: "
1201				   "%p nip %08lx lr %08lx\n",
1202				   current->comm, current->pid,
1203				   addr, regs->nip, regs->link);
1204
1205	force_sig(SIGSEGV, current);
1206	return 0;
1207}
1208