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 /* rsp check is not strictly needed I think -AK */
147 if (regs->rip >= TASK_SIZE || regs->rsp >= TASK_SIZE) {
161 /* do not copy CS/SS because 64bit should not need it.
162 also need IRET exception handling anyways. */
165 unsigned int tmpflags;
166 err |= __get_user(tmpflags, &sc->eflags);
167 regs->eflags = (regs->eflags & ~0x40DD5) | (tmpflags & 0x40DD5);
168 regs->orig_rax = -1; /* disable syscall checks */
172 struct _fpstate * buf;
173 err |= __get_user(buf, &sc->fpstate);
175 if (unlikely(verify_area(VERIFY_READ, buf, sizeof(*buf))))
177 err |= restore_i387(buf);
181 err |= __get_user(*prax, &sc->rax);
186 asmlinkage long sys_rt_sigreturn(struct pt_regs regs)
188 struct rt_sigframe *frame = (struct rt_sigframe *)(regs.rsp - 8);
193 if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
195 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
198 sigdelsetmask(&set, ~_BLOCKABLE);
199 spin_lock_irq(¤t->sigmask_lock);
200 current->blocked = set;
201 recalc_sigpending(current);
202 spin_unlock_irq(¤t->sigmask_lock);
204 if (restore_sigcontext(®s, &frame->uc.uc_mcontext, &eax))
208 printk("%d sigreturn rip:%lx rsp:%lx frame:%p rax:%lx\n",current->pid,regs.rip,regs.rsp,frame,eax);
211 if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st)))
213 /* It is more difficult to avoid calling this function than to
214 call it and ignore errors. */
215 do_sigaltstack(&st, NULL, regs.rsp);
220 signal_fault(®s, frame, "rt_sigreturn");
225 * Set up a signal frame.
229 setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs, unsigned long mask)
232 struct task_struct *me = current;
235 err |= __put_user(0, &sc->gs);
236 err |= __put_user(0, &sc->fs);
238 err |= __put_user(regs->rdi, &sc->rdi);
239 err |= __put_user(regs->rsi, &sc->rsi);
240 err |= __put_user(regs->rbp, &sc->rbp);
241 err |= __put_user(regs->rsp, &sc->rsp);
242 err |= __put_user(regs->rbx, &sc->rbx);
243 err |= __put_user(regs->rdx, &sc->rdx);
244 err |= __put_user(regs->rcx, &sc->rcx);
245 err |= __put_user(regs->rax, &sc->rax);
246 err |= __put_user(regs->r8, &sc->r8);
247 err |= __put_user(regs->r9, &sc->r9);
248 err |= __put_user(regs->r10, &sc->r10);
249 err |= __put_user(regs->r11, &sc->r11);
250 err |= __put_user(regs->r12, &sc->r12);
251 err |= __put_user(regs->r13, &sc->r13);
252 err |= __put_user(regs->r14, &sc->r14);
253 err |= __put_user(regs->r15, &sc->r15);
254 err |= __put_user(me->thread.trap_no, &sc->trapno);
255 err |= __put_user(me->thread.error_code, &sc->err);
256 err |= __put_user(regs->rip, &sc->rip);
257 err |= __put_user(regs->cs, &sc->cs);
258 err |= __put_user(regs->eflags, &sc->eflags);
259 err |= __put_user(mask, &sc->oldmask);
260 err |= __put_user(me->thread.cr2, &sc->cr2);
266 get_stack(struct k_sigaction *ka, struct pt_regs *regs, unsigned long size)
270 /* Default to using normal stack - redzone*/
271 rsp = regs->rsp - 128;
273 /* This is the X/Open sanctioned signal stack switching. */
274 /* may need to subtract redzone there too */
275 if (ka->sa.sa_flags & SA_ONSTACK) {
276 if (sas_ss_flags(rsp) == 0)
277 rsp = current->sas_ss_sp + current->sas_ss_size;
280 return (void *)round_down(rsp - size, 16);
283 static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
284 sigset_t *set, struct pt_regs * regs)
286 struct rt_sigframe *frame;
290 if (current->used_math) {
291 fp = get_stack(ka, regs, sizeof(struct _fpstate));
292 frame = (void *)round_down((unsigned long)fp - sizeof(struct rt_sigframe), 16) - 8;
294 if (!access_ok(VERIFY_WRITE, fp, sizeof(struct _fpstate))) {
297 if (save_i387(fp) < 0)
300 frame = get_stack(ka, regs, sizeof(struct rt_sigframe)) - 8;
304 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) {
309 if (ka->sa.sa_flags & SA_SIGINFO) {
310 err |= copy_siginfo_to_user(&frame->info, info);
315 /* Create the ucontext. */
316 err |= __put_user(0, &frame->uc.uc_flags);
317 err |= __put_user(0, &frame->uc.uc_link);
318 err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
319 err |= __put_user(sas_ss_flags(regs->rsp),
320 &frame->uc.uc_stack.ss_flags);
321 err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
322 err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0]);
323 err |= __put_user(fp, &frame->uc.uc_mcontext.fpstate);
324 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
326 /* Set up to return from userspace. If provided, use a stub
327 already in userspace. */
328 /* x86-64 should always use SA_RESTORER. */
329 if (ka->sa.sa_flags & SA_RESTORER) {
330 err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
332 printk("%s forgot to set SA_RESTORER for signal %d.\n", current->comm, sig);
340 printk("%d old rip %lx old rsp %lx old rax %lx\n", current->pid,regs->rip,regs->rsp,regs->rax);
343 /* Set up registers for signal handler */
345 struct exec_domain *ed = current->exec_domain;
346 if (unlikely(ed && ed->signal_invmap && sig < 32))
347 sig = ed->signal_invmap[sig];
351 /* could reload DS/ES to __USER_DS here, but assume for now
352 that 64bit does not care */
354 /* In case the signal handler was declared without prototypes */
357 /* This also works for non SA_SIGINFO handlers because they expect the
358 next argument after the signal number on the stack. */
359 regs->rsi = (unsigned long)&frame->info;
360 regs->rdx = (unsigned long)&frame->uc;
361 regs->rsp = (unsigned long) frame;
362 regs->rip = (unsigned long) ka->sa.sa_handler;
363 if (regs->rip >= TASK_SIZE) {
367 regs->cs = __USER_CS;
368 regs->ss = __USER_DS;
371 regs->eflags &= ~TF_MASK;
374 printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
375 current->comm, current->pid, frame, regs->rip, frame->pretcode);
382 ka->sa.sa_handler = SIG_DFL;
383 signal_fault(regs, frame, "signal deliver");
387 * OK, we're invoking a handler
391 handle_signal(unsigned long sig, struct k_sigaction *ka,
392 siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
395 printk("handle_signal pid:%d sig:%lu rip:%lx rsp:%lx regs=%p\n", current->pid, sig,
396 regs->rip, regs->rsp, regs);
399 /* Are we from a system call? */
400 if ((long)regs->orig_rax >= 0) {
401 /* If so, check system call restarting.. */
403 case -ERESTARTNOHAND:
408 if (!(ka->sa.sa_flags & SA_RESTART)) {
413 case -ERESTARTNOINTR:
414 regs->rax = regs->orig_rax;
420 #ifdef CONFIG_IA32_EMULATION
421 if (current->thread.flags & THREAD_IA32) {
422 if (ka->sa.sa_flags & SA_SIGINFO)
423 ia32_setup_rt_frame(sig, ka, info, oldset, regs);
425 ia32_setup_frame(sig, ka, oldset, regs);
428 setup_rt_frame(sig, ka, info, oldset, regs);
430 if (ka->sa.sa_flags & SA_ONESHOT)
431 ka->sa.sa_handler = SIG_DFL;
433 if (!(ka->sa.sa_flags & SA_NODEFER)) {
434 spin_lock_irq(¤t->sigmask_lock);
435 sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
436 sigaddset(¤t->blocked,sig);
437 recalc_sigpending(current);
438 spin_unlock_irq(¤t->sigmask_lock);
443 * Note that 'init' is a special process: it doesn't get signals it doesn't
444 * want to handle. Thus you cannot kill init even with a SIGKILL even by
447 int do_signal(struct pt_regs *regs, sigset_t *oldset)
450 struct k_sigaction *ka;
453 * We want the common case to go fast, which
454 * is why we may in certain cases get here from
455 * kernel mode. Just return without doing anything
458 if ((regs->cs & 3) != 3) {
463 oldset = ¤t->blocked;
468 spin_lock_irq(¤t->sigmask_lock);
469 signr = dequeue_signal(¤t->blocked, &info);
470 spin_unlock_irq(¤t->sigmask_lock);
476 if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
477 /* Let the debugger run. */
478 current->exit_code = signr;
479 current->state = TASK_STOPPED;
480 notify_parent(current, SIGCHLD);
483 /* We're back. Did the debugger cancel the sig? */
484 if (!(signr = current->exit_code))
486 current->exit_code = 0;
488 /* The debugger continued. Ignore SIGSTOP. */
489 if (signr == SIGSTOP)
492 /* Update the siginfo structure. Is this good? */
493 if (signr != info.si_signo) {
494 info.si_signo = signr;
496 info.si_code = SI_USER;
497 info.si_pid = current->p_pptr->pid;
498 info.si_uid = current->p_pptr->uid;
501 /* If the (new) signal is now blocked, requeue it. */
502 if (sigismember(¤t->blocked, signr)) {
503 send_sig_info(signr, &info, current);
508 ka = ¤t->sig->action[signr-1];
509 if (ka->sa.sa_handler == SIG_IGN) {
510 if (signr != SIGCHLD)
512 /* Check for SIGCHLD: it's special. */
513 while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0)
518 if (ka->sa.sa_handler == SIG_DFL) {
519 int exit_code = signr;
521 /* Init gets no signals it doesn't want. */
522 if (current->pid == 1)
526 case SIGCONT: case SIGCHLD: case SIGWINCH: case SIGURG:
529 case SIGTSTP: case SIGTTIN: case SIGTTOU:
530 if (is_orphaned_pgrp(current->pgrp))
535 struct signal_struct *sig;
536 current->state = TASK_STOPPED;
537 current->exit_code = signr;
538 sig = current->p_pptr->sig;
539 if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
540 notify_parent(current, SIGCHLD);
545 case SIGQUIT: case SIGILL: case SIGTRAP:
546 case SIGABRT: case SIGFPE: case SIGSEGV:
547 case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
548 if (do_coredump(signr, regs))
553 sig_exit(signr, exit_code, &info);
558 /* Reenable any watchpoints before delivering the
559 * signal to user space. The processor register will
560 * have been cleared if the watchpoint triggered
563 if (current->thread.debugreg[7])
564 asm volatile("movq %0,%%db7" :: "r" (current->thread.debugreg[7]));
565 /* Whee! Actually deliver the signal. */
566 handle_signal(signr, ka, &info, oldset, regs);
570 /* Did we come from a system call? */
571 if ((long)regs->orig_rax >= 0) {
572 /* Restart the system call - no handlers present */
573 if (regs->rax == -ERESTARTNOHAND ||
574 regs->rax == -ERESTARTSYS ||
575 regs->rax == -ERESTARTNOINTR) {
576 regs->rax = regs->orig_rax;
584 void signal_fault(struct pt_regs *regs, void *frame, char *where)
586 struct task_struct *me = current;
588 printk("%s[%d] bad frame in %s frame:%p rip:%lx rsp:%lx orax:%lx\n",
589 me->comm,me->pid,where,frame,regs->rip,regs->rsp,regs->orig_rax);
591 force_sig(SIGSEGV, me);