linux/arch/ia64/kernel/signal.c
<<
>>
Prefs
   1/*
   2 * Architecture-specific signal handling support.
   3 *
   4 * Copyright (C) 1999-2004 Hewlett-Packard Co
   5 *      David Mosberger-Tang <davidm@hpl.hp.com>
   6 *
   7 * Derived from i386 and Alpha versions.
   8 */
   9
  10#include <linux/errno.h>
  11#include <linux/kernel.h>
  12#include <linux/mm.h>
  13#include <linux/ptrace.h>
  14#include <linux/tracehook.h>
  15#include <linux/sched.h>
  16#include <linux/signal.h>
  17#include <linux/smp.h>
  18#include <linux/stddef.h>
  19#include <linux/tty.h>
  20#include <linux/binfmts.h>
  21#include <linux/unistd.h>
  22#include <linux/wait.h>
  23
  24#include <asm/intrinsics.h>
  25#include <asm/uaccess.h>
  26#include <asm/rse.h>
  27#include <asm/sigcontext.h>
  28
  29#include "sigframe.h"
  30
  31#define DEBUG_SIG       0
  32#define STACK_ALIGN     16              /* minimal alignment for stack pointer */
  33
  34#if _NSIG_WORDS > 1
  35# define PUT_SIGSET(k,u)        __copy_to_user((u)->sig, (k)->sig, sizeof(sigset_t))
  36# define GET_SIGSET(k,u)        __copy_from_user((k)->sig, (u)->sig, sizeof(sigset_t))
  37#else
  38# define PUT_SIGSET(k,u)        __put_user((k)->sig[0], &(u)->sig[0])
  39# define GET_SIGSET(k,u)        __get_user((k)->sig[0], &(u)->sig[0])
  40#endif
  41
  42static long
  43restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
  44{
  45        unsigned long ip, flags, nat, um, cfm, rsc;
  46        long err;
  47
  48        /* Always make any pending restarted system calls return -EINTR */
  49        current->restart_block.fn = do_no_restart_syscall;
  50
  51        /* restore scratch that always needs gets updated during signal delivery: */
  52        err  = __get_user(flags, &sc->sc_flags);
  53        err |= __get_user(nat, &sc->sc_nat);
  54        err |= __get_user(ip, &sc->sc_ip);                      /* instruction pointer */
  55        err |= __get_user(cfm, &sc->sc_cfm);
  56        err |= __get_user(um, &sc->sc_um);                      /* user mask */
  57        err |= __get_user(rsc, &sc->sc_ar_rsc);
  58        err |= __get_user(scr->pt.ar_unat, &sc->sc_ar_unat);
  59        err |= __get_user(scr->pt.ar_fpsr, &sc->sc_ar_fpsr);
  60        err |= __get_user(scr->pt.ar_pfs, &sc->sc_ar_pfs);
  61        err |= __get_user(scr->pt.pr, &sc->sc_pr);              /* predicates */
  62        err |= __get_user(scr->pt.b0, &sc->sc_br[0]);           /* b0 (rp) */
  63        err |= __get_user(scr->pt.b6, &sc->sc_br[6]);           /* b6 */
  64        err |= __copy_from_user(&scr->pt.r1, &sc->sc_gr[1], 8); /* r1 */
  65        err |= __copy_from_user(&scr->pt.r8, &sc->sc_gr[8], 4*8);       /* r8-r11 */
  66        err |= __copy_from_user(&scr->pt.r12, &sc->sc_gr[12], 2*8);     /* r12-r13 */
  67        err |= __copy_from_user(&scr->pt.r15, &sc->sc_gr[15], 8);       /* r15 */
  68
  69        scr->pt.cr_ifs = cfm | (1UL << 63);
  70        scr->pt.ar_rsc = rsc | (3 << 2); /* force PL3 */
  71
  72        /* establish new instruction pointer: */
  73        scr->pt.cr_iip = ip & ~0x3UL;
  74        ia64_psr(&scr->pt)->ri = ip & 0x3;
  75        scr->pt.cr_ipsr = (scr->pt.cr_ipsr & ~IA64_PSR_UM) | (um & IA64_PSR_UM);
  76
  77        scr->scratch_unat = ia64_put_scratch_nat_bits(&scr->pt, nat);
  78
  79        if (!(flags & IA64_SC_FLAG_IN_SYSCALL)) {
  80                /* Restore most scratch-state only when not in syscall. */
  81                err |= __get_user(scr->pt.ar_ccv, &sc->sc_ar_ccv);              /* ar.ccv */
  82                err |= __get_user(scr->pt.b7, &sc->sc_br[7]);                   /* b7 */
  83                err |= __get_user(scr->pt.r14, &sc->sc_gr[14]);                 /* r14 */
  84                err |= __copy_from_user(&scr->pt.ar_csd, &sc->sc_ar25, 2*8); /* ar.csd & ar.ssd */
  85                err |= __copy_from_user(&scr->pt.r2, &sc->sc_gr[2], 2*8);       /* r2-r3 */
  86                err |= __copy_from_user(&scr->pt.r16, &sc->sc_gr[16], 16*8);    /* r16-r31 */
  87        }
  88
  89        if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) {
  90                struct ia64_psr *psr = ia64_psr(&scr->pt);
  91
  92                err |= __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16);
  93                psr->mfh = 0;   /* drop signal handler's fph contents... */
  94                preempt_disable();
  95                if (psr->dfh)
  96                        ia64_drop_fpu(current);
  97                else {
  98                        /* We already own the local fph, otherwise psr->dfh wouldn't be 0.  */
  99                        __ia64_load_fpu(current->thread.fph);
 100                        ia64_set_local_fpu_owner(current);
 101                }
 102                preempt_enable();
 103        }
 104        return err;
 105}
 106
 107int
 108copy_siginfo_to_user (siginfo_t __user *to, const siginfo_t *from)
 109{
 110        if (!access_ok(VERIFY_WRITE, to, sizeof(siginfo_t)))
 111                return -EFAULT;
 112        if (from->si_code < 0) {
 113                if (__copy_to_user(to, from, sizeof(siginfo_t)))
 114                        return -EFAULT;
 115                return 0;
 116        } else {
 117                int err;
 118
 119                /*
 120                 * If you change siginfo_t structure, please be sure this code is fixed
 121                 * accordingly.  It should never copy any pad contained in the structure
 122                 * to avoid security leaks, but must copy the generic 3 ints plus the
 123                 * relevant union member.
 124                 */
 125                err = __put_user(from->si_signo, &to->si_signo);
 126                err |= __put_user(from->si_errno, &to->si_errno);
 127                err |= __put_user((short)from->si_code, &to->si_code);
 128                switch (from->si_code >> 16) {
 129                      case __SI_FAULT >> 16:
 130                        err |= __put_user(from->si_flags, &to->si_flags);
 131                        err |= __put_user(from->si_isr, &to->si_isr);
 132                      case __SI_POLL >> 16:
 133                        err |= __put_user(from->si_addr, &to->si_addr);
 134                        err |= __put_user(from->si_imm, &to->si_imm);
 135                        break;
 136                      case __SI_TIMER >> 16:
 137                        err |= __put_user(from->si_tid, &to->si_tid);
 138                        err |= __put_user(from->si_overrun, &to->si_overrun);
 139                        err |= __put_user(from->si_ptr, &to->si_ptr);
 140                        break;
 141                      case __SI_RT >> 16:       /* Not generated by the kernel as of now.  */
 142                      case __SI_MESGQ >> 16:
 143                        err |= __put_user(from->si_uid, &to->si_uid);
 144                        err |= __put_user(from->si_pid, &to->si_pid);
 145                        err |= __put_user(from->si_ptr, &to->si_ptr);
 146                        break;
 147                      case __SI_CHLD >> 16:
 148                        err |= __put_user(from->si_utime, &to->si_utime);
 149                        err |= __put_user(from->si_stime, &to->si_stime);
 150                        err |= __put_user(from->si_status, &to->si_status);
 151                      default:
 152                        err |= __put_user(from->si_uid, &to->si_uid);
 153                        err |= __put_user(from->si_pid, &to->si_pid);
 154                        break;
 155                }
 156                return err;
 157        }
 158}
 159
 160long
 161ia64_rt_sigreturn (struct sigscratch *scr)
 162{
 163        extern char ia64_strace_leave_kernel, ia64_leave_kernel;
 164        struct sigcontext __user *sc;
 165        struct siginfo si;
 166        sigset_t set;
 167        long retval;
 168
 169        sc = &((struct sigframe __user *) (scr->pt.r12 + 16))->sc;
 170
 171        /*
 172         * When we return to the previously executing context, r8 and r10 have already
 173         * been setup the way we want them.  Indeed, if the signal wasn't delivered while
 174         * in a system call, we must not touch r8 or r10 as otherwise user-level state
 175         * could be corrupted.
 176         */
 177        retval = (long) &ia64_leave_kernel;
 178        if (test_thread_flag(TIF_SYSCALL_TRACE)
 179            || test_thread_flag(TIF_SYSCALL_AUDIT))
 180                /*
 181                 * strace expects to be notified after sigreturn returns even though the
 182                 * context to which we return may not be in the middle of a syscall.
 183                 * Thus, the return-value that strace displays for sigreturn is
 184                 * meaningless.
 185                 */
 186                retval = (long) &ia64_strace_leave_kernel;
 187
 188        if (!access_ok(VERIFY_READ, sc, sizeof(*sc)))
 189                goto give_sigsegv;
 190
 191        if (GET_SIGSET(&set, &sc->sc_mask))
 192                goto give_sigsegv;
 193
 194        set_current_blocked(&set);
 195
 196        if (restore_sigcontext(sc, scr))
 197                goto give_sigsegv;
 198
 199#if DEBUG_SIG
 200        printk("SIG return (%s:%d): sp=%lx ip=%lx\n",
 201               current->comm, current->pid, scr->pt.r12, scr->pt.cr_iip);
 202#endif
 203        if (restore_altstack(&sc->sc_stack))
 204                goto give_sigsegv;
 205        return retval;
 206
 207  give_sigsegv:
 208        si.si_signo = SIGSEGV;
 209        si.si_errno = 0;
 210        si.si_code = SI_KERNEL;
 211        si.si_pid = task_pid_vnr(current);
 212        si.si_uid = from_kuid_munged(current_user_ns(), current_uid());
 213        si.si_addr = sc;
 214        force_sig_info(SIGSEGV, &si, current);
 215        return retval;
 216}
 217
 218/*
 219 * This does just the minimum required setup of sigcontext.
 220 * Specifically, it only installs data that is either not knowable at
 221 * the user-level or that gets modified before execution in the
 222 * trampoline starts.  Everything else is done at the user-level.
 223 */
 224static long
 225setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratch *scr)
 226{
 227        unsigned long flags = 0, ifs, cfm, nat;
 228        long err = 0;
 229
 230        ifs = scr->pt.cr_ifs;
 231
 232        if (on_sig_stack((unsigned long) sc))
 233                flags |= IA64_SC_FLAG_ONSTACK;
 234        if ((ifs & (1UL << 63)) == 0)
 235                /* if cr_ifs doesn't have the valid bit set, we got here through a syscall */
 236                flags |= IA64_SC_FLAG_IN_SYSCALL;
 237        cfm = ifs & ((1UL << 38) - 1);
 238        ia64_flush_fph(current);
 239        if ((current->thread.flags & IA64_THREAD_FPH_VALID)) {
 240                flags |= IA64_SC_FLAG_FPH_VALID;
 241                err = __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16);
 242        }
 243
 244        nat = ia64_get_scratch_nat_bits(&scr->pt, scr->scratch_unat);
 245
 246        err |= __put_user(flags, &sc->sc_flags);
 247        err |= __put_user(nat, &sc->sc_nat);
 248        err |= PUT_SIGSET(mask, &sc->sc_mask);
 249        err |= __put_user(cfm, &sc->sc_cfm);
 250        err |= __put_user(scr->pt.cr_ipsr & IA64_PSR_UM, &sc->sc_um);
 251        err |= __put_user(scr->pt.ar_rsc, &sc->sc_ar_rsc);
 252        err |= __put_user(scr->pt.ar_unat, &sc->sc_ar_unat);            /* ar.unat */
 253        err |= __put_user(scr->pt.ar_fpsr, &sc->sc_ar_fpsr);            /* ar.fpsr */
 254        err |= __put_user(scr->pt.ar_pfs, &sc->sc_ar_pfs);
 255        err |= __put_user(scr->pt.pr, &sc->sc_pr);                      /* predicates */
 256        err |= __put_user(scr->pt.b0, &sc->sc_br[0]);                   /* b0 (rp) */
 257        err |= __put_user(scr->pt.b6, &sc->sc_br[6]);                   /* b6 */
 258        err |= __copy_to_user(&sc->sc_gr[1], &scr->pt.r1, 8);           /* r1 */
 259        err |= __copy_to_user(&sc->sc_gr[8], &scr->pt.r8, 4*8);         /* r8-r11 */
 260        err |= __copy_to_user(&sc->sc_gr[12], &scr->pt.r12, 2*8);       /* r12-r13 */
 261        err |= __copy_to_user(&sc->sc_gr[15], &scr->pt.r15, 8);         /* r15 */
 262        err |= __put_user(scr->pt.cr_iip + ia64_psr(&scr->pt)->ri, &sc->sc_ip);
 263
 264        if (!(flags & IA64_SC_FLAG_IN_SYSCALL)) {
 265                /* Copy scratch regs to sigcontext if the signal didn't interrupt a syscall. */
 266                err |= __put_user(scr->pt.ar_ccv, &sc->sc_ar_ccv);              /* ar.ccv */
 267                err |= __put_user(scr->pt.b7, &sc->sc_br[7]);                   /* b7 */
 268                err |= __put_user(scr->pt.r14, &sc->sc_gr[14]);                 /* r14 */
 269                err |= __copy_to_user(&sc->sc_ar25, &scr->pt.ar_csd, 2*8); /* ar.csd & ar.ssd */
 270                err |= __copy_to_user(&sc->sc_gr[2], &scr->pt.r2, 2*8);         /* r2-r3 */
 271                err |= __copy_to_user(&sc->sc_gr[16], &scr->pt.r16, 16*8);      /* r16-r31 */
 272        }
 273        return err;
 274}
 275
 276/*
 277 * Check whether the register-backing store is already on the signal stack.
 278 */
 279static inline int
 280rbs_on_sig_stack (unsigned long bsp)
 281{
 282        return (bsp - current->sas_ss_sp < current->sas_ss_size);
 283}
 284
 285static long
 286force_sigsegv_info (int sig, void __user *addr)
 287{
 288        unsigned long flags;
 289        struct siginfo si;
 290
 291        if (sig == SIGSEGV) {
 292                /*
 293                 * Acquiring siglock around the sa_handler-update is almost
 294                 * certainly overkill, but this isn't a
 295                 * performance-critical path and I'd rather play it safe
 296                 * here than having to debug a nasty race if and when
 297                 * something changes in kernel/signal.c that would make it
 298                 * no longer safe to modify sa_handler without holding the
 299                 * lock.
 300                 */
 301                spin_lock_irqsave(&current->sighand->siglock, flags);
 302                current->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
 303                spin_unlock_irqrestore(&current->sighand->siglock, flags);
 304        }
 305        si.si_signo = SIGSEGV;
 306        si.si_errno = 0;
 307        si.si_code = SI_KERNEL;
 308        si.si_pid = task_pid_vnr(current);
 309        si.si_uid = from_kuid_munged(current_user_ns(), current_uid());
 310        si.si_addr = addr;
 311        force_sig_info(SIGSEGV, &si, current);
 312        return 1;
 313}
 314
 315static long
 316setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
 317{
 318        extern char __kernel_sigtramp[];
 319        unsigned long tramp_addr, new_rbs = 0, new_sp;
 320        struct sigframe __user *frame;
 321        long err;
 322
 323        new_sp = scr->pt.r12;
 324        tramp_addr = (unsigned long) __kernel_sigtramp;
 325        if (ksig->ka.sa.sa_flags & SA_ONSTACK) {
 326                int onstack = sas_ss_flags(new_sp);
 327
 328                if (onstack == 0) {
 329                        new_sp = current->sas_ss_sp + current->sas_ss_size;
 330                        /*
 331                         * We need to check for the register stack being on the
 332                         * signal stack separately, because it's switched
 333                         * separately (memory stack is switched in the kernel,
 334                         * register stack is switched in the signal trampoline).
 335                         */
 336                        if (!rbs_on_sig_stack(scr->pt.ar_bspstore))
 337                                new_rbs = ALIGN(current->sas_ss_sp,
 338                                                sizeof(long));
 339                } else if (onstack == SS_ONSTACK) {
 340                        unsigned long check_sp;
 341
 342                        /*
 343                         * If we are on the alternate signal stack and would
 344                         * overflow it, don't. Return an always-bogus address
 345                         * instead so we will die with SIGSEGV.
 346                         */
 347                        check_sp = (new_sp - sizeof(*frame)) & -STACK_ALIGN;
 348                        if (!likely(on_sig_stack(check_sp)))
 349                                return force_sigsegv_info(ksig->sig, (void __user *)
 350                                                          check_sp);
 351                }
 352        }
 353        frame = (void __user *) ((new_sp - sizeof(*frame)) & -STACK_ALIGN);
 354
 355        if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
 356                return force_sigsegv_info(ksig->sig, frame);
 357
 358        err  = __put_user(ksig->sig, &frame->arg0);
 359        err |= __put_user(&frame->info, &frame->arg1);
 360        err |= __put_user(&frame->sc, &frame->arg2);
 361        err |= __put_user(new_rbs, &frame->sc.sc_rbs_base);
 362        err |= __put_user(0, &frame->sc.sc_loadrs);     /* initialize to zero */
 363        err |= __put_user(ksig->ka.sa.sa_handler, &frame->handler);
 364
 365        err |= copy_siginfo_to_user(&frame->info, &ksig->info);
 366
 367        err |= __save_altstack(&frame->sc.sc_stack, scr->pt.r12);
 368        err |= setup_sigcontext(&frame->sc, set, scr);
 369
 370        if (unlikely(err))
 371                return force_sigsegv_info(ksig->sig, frame);
 372
 373        scr->pt.r12 = (unsigned long) frame - 16;       /* new stack pointer */
 374        scr->pt.ar_fpsr = FPSR_DEFAULT;                 /* reset fpsr for signal handler */
 375        scr->pt.cr_iip = tramp_addr;
 376        ia64_psr(&scr->pt)->ri = 0;                     /* start executing in first slot */
 377        ia64_psr(&scr->pt)->be = 0;                     /* force little-endian byte-order */
 378        /*
 379         * Force the interruption function mask to zero.  This has no effect when a
 380         * system-call got interrupted by a signal (since, in that case, scr->pt_cr_ifs is
 381         * ignored), but it has the desirable effect of making it possible to deliver a
 382         * signal with an incomplete register frame (which happens when a mandatory RSE
 383         * load faults).  Furthermore, it has no negative effect on the getting the user's
 384         * dirty partition preserved, because that's governed by scr->pt.loadrs.
 385         */
 386        scr->pt.cr_ifs = (1UL << 63);
 387
 388        /*
 389         * Note: this affects only the NaT bits of the scratch regs (the ones saved in
 390         * pt_regs), which is exactly what we want.
 391         */
 392        scr->scratch_unat = 0; /* ensure NaT bits of r12 is clear */
 393
 394#if DEBUG_SIG
 395        printk("SIG deliver (%s:%d): sig=%d sp=%lx ip=%lx handler=%p\n",
 396               current->comm, current->pid, ksig->sig, scr->pt.r12, frame->sc.sc_ip, frame->handler);
 397#endif
 398        return 0;
 399}
 400
 401static long
 402handle_signal (struct ksignal *ksig, struct sigscratch *scr)
 403{
 404        int ret = setup_frame(ksig, sigmask_to_save(), scr);
 405
 406        if (!ret)
 407                signal_setup_done(ret, ksig, test_thread_flag(TIF_SINGLESTEP));
 408
 409        return ret;
 410}
 411
 412/*
 413 * Note that `init' is a special process: it doesn't get signals it doesn't want to
 414 * handle.  Thus you cannot kill init even with a SIGKILL even by mistake.
 415 */
 416void
 417ia64_do_signal (struct sigscratch *scr, long in_syscall)
 418{
 419        long restart = in_syscall;
 420        long errno = scr->pt.r8;
 421        struct ksignal ksig;
 422
 423        /*
 424         * This only loops in the rare cases of handle_signal() failing, in which case we
 425         * need to push through a forced SIGSEGV.
 426         */
 427        while (1) {
 428                get_signal(&ksig);
 429
 430                /*
 431                 * get_signal_to_deliver() may have run a debugger (via notify_parent())
 432                 * and the debugger may have modified the state (e.g., to arrange for an
 433                 * inferior call), thus it's important to check for restarting _after_
 434                 * get_signal_to_deliver().
 435                 */
 436                if ((long) scr->pt.r10 != -1)
 437                        /*
 438                         * A system calls has to be restarted only if one of the error codes
 439                         * ERESTARTNOHAND, ERESTARTSYS, or ERESTARTNOINTR is returned.  If r10
 440                         * isn't -1 then r8 doesn't hold an error code and we don't need to
 441                         * restart the syscall, so we can clear the "restart" flag here.
 442                         */
 443                        restart = 0;
 444
 445                if (ksig.sig <= 0)
 446                        break;
 447
 448                if (unlikely(restart)) {
 449                        switch (errno) {
 450                              case ERESTART_RESTARTBLOCK:
 451                              case ERESTARTNOHAND:
 452                                scr->pt.r8 = EINTR;
 453                                /* note: scr->pt.r10 is already -1 */
 454                                break;
 455
 456                              case ERESTARTSYS:
 457                                if ((ksig.ka.sa.sa_flags & SA_RESTART) == 0) {
 458                                        scr->pt.r8 = EINTR;
 459                                        /* note: scr->pt.r10 is already -1 */
 460                                        break;
 461                                }
 462                              case ERESTARTNOINTR:
 463                                ia64_decrement_ip(&scr->pt);
 464                                restart = 0; /* don't restart twice if handle_signal() fails... */
 465                        }
 466                }
 467
 468                /*
 469                 * Whee!  Actually deliver the signal.  If the delivery failed, we need to
 470                 * continue to iterate in this loop so we can deliver the SIGSEGV...
 471                 */
 472                if (handle_signal(&ksig, scr))
 473                        return;
 474        }
 475
 476        /* Did we come from a system call? */
 477        if (restart) {
 478                /* Restart the system call - no handlers present */
 479                if (errno == ERESTARTNOHAND || errno == ERESTARTSYS || errno == ERESTARTNOINTR
 480                    || errno == ERESTART_RESTARTBLOCK)
 481                {
 482                        /*
 483                         * Note: the syscall number is in r15 which is saved in
 484                         * pt_regs so all we need to do here is adjust ip so that
 485                         * the "break" instruction gets re-executed.
 486                         */
 487                        ia64_decrement_ip(&scr->pt);
 488                        if (errno == ERESTART_RESTARTBLOCK)
 489                                scr->pt.r15 = __NR_restart_syscall;
 490                }
 491        }
 492
 493        /* if there's no signal to deliver, we just put the saved sigmask
 494         * back */
 495        restore_saved_sigmask();
 496}
 497