2 * linux/arch/x86_64/kernel/signal.c
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 * Copyright (C) 2000, 2001 SuSE Labs
7 * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson
8 * 2000-06-20 Pentium III FXSR, SSE support by Gareth Hughes
9 * 2000-2001 x86-64 support by Andi Kleen
11 * $Id: signal.c,v 1.43 2003/09/06 18:10:44 ak Exp $
14 #include <linux/sched.h>
16 #include <linux/smp.h>
17 #include <linux/smp_lock.h>
18 #include <linux/kernel.h>
19 #include <linux/signal.h>
20 #include <linux/errno.h>
21 #include <linux/wait.h>
22 #include <linux/ptrace.h>
23 #include <linux/unistd.h>
24 #include <linux/stddef.h>
25 #include <linux/tty.h>
26 #include <linux/personality.h>
27 #include <linux/compiler.h>
28 #include <linux/binfmts.h>
29 #include <asm/ucontext.h>
30 #include <asm/uaccess.h>
32 #include <asm/proto.h>
36 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
38 asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset);
40 void ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
41 sigset_t *set, struct pt_regs * regs);
42 void ia32_setup_frame(int sig, struct k_sigaction *ka,
43 sigset_t *set, struct pt_regs * regs);
44 void signal_fault(struct pt_regs *regs, void *frame, char *where);
45 extern int exception_trace;
47 int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
49 if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
51 if (from->si_code < 0)
52 return __copy_to_user(to, from, sizeof(siginfo_t));
56 /* If you change siginfo_t structure, please be sure
57 this code is fixed accordingly.
58 It should never copy any pad contained in the structure
59 to avoid security leaks, but must copy the generic
60 3 ints plus the relevant union member. */
61 err = __put_user(from->si_signo, &to->si_signo);
62 err |= __put_user(from->si_errno, &to->si_errno);
63 err |= __put_user((short)from->si_code, &to->si_code);
64 /* First 32bits of unions are always present. */
65 err |= __put_user(from->si_pid, &to->si_pid);
66 switch (from->si_code >> 16) {
68 err |= __put_user(from->si_utime, &to->si_utime);
69 err |= __put_user(from->si_stime, &to->si_stime);
70 err |= __put_user(from->si_status, &to->si_status);
72 err |= __put_user(from->si_uid, &to->si_uid);
75 err |= __put_user(from->si_band, &to->si_band);
76 err |= __put_user(from->si_fd, &to->si_fd);
78 /* case __SI_RT: This is not generated by the kernel as of now. */
85 sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, struct pt_regs regs)
87 sigset_t saveset, newset;
89 /* XXX: Don't preclude handling different sized sigset_t's. */
90 if (sigsetsize != sizeof(sigset_t))
93 if (copy_from_user(&newset, unewset, sizeof(newset)))
95 sigdelsetmask(&newset, ~_BLOCKABLE);
97 spin_lock_irq(¤t->sigmask_lock);
98 saveset = current->blocked;
99 current->blocked = newset;
100 recalc_sigpending(current);
101 spin_unlock_irq(¤t->sigmask_lock);
103 printk("rt_sigsuspend savset(%lx) newset(%lx) regs(%p) rip(%lx)\n",
104 saveset, newset, ®s, regs.rip);
108 current->state = TASK_INTERRUPTIBLE;
110 if (do_signal(®s, &saveset))
116 sys_sigaltstack(const stack_t *uss, stack_t *uoss, struct pt_regs regs)
118 return do_sigaltstack(uss, uoss, regs.rsp);
123 * Do a signal return; undo the signal stack.
134 restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, unsigned long *prax)
136 unsigned int err = 0;
139 #define COPY(x) err |= __get_user(regs->x, &sc->x)
141 /* fs and gs are ignored because we cannot handle the 64bit base easily */
143 COPY(rdi); COPY(rsi); COPY(rbp); COPY(rsp); COPY(rbx);
144 COPY(rdx); COPY(rcx);
146 if (regs->rip >= TASK_SIZE && regs->rip < VSYSCALL_START) {
159 /* do not copy CS/SS because 64bit should not need it.
160 also need IRET exception handling anyways. */
163 unsigned int tmpflags;
164 err |= __get_user(tmpflags, &sc->eflags);
165 regs->eflags = (regs->eflags & ~0x40DD5) | (tmpflags & 0x40DD5);
166 regs->orig_rax = -1; /* disable syscall checks */
170 struct _fpstate * buf;
171 err |= __get_user(buf, &sc->fpstate);
173 if (unlikely(verify_area(VERIFY_READ, buf, sizeof(*buf))))
175 err |= restore_i387(buf);
179 err |= __get_user(*prax, &sc->rax);
184 asmlinkage long sys_rt_sigreturn(struct pt_regs regs)
186 struct rt_sigframe *frame = (struct rt_sigframe *)(regs.rsp - 8);
191 if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
193 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
196 sigdelsetmask(&set, ~_BLOCKABLE);
197 spin_lock_irq(¤t->sigmask_lock);
198 current->blocked = set;
199 recalc_sigpending(current);
200 spin_unlock_irq(¤t->sigmask_lock);
202 if (restore_sigcontext(®s, &frame->uc.uc_mcontext, &eax))
206 printk("%d sigreturn rip:%lx rsp:%lx frame:%p rax:%lx\n",current->pid,regs.rip,regs.rsp,frame,eax);
209 if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st)))
211 /* It is more difficult to avoid calling this function than to
212 call it and ignore errors. */
213 do_sigaltstack(&st, NULL, regs.rsp);
218 signal_fault(®s, frame, "rt_sigreturn");
223 * Set up a signal frame.
227 setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs, unsigned long mask)
230 struct task_struct *me = current;
233 err |= __put_user(0, &sc->gs);
234 err |= __put_user(0, &sc->fs);
236 err |= __put_user(regs->rdi, &sc->rdi);
237 err |= __put_user(regs->rsi, &sc->rsi);
238 err |= __put_user(regs->rbp, &sc->rbp);
239 err |= __put_user(regs->rsp, &sc->rsp);
240 err |= __put_user(regs->rbx, &sc->rbx);
241 err |= __put_user(regs->rdx, &sc->rdx);
242 err |= __put_user(regs->rcx, &sc->rcx);
243 err |= __put_user(regs->rax, &sc->rax);
244 err |= __put_user(regs->r8, &sc->r8);
245 err |= __put_user(regs->r9, &sc->r9);
246 err |= __put_user(regs->r10, &sc->r10);
247 err |= __put_user(regs->r11, &sc->r11);
248 err |= __put_user(regs->r12, &sc->r12);
249 err |= __put_user(regs->r13, &sc->r13);
250 err |= __put_user(regs->r14, &sc->r14);
251 err |= __put_user(regs->r15, &sc->r15);
252 err |= __put_user(me->thread.trap_no, &sc->trapno);
253 err |= __put_user(me->thread.error_code, &sc->err);
254 err |= __put_user(regs->rip, &sc->rip);
255 err |= __put_user(regs->cs, &sc->cs);
256 err |= __put_user(regs->eflags, &sc->eflags);
257 err |= __put_user(mask, &sc->oldmask);
258 err |= __put_user(me->thread.cr2, &sc->cr2);
264 get_stack(struct k_sigaction *ka, struct pt_regs *regs, unsigned long size)
268 /* Default to using normal stack - redzone*/
269 rsp = regs->rsp - 128;
271 /* This is the X/Open sanctioned signal stack switching. */
272 /* may need to subtract redzone there too */
273 if (ka->sa.sa_flags & SA_ONSTACK) {
274 if (sas_ss_flags(rsp) == 0)
275 rsp = current->sas_ss_sp + current->sas_ss_size;
278 return (void *)round_down(rsp - size, 16);
281 static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
282 sigset_t *set, struct pt_regs * regs)
284 struct rt_sigframe *frame;
288 if (current->used_math) {
289 fp = get_stack(ka, regs, sizeof(struct _fpstate));
290 frame = (void *)round_down((unsigned long)fp - sizeof(struct rt_sigframe), 16) - 8;
292 if (!access_ok(VERIFY_WRITE, fp, sizeof(struct _fpstate))) {
295 if (save_i387(fp) < 0)
298 frame = get_stack(ka, regs, sizeof(struct rt_sigframe)) - 8;
302 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) {
307 if (ka->sa.sa_flags & SA_SIGINFO) {
308 err |= copy_siginfo_to_user(&frame->info, info);
313 /* Create the ucontext. */
314 err |= __put_user(0, &frame->uc.uc_flags);
315 err |= __put_user(0, &frame->uc.uc_link);
316 err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
317 err |= __put_user(sas_ss_flags(regs->rsp),
318 &frame->uc.uc_stack.ss_flags);
319 err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
320 err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0]);
321 err |= __put_user(fp, &frame->uc.uc_mcontext.fpstate);
322 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
324 /* Set up to return from userspace. If provided, use a stub
325 already in userspace. */
326 /* x86-64 should always use SA_RESTORER. */
327 if (ka->sa.sa_flags & SA_RESTORER) {
328 err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
330 printk("%s forgot to set SA_RESTORER for signal %d.\n", current->comm, sig);
338 printk("%d old rip %lx old rsp %lx old rax %lx\n", current->pid,regs->rip,regs->rsp,regs->rax);
341 /* Set up registers for signal handler */
343 struct exec_domain *ed = current->exec_domain;
344 if (unlikely(ed && ed->signal_invmap && sig < 32))
345 sig = ed->signal_invmap[sig];
349 /* could reload DS/ES to __USER_DS here, but assume for now
350 that 64bit does not care */
352 /* In case the signal handler was declared without prototypes */
355 /* This also works for non SA_SIGINFO handlers because they expect the
356 next argument after the signal number on the stack. */
357 regs->rsi = (unsigned long)&frame->info;
358 regs->rdx = (unsigned long)&frame->uc;
359 regs->rsp = (unsigned long) frame;
360 regs->rip = (unsigned long) ka->sa.sa_handler;
361 if (regs->rip >= TASK_SIZE) {
363 ka->sa.sa_handler = SIG_DFL;
366 regs->cs = __USER_CS;
367 regs->ss = __USER_DS;
370 regs->eflags &= ~TF_MASK;
373 printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
374 current->comm, current->pid, frame, regs->rip, frame->pretcode);
381 ka->sa.sa_handler = SIG_DFL;
382 signal_fault(regs, frame, "signal deliver");
386 * OK, we're invoking a handler
390 handle_signal(unsigned long sig, struct k_sigaction *ka,
391 siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
394 printk("handle_signal pid:%d sig:%lu rip:%lx rsp:%lx regs=%p\n", current->pid, sig,
395 regs->rip, regs->rsp, regs);
398 /* Are we from a system call? */
399 if ((long)regs->orig_rax >= 0) {
400 /* If so, check system call restarting.. */
402 case -ERESTARTNOHAND:
407 if (!(ka->sa.sa_flags & SA_RESTART)) {
412 case -ERESTARTNOINTR:
413 regs->rax = regs->orig_rax;
419 #ifdef CONFIG_IA32_EMULATION
420 if (current->thread.flags & THREAD_IA32) {
421 if (ka->sa.sa_flags & SA_SIGINFO)
422 ia32_setup_rt_frame(sig, ka, info, oldset, regs);
424 ia32_setup_frame(sig, ka, oldset, regs);
427 setup_rt_frame(sig, ka, info, oldset, regs);
429 if (ka->sa.sa_flags & SA_ONESHOT)
430 ka->sa.sa_handler = SIG_DFL;
432 if (!(ka->sa.sa_flags & SA_NODEFER)) {
433 spin_lock_irq(¤t->sigmask_lock);
434 sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
435 sigaddset(¤t->blocked,sig);
436 recalc_sigpending(current);
437 spin_unlock_irq(¤t->sigmask_lock);
442 * Note that 'init' is a special process: it doesn't get signals it doesn't
443 * want to handle. Thus you cannot kill init even with a SIGKILL even by
446 int do_signal(struct pt_regs *regs, sigset_t *oldset)
449 struct k_sigaction *ka;
452 * We want the common case to go fast, which
453 * is why we may in certain cases get here from
454 * kernel mode. Just return without doing anything
457 if ((regs->cs & 3) != 3) {
462 oldset = ¤t->blocked;
467 spin_lock_irq(¤t->sigmask_lock);
468 signr = dequeue_signal(¤t->blocked, &info);
469 spin_unlock_irq(¤t->sigmask_lock);
475 if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
476 /* Let the debugger run. */
477 current->exit_code = signr;
478 current->state = TASK_STOPPED;
479 notify_parent(current, SIGCHLD);
482 /* We're back. Did the debugger cancel the sig? */
483 if (!(signr = current->exit_code))
485 current->exit_code = 0;
487 /* The debugger continued. Ignore SIGSTOP. */
488 if (signr == SIGSTOP)
491 /* Update the siginfo structure. Is this good? */
492 if (signr != info.si_signo) {
493 info.si_signo = signr;
495 info.si_code = SI_USER;
496 info.si_pid = current->p_pptr->pid;
497 info.si_uid = current->p_pptr->uid;
500 /* If the (new) signal is now blocked, requeue it. */
501 if (sigismember(¤t->blocked, signr)) {
502 send_sig_info(signr, &info, current);
507 ka = ¤t->sig->action[signr-1];
508 if (ka->sa.sa_handler == SIG_IGN) {
509 if (signr != SIGCHLD)
511 /* Check for SIGCHLD: it's special. */
512 while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0)
517 if (ka->sa.sa_handler == SIG_DFL) {
518 int exit_code = signr;
520 /* Init gets no signals it doesn't want. */
521 if (current->pid == 1)
525 case SIGCONT: case SIGCHLD: case SIGWINCH: case SIGURG:
528 case SIGTSTP: case SIGTTIN: case SIGTTOU:
529 if (is_orphaned_pgrp(current->pgrp))
534 struct signal_struct *sig;
535 current->state = TASK_STOPPED;
536 current->exit_code = signr;
537 sig = current->p_pptr->sig;
538 if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
539 notify_parent(current, SIGCHLD);
544 case SIGQUIT: case SIGILL: case SIGTRAP:
545 case SIGABRT: case SIGFPE: case SIGSEGV:
546 case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
547 if (do_coredump(signr, regs))
552 sig_exit(signr, exit_code, &info);
557 /* Reenable any watchpoints before delivering the
558 * signal to user space. The processor register will
559 * have been cleared if the watchpoint triggered
562 if (current->thread.debugreg[7])
563 asm volatile("movq %0,%%db7" :: "r" (current->thread.debugreg[7]));
564 /* Whee! Actually deliver the signal. */
565 handle_signal(signr, ka, &info, oldset, regs);
569 /* Did we come from a system call? */
570 if ((long)regs->orig_rax >= 0) {
571 /* Restart the system call - no handlers present */
572 if (regs->rax == -ERESTARTNOHAND ||
573 regs->rax == -ERESTARTSYS ||
574 regs->rax == -ERESTARTNOINTR) {
575 regs->rax = regs->orig_rax;
583 void signal_fault(struct pt_regs *regs, void *frame, char *where)
585 struct task_struct *me = current;
587 printk("%s[%d] bad frame in %s frame:%p rip:%lx rsp:%lx orax:%lx\n",
588 me->comm,me->pid,where,frame,regs->rip,regs->rsp,regs->orig_rax);
590 force_sig(SIGSEGV, me);