Merge branches 'x86/asm', 'x86/cleanups', 'x86/cpudetect', 'x86/debug', 'x86/doc...
[linux-2.6] / arch / x86 / kernel / signal.c
1 /*
2  *  Copyright (C) 1991, 1992  Linus Torvalds
3  *  Copyright (C) 2000, 2001, 2002 Andi Kleen SuSE Labs
4  *
5  *  1997-11-28  Modified for POSIX.1b signals by Richard Henderson
6  *  2000-06-20  Pentium III FXSR, SSE support by Gareth Hughes
7  *  2000-2002   x86-64 support by Andi Kleen
8  */
9
10 #include <linux/sched.h>
11 #include <linux/mm.h>
12 #include <linux/smp.h>
13 #include <linux/kernel.h>
14 #include <linux/signal.h>
15 #include <linux/errno.h>
16 #include <linux/wait.h>
17 #include <linux/ptrace.h>
18 #include <linux/tracehook.h>
19 #include <linux/unistd.h>
20 #include <linux/stddef.h>
21 #include <linux/personality.h>
22 #include <linux/uaccess.h>
23
24 #include <asm/processor.h>
25 #include <asm/ucontext.h>
26 #include <asm/i387.h>
27 #include <asm/vdso.h>
28
29 #ifdef CONFIG_X86_64
30 #include <asm/proto.h>
31 #include <asm/ia32_unistd.h>
32 #include <asm/mce.h>
33 #endif /* CONFIG_X86_64 */
34
35 #include <asm/syscall.h>
36 #include <asm/syscalls.h>
37
38 #include <asm/sigframe.h>
39
40 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
41
42 #define __FIX_EFLAGS    (X86_EFLAGS_AC | X86_EFLAGS_OF | \
43                          X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \
44                          X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \
45                          X86_EFLAGS_CF)
46
47 #ifdef CONFIG_X86_32
48 # define FIX_EFLAGS     (__FIX_EFLAGS | X86_EFLAGS_RF)
49 #else
50 # define FIX_EFLAGS     __FIX_EFLAGS
51 #endif
52
53 #define COPY(x)                 {               \
54         get_user_ex(regs->x, &sc->x);           \
55 }
56
57 #define COPY_SEG(seg)           {                       \
58                 unsigned short tmp;                     \
59                 get_user_ex(tmp, &sc->seg);             \
60                 regs->seg = tmp;                        \
61 }
62
63 #define COPY_SEG_CPL3(seg)      {                       \
64                 unsigned short tmp;                     \
65                 get_user_ex(tmp, &sc->seg);             \
66                 regs->seg = tmp | 3;                    \
67 }
68
69 #define GET_SEG(seg)            {                       \
70                 unsigned short tmp;                     \
71                 get_user_ex(tmp, &sc->seg);             \
72                 loadsegment(seg, tmp);                  \
73 }
74
75 static int
76 restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
77                    unsigned long *pax)
78 {
79         void __user *buf;
80         unsigned int tmpflags;
81         unsigned int err = 0;
82
83         /* Always make any pending restarted system calls return -EINTR */
84         current_thread_info()->restart_block.fn = do_no_restart_syscall;
85
86         get_user_try {
87
88 #ifdef CONFIG_X86_32
89                 GET_SEG(gs);
90                 COPY_SEG(fs);
91                 COPY_SEG(es);
92                 COPY_SEG(ds);
93 #endif /* CONFIG_X86_32 */
94
95                 COPY(di); COPY(si); COPY(bp); COPY(sp); COPY(bx);
96                 COPY(dx); COPY(cx); COPY(ip);
97
98 #ifdef CONFIG_X86_64
99                 COPY(r8);
100                 COPY(r9);
101                 COPY(r10);
102                 COPY(r11);
103                 COPY(r12);
104                 COPY(r13);
105                 COPY(r14);
106                 COPY(r15);
107 #endif /* CONFIG_X86_64 */
108
109 #ifdef CONFIG_X86_32
110                 COPY_SEG_CPL3(cs);
111                 COPY_SEG_CPL3(ss);
112 #else /* !CONFIG_X86_32 */
113                 /* Kernel saves and restores only the CS segment register on signals,
114                  * which is the bare minimum needed to allow mixed 32/64-bit code.
115                  * App's signal handler can save/restore other segments if needed. */
116                 COPY_SEG_CPL3(cs);
117 #endif /* CONFIG_X86_32 */
118
119                 get_user_ex(tmpflags, &sc->flags);
120                 regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
121                 regs->orig_ax = -1;             /* disable syscall checks */
122
123                 get_user_ex(buf, &sc->fpstate);
124                 err |= restore_i387_xstate(buf);
125
126                 get_user_ex(*pax, &sc->ax);
127         } get_user_catch(err);
128
129         return err;
130 }
131
132 static int
133 setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
134                  struct pt_regs *regs, unsigned long mask)
135 {
136         int err = 0;
137
138         put_user_try {
139
140 #ifdef CONFIG_X86_32
141                 {
142                         unsigned int tmp;
143
144                         savesegment(gs, tmp);
145                         put_user_ex(tmp, (unsigned int __user *)&sc->gs);
146                 }
147                 put_user_ex(regs->fs, (unsigned int __user *)&sc->fs);
148                 put_user_ex(regs->es, (unsigned int __user *)&sc->es);
149                 put_user_ex(regs->ds, (unsigned int __user *)&sc->ds);
150 #endif /* CONFIG_X86_32 */
151
152                 put_user_ex(regs->di, &sc->di);
153                 put_user_ex(regs->si, &sc->si);
154                 put_user_ex(regs->bp, &sc->bp);
155                 put_user_ex(regs->sp, &sc->sp);
156                 put_user_ex(regs->bx, &sc->bx);
157                 put_user_ex(regs->dx, &sc->dx);
158                 put_user_ex(regs->cx, &sc->cx);
159                 put_user_ex(regs->ax, &sc->ax);
160 #ifdef CONFIG_X86_64
161                 put_user_ex(regs->r8, &sc->r8);
162                 put_user_ex(regs->r9, &sc->r9);
163                 put_user_ex(regs->r10, &sc->r10);
164                 put_user_ex(regs->r11, &sc->r11);
165                 put_user_ex(regs->r12, &sc->r12);
166                 put_user_ex(regs->r13, &sc->r13);
167                 put_user_ex(regs->r14, &sc->r14);
168                 put_user_ex(regs->r15, &sc->r15);
169 #endif /* CONFIG_X86_64 */
170
171                 put_user_ex(current->thread.trap_no, &sc->trapno);
172                 put_user_ex(current->thread.error_code, &sc->err);
173                 put_user_ex(regs->ip, &sc->ip);
174 #ifdef CONFIG_X86_32
175                 put_user_ex(regs->cs, (unsigned int __user *)&sc->cs);
176                 put_user_ex(regs->flags, &sc->flags);
177                 put_user_ex(regs->sp, &sc->sp_at_signal);
178                 put_user_ex(regs->ss, (unsigned int __user *)&sc->ss);
179 #else /* !CONFIG_X86_32 */
180                 put_user_ex(regs->flags, &sc->flags);
181                 put_user_ex(regs->cs, &sc->cs);
182                 put_user_ex(0, &sc->gs);
183                 put_user_ex(0, &sc->fs);
184 #endif /* CONFIG_X86_32 */
185
186                 put_user_ex(fpstate, &sc->fpstate);
187
188                 /* non-iBCS2 extensions.. */
189                 put_user_ex(mask, &sc->oldmask);
190                 put_user_ex(current->thread.cr2, &sc->cr2);
191         } put_user_catch(err);
192
193         return err;
194 }
195
196 /*
197  * Set up a signal frame.
198  */
199 #ifdef CONFIG_X86_32
200 static const struct {
201         u16 poplmovl;
202         u32 val;
203         u16 int80;
204 } __attribute__((packed)) retcode = {
205         0xb858,         /* popl %eax; movl $..., %eax */
206         __NR_sigreturn,
207         0x80cd,         /* int $0x80 */
208 };
209
210 static const struct {
211         u8  movl;
212         u32 val;
213         u16 int80;
214         u8  pad;
215 } __attribute__((packed)) rt_retcode = {
216         0xb8,           /* movl $..., %eax */
217         __NR_rt_sigreturn,
218         0x80cd,         /* int $0x80 */
219         0
220 };
221
222 /*
223  * Determine which stack to use..
224  */
225 static inline void __user *
226 get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
227              void **fpstate)
228 {
229         unsigned long sp;
230
231         /* Default to using normal stack */
232         sp = regs->sp;
233
234         /*
235          * If we are on the alternate signal stack and would overflow it, don't.
236          * Return an always-bogus address instead so we will die with SIGSEGV.
237          */
238         if (on_sig_stack(sp) && !likely(on_sig_stack(sp - frame_size)))
239                 return (void __user *) -1L;
240
241         /* This is the X/Open sanctioned signal stack switching.  */
242         if (ka->sa.sa_flags & SA_ONSTACK) {
243                 if (sas_ss_flags(sp) == 0)
244                         sp = current->sas_ss_sp + current->sas_ss_size;
245         } else {
246                 /* This is the legacy signal stack switching. */
247                 if ((regs->ss & 0xffff) != __USER_DS &&
248                         !(ka->sa.sa_flags & SA_RESTORER) &&
249                                 ka->sa.sa_restorer)
250                         sp = (unsigned long) ka->sa.sa_restorer;
251         }
252
253         if (used_math()) {
254                 sp = sp - sig_xstate_size;
255                 *fpstate = (struct _fpstate *) sp;
256                 if (save_i387_xstate(*fpstate) < 0)
257                         return (void __user *)-1L;
258         }
259
260         sp -= frame_size;
261         /*
262          * Align the stack pointer according to the i386 ABI,
263          * i.e. so that on function entry ((sp + 4) & 15) == 0.
264          */
265         sp = ((sp + 4) & -16ul) - 4;
266
267         return (void __user *) sp;
268 }
269
270 static int
271 __setup_frame(int sig, struct k_sigaction *ka, sigset_t *set,
272               struct pt_regs *regs)
273 {
274         struct sigframe __user *frame;
275         void __user *restorer;
276         int err = 0;
277         void __user *fpstate = NULL;
278
279         frame = get_sigframe(ka, regs, sizeof(*frame), &fpstate);
280
281         if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
282                 return -EFAULT;
283
284         if (__put_user(sig, &frame->sig))
285                 return -EFAULT;
286
287         if (setup_sigcontext(&frame->sc, fpstate, regs, set->sig[0]))
288                 return -EFAULT;
289
290         if (_NSIG_WORDS > 1) {
291                 if (__copy_to_user(&frame->extramask, &set->sig[1],
292                                    sizeof(frame->extramask)))
293                         return -EFAULT;
294         }
295
296         if (current->mm->context.vdso)
297                 restorer = VDSO32_SYMBOL(current->mm->context.vdso, sigreturn);
298         else
299                 restorer = &frame->retcode;
300         if (ka->sa.sa_flags & SA_RESTORER)
301                 restorer = ka->sa.sa_restorer;
302
303         /* Set up to return from userspace.  */
304         err |= __put_user(restorer, &frame->pretcode);
305
306         /*
307          * This is popl %eax ; movl $__NR_sigreturn, %eax ; int $0x80
308          *
309          * WE DO NOT USE IT ANY MORE! It's only left here for historical
310          * reasons and because gdb uses it as a signature to notice
311          * signal handler stack frames.
312          */
313         err |= __put_user(*((u64 *)&retcode), (u64 *)frame->retcode);
314
315         if (err)
316                 return -EFAULT;
317
318         /* Set up registers for signal handler */
319         regs->sp = (unsigned long)frame;
320         regs->ip = (unsigned long)ka->sa.sa_handler;
321         regs->ax = (unsigned long)sig;
322         regs->dx = 0;
323         regs->cx = 0;
324
325         regs->ds = __USER_DS;
326         regs->es = __USER_DS;
327         regs->ss = __USER_DS;
328         regs->cs = __USER_CS;
329
330         return 0;
331 }
332
333 static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
334                             sigset_t *set, struct pt_regs *regs)
335 {
336         struct rt_sigframe __user *frame;
337         void __user *restorer;
338         int err = 0;
339         void __user *fpstate = NULL;
340
341         frame = get_sigframe(ka, regs, sizeof(*frame), &fpstate);
342
343         if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
344                 return -EFAULT;
345
346         put_user_try {
347                 put_user_ex(sig, &frame->sig);
348                 put_user_ex(&frame->info, &frame->pinfo);
349                 put_user_ex(&frame->uc, &frame->puc);
350                 err |= copy_siginfo_to_user(&frame->info, info);
351
352                 /* Create the ucontext.  */
353                 if (cpu_has_xsave)
354                         put_user_ex(UC_FP_XSTATE, &frame->uc.uc_flags);
355                 else
356                         put_user_ex(0, &frame->uc.uc_flags);
357                 put_user_ex(0, &frame->uc.uc_link);
358                 put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
359                 put_user_ex(sas_ss_flags(regs->sp),
360                             &frame->uc.uc_stack.ss_flags);
361                 put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
362                 err |= setup_sigcontext(&frame->uc.uc_mcontext, fpstate,
363                                         regs, set->sig[0]);
364                 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
365
366                 /* Set up to return from userspace.  */
367                 restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn);
368                 if (ka->sa.sa_flags & SA_RESTORER)
369                         restorer = ka->sa.sa_restorer;
370                 put_user_ex(restorer, &frame->pretcode);
371
372                 /*
373                  * This is movl $__NR_rt_sigreturn, %ax ; int $0x80
374                  *
375                  * WE DO NOT USE IT ANY MORE! It's only left here for historical
376                  * reasons and because gdb uses it as a signature to notice
377                  * signal handler stack frames.
378                  */
379                 put_user_ex(*((u64 *)&rt_retcode), (u64 *)frame->retcode);
380         } put_user_catch(err);
381
382         if (err)
383                 return -EFAULT;
384
385         /* Set up registers for signal handler */
386         regs->sp = (unsigned long)frame;
387         regs->ip = (unsigned long)ka->sa.sa_handler;
388         regs->ax = (unsigned long)sig;
389         regs->dx = (unsigned long)&frame->info;
390         regs->cx = (unsigned long)&frame->uc;
391
392         regs->ds = __USER_DS;
393         regs->es = __USER_DS;
394         regs->ss = __USER_DS;
395         regs->cs = __USER_CS;
396
397         return 0;
398 }
399 #else /* !CONFIG_X86_32 */
400 /*
401  * Determine which stack to use..
402  */
403 static void __user *
404 get_stack(struct k_sigaction *ka, unsigned long sp, unsigned long size)
405 {
406         /* Default to using normal stack - redzone*/
407         sp -= 128;
408
409         /* This is the X/Open sanctioned signal stack switching.  */
410         if (ka->sa.sa_flags & SA_ONSTACK) {
411                 if (sas_ss_flags(sp) == 0)
412                         sp = current->sas_ss_sp + current->sas_ss_size;
413         }
414
415         return (void __user *)round_down(sp - size, 64);
416 }
417
418 static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
419                             sigset_t *set, struct pt_regs *regs)
420 {
421         struct rt_sigframe __user *frame;
422         void __user *fp = NULL;
423         int err = 0;
424         struct task_struct *me = current;
425
426         if (used_math()) {
427                 fp = get_stack(ka, regs->sp, sig_xstate_size);
428                 frame = (void __user *)round_down(
429                         (unsigned long)fp - sizeof(struct rt_sigframe), 16) - 8;
430
431                 if (save_i387_xstate(fp) < 0)
432                         return -EFAULT;
433         } else
434                 frame = get_stack(ka, regs->sp, sizeof(struct rt_sigframe)) - 8;
435
436         if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
437                 return -EFAULT;
438
439         if (ka->sa.sa_flags & SA_SIGINFO) {
440                 if (copy_siginfo_to_user(&frame->info, info))
441                         return -EFAULT;
442         }
443
444         put_user_try {
445                 /* Create the ucontext.  */
446                 if (cpu_has_xsave)
447                         put_user_ex(UC_FP_XSTATE, &frame->uc.uc_flags);
448                 else
449                         put_user_ex(0, &frame->uc.uc_flags);
450                 put_user_ex(0, &frame->uc.uc_link);
451                 put_user_ex(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
452                 put_user_ex(sas_ss_flags(regs->sp),
453                             &frame->uc.uc_stack.ss_flags);
454                 put_user_ex(me->sas_ss_size, &frame->uc.uc_stack.ss_size);
455                 err |= setup_sigcontext(&frame->uc.uc_mcontext, fp, regs, set->sig[0]);
456                 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
457
458                 /* Set up to return from userspace.  If provided, use a stub
459                    already in userspace.  */
460                 /* x86-64 should always use SA_RESTORER. */
461                 if (ka->sa.sa_flags & SA_RESTORER) {
462                         put_user_ex(ka->sa.sa_restorer, &frame->pretcode);
463                 } else {
464                         /* could use a vstub here */
465                         err |= -EFAULT;
466                 }
467         } put_user_catch(err);
468
469         if (err)
470                 return -EFAULT;
471
472         /* Set up registers for signal handler */
473         regs->di = sig;
474         /* In case the signal handler was declared without prototypes */
475         regs->ax = 0;
476
477         /* This also works for non SA_SIGINFO handlers because they expect the
478            next argument after the signal number on the stack. */
479         regs->si = (unsigned long)&frame->info;
480         regs->dx = (unsigned long)&frame->uc;
481         regs->ip = (unsigned long) ka->sa.sa_handler;
482
483         regs->sp = (unsigned long)frame;
484
485         /* Set up the CS register to run signal handlers in 64-bit mode,
486            even if the handler happens to be interrupting 32-bit code. */
487         regs->cs = __USER_CS;
488
489         return 0;
490 }
491 #endif /* CONFIG_X86_32 */
492
493 #ifdef CONFIG_X86_32
494 /*
495  * Atomically swap in the new signal mask, and wait for a signal.
496  */
497 asmlinkage int
498 sys_sigsuspend(int history0, int history1, old_sigset_t mask)
499 {
500         mask &= _BLOCKABLE;
501         spin_lock_irq(&current->sighand->siglock);
502         current->saved_sigmask = current->blocked;
503         siginitset(&current->blocked, mask);
504         recalc_sigpending();
505         spin_unlock_irq(&current->sighand->siglock);
506
507         current->state = TASK_INTERRUPTIBLE;
508         schedule();
509         set_restore_sigmask();
510
511         return -ERESTARTNOHAND;
512 }
513
514 asmlinkage int
515 sys_sigaction(int sig, const struct old_sigaction __user *act,
516               struct old_sigaction __user *oact)
517 {
518         struct k_sigaction new_ka, old_ka;
519         int ret = 0;
520
521         if (act) {
522                 old_sigset_t mask;
523
524                 if (!access_ok(VERIFY_READ, act, sizeof(*act)))
525                         return -EFAULT;
526
527                 get_user_try {
528                         get_user_ex(new_ka.sa.sa_handler, &act->sa_handler);
529                         get_user_ex(new_ka.sa.sa_flags, &act->sa_flags);
530                         get_user_ex(mask, &act->sa_mask);
531                         get_user_ex(new_ka.sa.sa_restorer, &act->sa_restorer);
532                 } get_user_catch(ret);
533
534                 if (ret)
535                         return -EFAULT;
536                 siginitset(&new_ka.sa.sa_mask, mask);
537         }
538
539         ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
540
541         if (!ret && oact) {
542                 if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)))
543                         return -EFAULT;
544
545                 put_user_try {
546                         put_user_ex(old_ka.sa.sa_handler, &oact->sa_handler);
547                         put_user_ex(old_ka.sa.sa_flags, &oact->sa_flags);
548                         put_user_ex(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
549                         put_user_ex(old_ka.sa.sa_restorer, &oact->sa_restorer);
550                 } put_user_catch(ret);
551
552                 if (ret)
553                         return -EFAULT;
554         }
555
556         return ret;
557 }
558 #endif /* CONFIG_X86_32 */
559
560 #ifdef CONFIG_X86_32
561 asmlinkage int sys_sigaltstack(unsigned long bx)
562 {
563         /*
564          * This is needed to make gcc realize it doesn't own the
565          * "struct pt_regs"
566          */
567         struct pt_regs *regs = (struct pt_regs *)&bx;
568         const stack_t __user *uss = (const stack_t __user *)bx;
569         stack_t __user *uoss = (stack_t __user *)regs->cx;
570
571         return do_sigaltstack(uss, uoss, regs->sp);
572 }
573 #else /* !CONFIG_X86_32 */
574 asmlinkage long
575 sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
576                 struct pt_regs *regs)
577 {
578         return do_sigaltstack(uss, uoss, regs->sp);
579 }
580 #endif /* CONFIG_X86_32 */
581
582 /*
583  * Do a signal return; undo the signal stack.
584  */
585 #ifdef CONFIG_X86_32
586 asmlinkage unsigned long sys_sigreturn(unsigned long __unused)
587 {
588         struct sigframe __user *frame;
589         struct pt_regs *regs;
590         unsigned long ax;
591         sigset_t set;
592
593         regs = (struct pt_regs *) &__unused;
594         frame = (struct sigframe __user *)(regs->sp - 8);
595
596         if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
597                 goto badframe;
598         if (__get_user(set.sig[0], &frame->sc.oldmask) || (_NSIG_WORDS > 1
599                 && __copy_from_user(&set.sig[1], &frame->extramask,
600                                     sizeof(frame->extramask))))
601                 goto badframe;
602
603         sigdelsetmask(&set, ~_BLOCKABLE);
604         spin_lock_irq(&current->sighand->siglock);
605         current->blocked = set;
606         recalc_sigpending();
607         spin_unlock_irq(&current->sighand->siglock);
608
609         if (restore_sigcontext(regs, &frame->sc, &ax))
610                 goto badframe;
611         return ax;
612
613 badframe:
614         signal_fault(regs, frame, "sigreturn");
615
616         return 0;
617 }
618 #endif /* CONFIG_X86_32 */
619
620 static long do_rt_sigreturn(struct pt_regs *regs)
621 {
622         struct rt_sigframe __user *frame;
623         unsigned long ax;
624         sigset_t set;
625
626         frame = (struct rt_sigframe __user *)(regs->sp - sizeof(long));
627         if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
628                 goto badframe;
629         if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
630                 goto badframe;
631
632         sigdelsetmask(&set, ~_BLOCKABLE);
633         spin_lock_irq(&current->sighand->siglock);
634         current->blocked = set;
635         recalc_sigpending();
636         spin_unlock_irq(&current->sighand->siglock);
637
638         if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
639                 goto badframe;
640
641         if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->sp) == -EFAULT)
642                 goto badframe;
643
644         return ax;
645
646 badframe:
647         signal_fault(regs, frame, "rt_sigreturn");
648         return 0;
649 }
650
651 #ifdef CONFIG_X86_32
652 /*
653  * Note: do not pass in pt_regs directly as with tail-call optimization
654  * GCC will incorrectly stomp on the caller's frame and corrupt user-space
655  * register state:
656  */
657 asmlinkage int sys_rt_sigreturn(unsigned long __unused)
658 {
659         struct pt_regs *regs = (struct pt_regs *)&__unused;
660
661         return do_rt_sigreturn(regs);
662 }
663 #else /* !CONFIG_X86_32 */
664 asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
665 {
666         return do_rt_sigreturn(regs);
667 }
668 #endif /* CONFIG_X86_32 */
669
670 /*
671  * OK, we're invoking a handler:
672  */
673 static int signr_convert(int sig)
674 {
675 #ifdef CONFIG_X86_32
676         struct thread_info *info = current_thread_info();
677
678         if (info->exec_domain && info->exec_domain->signal_invmap && sig < 32)
679                 return info->exec_domain->signal_invmap[sig];
680 #endif /* CONFIG_X86_32 */
681         return sig;
682 }
683
684 #ifdef CONFIG_X86_32
685
686 #define is_ia32 1
687 #define ia32_setup_frame        __setup_frame
688 #define ia32_setup_rt_frame     __setup_rt_frame
689
690 #else /* !CONFIG_X86_32 */
691
692 #ifdef CONFIG_IA32_EMULATION
693 #define is_ia32 test_thread_flag(TIF_IA32)
694 #else /* !CONFIG_IA32_EMULATION */
695 #define is_ia32 0
696 #endif /* CONFIG_IA32_EMULATION */
697
698 int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
699                 sigset_t *set, struct pt_regs *regs);
700 int ia32_setup_frame(int sig, struct k_sigaction *ka,
701                 sigset_t *set, struct pt_regs *regs);
702
703 #endif /* CONFIG_X86_32 */
704
705 static int
706 setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
707                sigset_t *set, struct pt_regs *regs)
708 {
709         int usig = signr_convert(sig);
710         int ret;
711
712         /* Set up the stack frame */
713         if (is_ia32) {
714                 if (ka->sa.sa_flags & SA_SIGINFO)
715                         ret = ia32_setup_rt_frame(usig, ka, info, set, regs);
716                 else
717                         ret = ia32_setup_frame(usig, ka, set, regs);
718         } else
719                 ret = __setup_rt_frame(sig, ka, info, set, regs);
720
721         if (ret) {
722                 force_sigsegv(sig, current);
723                 return -EFAULT;
724         }
725
726         return ret;
727 }
728
729 static int
730 handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
731               sigset_t *oldset, struct pt_regs *regs)
732 {
733         int ret;
734
735         /* Are we from a system call? */
736         if (syscall_get_nr(current, regs) >= 0) {
737                 /* If so, check system call restarting.. */
738                 switch (syscall_get_error(current, regs)) {
739                 case -ERESTART_RESTARTBLOCK:
740                 case -ERESTARTNOHAND:
741                         regs->ax = -EINTR;
742                         break;
743
744                 case -ERESTARTSYS:
745                         if (!(ka->sa.sa_flags & SA_RESTART)) {
746                                 regs->ax = -EINTR;
747                                 break;
748                         }
749                 /* fallthrough */
750                 case -ERESTARTNOINTR:
751                         regs->ax = regs->orig_ax;
752                         regs->ip -= 2;
753                         break;
754                 }
755         }
756
757         /*
758          * If TF is set due to a debugger (TIF_FORCED_TF), clear the TF
759          * flag so that register information in the sigcontext is correct.
760          */
761         if (unlikely(regs->flags & X86_EFLAGS_TF) &&
762             likely(test_and_clear_thread_flag(TIF_FORCED_TF)))
763                 regs->flags &= ~X86_EFLAGS_TF;
764
765         ret = setup_rt_frame(sig, ka, info, oldset, regs);
766
767         if (ret)
768                 return ret;
769
770 #ifdef CONFIG_X86_64
771         /*
772          * This has nothing to do with segment registers,
773          * despite the name.  This magic affects uaccess.h
774          * macros' behavior.  Reset it to the normal setting.
775          */
776         set_fs(USER_DS);
777 #endif
778
779         /*
780          * Clear the direction flag as per the ABI for function entry.
781          */
782         regs->flags &= ~X86_EFLAGS_DF;
783
784         /*
785          * Clear TF when entering the signal handler, but
786          * notify any tracer that was single-stepping it.
787          * The tracer may want to single-step inside the
788          * handler too.
789          */
790         regs->flags &= ~X86_EFLAGS_TF;
791
792         spin_lock_irq(&current->sighand->siglock);
793         sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
794         if (!(ka->sa.sa_flags & SA_NODEFER))
795                 sigaddset(&current->blocked, sig);
796         recalc_sigpending();
797         spin_unlock_irq(&current->sighand->siglock);
798
799         tracehook_signal_handler(sig, info, ka, regs,
800                                  test_thread_flag(TIF_SINGLESTEP));
801
802         return 0;
803 }
804
805 #ifdef CONFIG_X86_32
806 #define NR_restart_syscall      __NR_restart_syscall
807 #else /* !CONFIG_X86_32 */
808 #define NR_restart_syscall      \
809         test_thread_flag(TIF_IA32) ? __NR_ia32_restart_syscall : __NR_restart_syscall
810 #endif /* CONFIG_X86_32 */
811
812 /*
813  * Note that 'init' is a special process: it doesn't get signals it doesn't
814  * want to handle. Thus you cannot kill init even with a SIGKILL even by
815  * mistake.
816  */
817 static void do_signal(struct pt_regs *regs)
818 {
819         struct k_sigaction ka;
820         siginfo_t info;
821         int signr;
822         sigset_t *oldset;
823
824         /*
825          * We want the common case to go fast, which is why we may in certain
826          * cases get here from kernel mode. Just return without doing anything
827          * if so.
828          * X86_32: vm86 regs switched out by assembly code before reaching
829          * here, so testing against kernel CS suffices.
830          */
831         if (!user_mode(regs))
832                 return;
833
834         if (current_thread_info()->status & TS_RESTORE_SIGMASK)
835                 oldset = &current->saved_sigmask;
836         else
837                 oldset = &current->blocked;
838
839         signr = get_signal_to_deliver(&info, &ka, regs, NULL);
840         if (signr > 0) {
841                 /*
842                  * Re-enable any watchpoints before delivering the
843                  * signal to user space. The processor register will
844                  * have been cleared if the watchpoint triggered
845                  * inside the kernel.
846                  */
847                 if (current->thread.debugreg7)
848                         set_debugreg(current->thread.debugreg7, 7);
849
850                 /* Whee! Actually deliver the signal.  */
851                 if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
852                         /*
853                          * A signal was successfully delivered; the saved
854                          * sigmask will have been stored in the signal frame,
855                          * and will be restored by sigreturn, so we can simply
856                          * clear the TS_RESTORE_SIGMASK flag.
857                          */
858                         current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
859                 }
860                 return;
861         }
862
863         /* Did we come from a system call? */
864         if (syscall_get_nr(current, regs) >= 0) {
865                 /* Restart the system call - no handlers present */
866                 switch (syscall_get_error(current, regs)) {
867                 case -ERESTARTNOHAND:
868                 case -ERESTARTSYS:
869                 case -ERESTARTNOINTR:
870                         regs->ax = regs->orig_ax;
871                         regs->ip -= 2;
872                         break;
873
874                 case -ERESTART_RESTARTBLOCK:
875                         regs->ax = NR_restart_syscall;
876                         regs->ip -= 2;
877                         break;
878                 }
879         }
880
881         /*
882          * If there's no signal to deliver, we just put the saved sigmask
883          * back.
884          */
885         if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
886                 current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
887                 sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
888         }
889 }
890
891 /*
892  * notification of userspace execution resumption
893  * - triggered by the TIF_WORK_MASK flags
894  */
895 void
896 do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags)
897 {
898 #if defined(CONFIG_X86_64) && defined(CONFIG_X86_MCE)
899         /* notify userspace of pending MCEs */
900         if (thread_info_flags & _TIF_MCE_NOTIFY)
901                 mce_notify_user();
902 #endif /* CONFIG_X86_64 && CONFIG_X86_MCE */
903
904         /* deal with pending signal delivery */
905         if (thread_info_flags & _TIF_SIGPENDING)
906                 do_signal(regs);
907
908         if (thread_info_flags & _TIF_NOTIFY_RESUME) {
909                 clear_thread_flag(TIF_NOTIFY_RESUME);
910                 tracehook_notify_resume(regs);
911         }
912
913 #ifdef CONFIG_X86_32
914         clear_thread_flag(TIF_IRET);
915 #endif /* CONFIG_X86_32 */
916 }
917
918 void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
919 {
920         struct task_struct *me = current;
921
922         if (show_unhandled_signals && printk_ratelimit()) {
923                 printk("%s"
924                        "%s[%d] bad frame in %s frame:%p ip:%lx sp:%lx orax:%lx",
925                        task_pid_nr(current) > 1 ? KERN_INFO : KERN_EMERG,
926                        me->comm, me->pid, where, frame,
927                        regs->ip, regs->sp, regs->orig_ax);
928                 print_vma_addr(" in ", regs->ip);
929                 printk(KERN_CONT "\n");
930         }
931
932         force_sig(SIGSEGV, me);
933 }