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