linux/arch/powerpc/kernel/signal_32.c
<<
>>
Prefs
   1/*
   2 * Signal handling for 32bit PPC and 32bit tasks on 64bit PPC
   3 *
   4 *  PowerPC version
   5 *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
   6 * Copyright (C) 2001 IBM
   7 * Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
   8 * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
   9 *
  10 *  Derived from "arch/i386/kernel/signal.c"
  11 *    Copyright (C) 1991, 1992 Linus Torvalds
  12 *    1997-11-28  Modified for POSIX.1b signals by Richard Henderson
  13 *
  14 *  This program is free software; you can redistribute it and/or
  15 *  modify it under the terms of the GNU General Public License
  16 *  as published by the Free Software Foundation; either version
  17 *  2 of the License, or (at your option) any later version.
  18 */
  19
  20#include <linux/sched.h>
  21#include <linux/mm.h>
  22#include <linux/smp.h>
  23#include <linux/kernel.h>
  24#include <linux/signal.h>
  25#include <linux/errno.h>
  26#include <linux/elf.h>
  27#include <linux/ptrace.h>
  28#include <linux/pagemap.h>
  29#include <linux/ratelimit.h>
  30#include <linux/syscalls.h>
  31#ifdef CONFIG_PPC64
  32#include <linux/compat.h>
  33#else
  34#include <linux/wait.h>
  35#include <linux/unistd.h>
  36#include <linux/stddef.h>
  37#include <linux/tty.h>
  38#include <linux/binfmts.h>
  39#endif
  40
  41#include <linux/uaccess.h>
  42#include <asm/cacheflush.h>
  43#include <asm/syscalls.h>
  44#include <asm/sigcontext.h>
  45#include <asm/vdso.h>
  46#include <asm/switch_to.h>
  47#include <asm/tm.h>
  48#include <asm/asm-prototypes.h>
  49#ifdef CONFIG_PPC64
  50#include "ppc32.h"
  51#include <asm/unistd.h>
  52#else
  53#include <asm/ucontext.h>
  54#include <asm/pgtable.h>
  55#endif
  56
  57#include "signal.h"
  58
  59
  60#ifdef CONFIG_PPC64
  61#define old_sigaction   old_sigaction32
  62#define sigcontext      sigcontext32
  63#define mcontext        mcontext32
  64#define ucontext        ucontext32
  65
  66#define __save_altstack __compat_save_altstack
  67
  68/*
  69 * Userspace code may pass a ucontext which doesn't include VSX added
  70 * at the end.  We need to check for this case.
  71 */
  72#define UCONTEXTSIZEWITHOUTVSX \
  73                (sizeof(struct ucontext) - sizeof(elf_vsrreghalf_t32))
  74
  75/*
  76 * Returning 0 means we return to userspace via
  77 * ret_from_except and thus restore all user
  78 * registers from *regs.  This is what we need
  79 * to do when a signal has been delivered.
  80 */
  81
  82#define GP_REGS_SIZE    min(sizeof(elf_gregset_t32), sizeof(struct pt_regs32))
  83#undef __SIGNAL_FRAMESIZE
  84#define __SIGNAL_FRAMESIZE      __SIGNAL_FRAMESIZE32
  85#undef ELF_NVRREG
  86#define ELF_NVRREG      ELF_NVRREG32
  87
  88/*
  89 * Functions for flipping sigsets (thanks to brain dead generic
  90 * implementation that makes things simple for little endian only)
  91 */
  92static inline int put_sigset_t(compat_sigset_t __user *uset, sigset_t *set)
  93{
  94        return put_compat_sigset(uset, set, sizeof(*uset));
  95}
  96
  97static inline int get_sigset_t(sigset_t *set,
  98                               const compat_sigset_t __user *uset)
  99{
 100        return get_compat_sigset(set, uset);
 101}
 102
 103#define to_user_ptr(p)          ptr_to_compat(p)
 104#define from_user_ptr(p)        compat_ptr(p)
 105
 106static inline int save_general_regs(struct pt_regs *regs,
 107                struct mcontext __user *frame)
 108{
 109        elf_greg_t64 *gregs = (elf_greg_t64 *)regs;
 110        int i;
 111        /* Force usr to alway see softe as 1 (interrupts enabled) */
 112        elf_greg_t64 softe = 0x1;
 113
 114        WARN_ON(!FULL_REGS(regs));
 115
 116        for (i = 0; i <= PT_RESULT; i ++) {
 117                if (i == 14 && !FULL_REGS(regs))
 118                        i = 32;
 119                if ( i == PT_SOFTE) {
 120                        if(__put_user((unsigned int)softe, &frame->mc_gregs[i]))
 121                                return -EFAULT;
 122                        else
 123                                continue;
 124                }
 125                if (__put_user((unsigned int)gregs[i], &frame->mc_gregs[i]))
 126                        return -EFAULT;
 127        }
 128        return 0;
 129}
 130
 131static inline int restore_general_regs(struct pt_regs *regs,
 132                struct mcontext __user *sr)
 133{
 134        elf_greg_t64 *gregs = (elf_greg_t64 *)regs;
 135        int i;
 136
 137        for (i = 0; i <= PT_RESULT; i++) {
 138                if ((i == PT_MSR) || (i == PT_SOFTE))
 139                        continue;
 140                if (__get_user(gregs[i], &sr->mc_gregs[i]))
 141                        return -EFAULT;
 142        }
 143        return 0;
 144}
 145
 146#else /* CONFIG_PPC64 */
 147
 148#define GP_REGS_SIZE    min(sizeof(elf_gregset_t), sizeof(struct pt_regs))
 149
 150static inline int put_sigset_t(sigset_t __user *uset, sigset_t *set)
 151{
 152        return copy_to_user(uset, set, sizeof(*uset));
 153}
 154
 155static inline int get_sigset_t(sigset_t *set, const sigset_t __user *uset)
 156{
 157        return copy_from_user(set, uset, sizeof(*uset));
 158}
 159
 160#define to_user_ptr(p)          ((unsigned long)(p))
 161#define from_user_ptr(p)        ((void __user *)(p))
 162
 163static inline int save_general_regs(struct pt_regs *regs,
 164                struct mcontext __user *frame)
 165{
 166        WARN_ON(!FULL_REGS(regs));
 167        return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE);
 168}
 169
 170static inline int restore_general_regs(struct pt_regs *regs,
 171                struct mcontext __user *sr)
 172{
 173        /* copy up to but not including MSR */
 174        if (__copy_from_user(regs, &sr->mc_gregs,
 175                                PT_MSR * sizeof(elf_greg_t)))
 176                return -EFAULT;
 177        /* copy from orig_r3 (the word after the MSR) up to the end */
 178        if (__copy_from_user(&regs->orig_gpr3, &sr->mc_gregs[PT_ORIG_R3],
 179                                GP_REGS_SIZE - PT_ORIG_R3 * sizeof(elf_greg_t)))
 180                return -EFAULT;
 181        return 0;
 182}
 183#endif
 184
 185/*
 186 * When we have signals to deliver, we set up on the
 187 * user stack, going down from the original stack pointer:
 188 *      an ABI gap of 56 words
 189 *      an mcontext struct
 190 *      a sigcontext struct
 191 *      a gap of __SIGNAL_FRAMESIZE bytes
 192 *
 193 * Each of these things must be a multiple of 16 bytes in size. The following
 194 * structure represent all of this except the __SIGNAL_FRAMESIZE gap
 195 *
 196 */
 197struct sigframe {
 198        struct sigcontext sctx;         /* the sigcontext */
 199        struct mcontext mctx;           /* all the register values */
 200#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 201        struct sigcontext sctx_transact;
 202        struct mcontext mctx_transact;
 203#endif
 204        /*
 205         * Programs using the rs6000/xcoff abi can save up to 19 gp
 206         * regs and 18 fp regs below sp before decrementing it.
 207         */
 208        int                     abigap[56];
 209};
 210
 211/* We use the mc_pad field for the signal return trampoline. */
 212#define tramp   mc_pad
 213
 214/*
 215 *  When we have rt signals to deliver, we set up on the
 216 *  user stack, going down from the original stack pointer:
 217 *      one rt_sigframe struct (siginfo + ucontext + ABI gap)
 218 *      a gap of __SIGNAL_FRAMESIZE+16 bytes
 219 *  (the +16 is to get the siginfo and ucontext in the same
 220 *  positions as in older kernels).
 221 *
 222 *  Each of these things must be a multiple of 16 bytes in size.
 223 *
 224 */
 225struct rt_sigframe {
 226#ifdef CONFIG_PPC64
 227        compat_siginfo_t info;
 228#else
 229        struct siginfo info;
 230#endif
 231        struct ucontext uc;
 232#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 233        struct ucontext uc_transact;
 234#endif
 235        /*
 236         * Programs using the rs6000/xcoff abi can save up to 19 gp
 237         * regs and 18 fp regs below sp before decrementing it.
 238         */
 239        int                     abigap[56];
 240};
 241
 242#ifdef CONFIG_VSX
 243unsigned long copy_fpr_to_user(void __user *to,
 244                               struct task_struct *task)
 245{
 246        u64 buf[ELF_NFPREG];
 247        int i;
 248
 249        /* save FPR copy to local buffer then write to the thread_struct */
 250        for (i = 0; i < (ELF_NFPREG - 1) ; i++)
 251                buf[i] = task->thread.TS_FPR(i);
 252        buf[i] = task->thread.fp_state.fpscr;
 253        return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double));
 254}
 255
 256unsigned long copy_fpr_from_user(struct task_struct *task,
 257                                 void __user *from)
 258{
 259        u64 buf[ELF_NFPREG];
 260        int i;
 261
 262        if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double)))
 263                return 1;
 264        for (i = 0; i < (ELF_NFPREG - 1) ; i++)
 265                task->thread.TS_FPR(i) = buf[i];
 266        task->thread.fp_state.fpscr = buf[i];
 267
 268        return 0;
 269}
 270
 271unsigned long copy_vsx_to_user(void __user *to,
 272                               struct task_struct *task)
 273{
 274        u64 buf[ELF_NVSRHALFREG];
 275        int i;
 276
 277        /* save FPR copy to local buffer then write to the thread_struct */
 278        for (i = 0; i < ELF_NVSRHALFREG; i++)
 279                buf[i] = task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET];
 280        return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double));
 281}
 282
 283unsigned long copy_vsx_from_user(struct task_struct *task,
 284                                 void __user *from)
 285{
 286        u64 buf[ELF_NVSRHALFREG];
 287        int i;
 288
 289        if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double)))
 290                return 1;
 291        for (i = 0; i < ELF_NVSRHALFREG ; i++)
 292                task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i];
 293        return 0;
 294}
 295
 296#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 297unsigned long copy_ckfpr_to_user(void __user *to,
 298                                  struct task_struct *task)
 299{
 300        u64 buf[ELF_NFPREG];
 301        int i;
 302
 303        /* save FPR copy to local buffer then write to the thread_struct */
 304        for (i = 0; i < (ELF_NFPREG - 1) ; i++)
 305                buf[i] = task->thread.TS_CKFPR(i);
 306        buf[i] = task->thread.ckfp_state.fpscr;
 307        return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double));
 308}
 309
 310unsigned long copy_ckfpr_from_user(struct task_struct *task,
 311                                          void __user *from)
 312{
 313        u64 buf[ELF_NFPREG];
 314        int i;
 315
 316        if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double)))
 317                return 1;
 318        for (i = 0; i < (ELF_NFPREG - 1) ; i++)
 319                task->thread.TS_CKFPR(i) = buf[i];
 320        task->thread.ckfp_state.fpscr = buf[i];
 321
 322        return 0;
 323}
 324
 325unsigned long copy_ckvsx_to_user(void __user *to,
 326                                  struct task_struct *task)
 327{
 328        u64 buf[ELF_NVSRHALFREG];
 329        int i;
 330
 331        /* save FPR copy to local buffer then write to the thread_struct */
 332        for (i = 0; i < ELF_NVSRHALFREG; i++)
 333                buf[i] = task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET];
 334        return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double));
 335}
 336
 337unsigned long copy_ckvsx_from_user(struct task_struct *task,
 338                                          void __user *from)
 339{
 340        u64 buf[ELF_NVSRHALFREG];
 341        int i;
 342
 343        if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double)))
 344                return 1;
 345        for (i = 0; i < ELF_NVSRHALFREG ; i++)
 346                task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i];
 347        return 0;
 348}
 349#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
 350#else
 351inline unsigned long copy_fpr_to_user(void __user *to,
 352                                      struct task_struct *task)
 353{
 354        return __copy_to_user(to, task->thread.fp_state.fpr,
 355                              ELF_NFPREG * sizeof(double));
 356}
 357
 358inline unsigned long copy_fpr_from_user(struct task_struct *task,
 359                                        void __user *from)
 360{
 361        return __copy_from_user(task->thread.fp_state.fpr, from,
 362                              ELF_NFPREG * sizeof(double));
 363}
 364
 365#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 366inline unsigned long copy_ckfpr_to_user(void __user *to,
 367                                         struct task_struct *task)
 368{
 369        return __copy_to_user(to, task->thread.ckfp_state.fpr,
 370                              ELF_NFPREG * sizeof(double));
 371}
 372
 373inline unsigned long copy_ckfpr_from_user(struct task_struct *task,
 374                                                 void __user *from)
 375{
 376        return __copy_from_user(task->thread.ckfp_state.fpr, from,
 377                                ELF_NFPREG * sizeof(double));
 378}
 379#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
 380#endif
 381
 382/*
 383 * Save the current user registers on the user stack.
 384 * We only save the altivec/spe registers if the process has used
 385 * altivec/spe instructions at some point.
 386 */
 387static int save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
 388                          struct mcontext __user *tm_frame, int sigret,
 389                          int ctx_has_vsx_region)
 390{
 391        unsigned long msr = regs->msr;
 392
 393        /* Make sure floating point registers are stored in regs */
 394        flush_fp_to_thread(current);
 395
 396        /* save general registers */
 397        if (save_general_regs(regs, frame))
 398                return 1;
 399
 400#ifdef CONFIG_ALTIVEC
 401        /* save altivec registers */
 402        if (current->thread.used_vr) {
 403                flush_altivec_to_thread(current);
 404                if (__copy_to_user(&frame->mc_vregs, &current->thread.vr_state,
 405                                   ELF_NVRREG * sizeof(vector128)))
 406                        return 1;
 407                /* set MSR_VEC in the saved MSR value to indicate that
 408                   frame->mc_vregs contains valid data */
 409                msr |= MSR_VEC;
 410        }
 411        /* else assert((regs->msr & MSR_VEC) == 0) */
 412
 413        /* We always copy to/from vrsave, it's 0 if we don't have or don't
 414         * use altivec. Since VSCR only contains 32 bits saved in the least
 415         * significant bits of a vector, we "cheat" and stuff VRSAVE in the
 416         * most significant bits of that same vector. --BenH
 417         * Note that the current VRSAVE value is in the SPR at this point.
 418         */
 419        if (cpu_has_feature(CPU_FTR_ALTIVEC))
 420                current->thread.vrsave = mfspr(SPRN_VRSAVE);
 421        if (__put_user(current->thread.vrsave, (u32 __user *)&frame->mc_vregs[32]))
 422                return 1;
 423#endif /* CONFIG_ALTIVEC */
 424        if (copy_fpr_to_user(&frame->mc_fregs, current))
 425                return 1;
 426
 427        /*
 428         * Clear the MSR VSX bit to indicate there is no valid state attached
 429         * to this context, except in the specific case below where we set it.
 430         */
 431        msr &= ~MSR_VSX;
 432#ifdef CONFIG_VSX
 433        /*
 434         * Copy VSR 0-31 upper half from thread_struct to local
 435         * buffer, then write that to userspace.  Also set MSR_VSX in
 436         * the saved MSR value to indicate that frame->mc_vregs
 437         * contains valid data
 438         */
 439        if (current->thread.used_vsr && ctx_has_vsx_region) {
 440                flush_vsx_to_thread(current);
 441                if (copy_vsx_to_user(&frame->mc_vsregs, current))
 442                        return 1;
 443                msr |= MSR_VSX;
 444        }
 445#endif /* CONFIG_VSX */
 446#ifdef CONFIG_SPE
 447        /* save spe registers */
 448        if (current->thread.used_spe) {
 449                flush_spe_to_thread(current);
 450                if (__copy_to_user(&frame->mc_vregs, current->thread.evr,
 451                                   ELF_NEVRREG * sizeof(u32)))
 452                        return 1;
 453                /* set MSR_SPE in the saved MSR value to indicate that
 454                   frame->mc_vregs contains valid data */
 455                msr |= MSR_SPE;
 456        }
 457        /* else assert((regs->msr & MSR_SPE) == 0) */
 458
 459        /* We always copy to/from spefscr */
 460        if (__put_user(current->thread.spefscr, (u32 __user *)&frame->mc_vregs + ELF_NEVRREG))
 461                return 1;
 462#endif /* CONFIG_SPE */
 463
 464        if (__put_user(msr, &frame->mc_gregs[PT_MSR]))
 465                return 1;
 466        /* We need to write 0 the MSR top 32 bits in the tm frame so that we
 467         * can check it on the restore to see if TM is active
 468         */
 469        if (tm_frame && __put_user(0, &tm_frame->mc_gregs[PT_MSR]))
 470                return 1;
 471
 472        if (sigret) {
 473                /* Set up the sigreturn trampoline: li r0,sigret; sc */
 474                if (__put_user(0x38000000UL + sigret, &frame->tramp[0])
 475                    || __put_user(0x44000002UL, &frame->tramp[1]))
 476                        return 1;
 477                flush_icache_range((unsigned long) &frame->tramp[0],
 478                                   (unsigned long) &frame->tramp[2]);
 479        }
 480
 481        return 0;
 482}
 483
 484#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 485/*
 486 * Save the current user registers on the user stack.
 487 * We only save the altivec/spe registers if the process has used
 488 * altivec/spe instructions at some point.
 489 * We also save the transactional registers to a second ucontext in the
 490 * frame.
 491 *
 492 * See save_user_regs() and signal_64.c:setup_tm_sigcontexts().
 493 */
 494static int save_tm_user_regs(struct pt_regs *regs,
 495                             struct mcontext __user *frame,
 496                             struct mcontext __user *tm_frame, int sigret)
 497{
 498        unsigned long msr = regs->msr;
 499
 500        WARN_ON(tm_suspend_disabled);
 501
 502        /* Remove TM bits from thread's MSR.  The MSR in the sigcontext
 503         * just indicates to userland that we were doing a transaction, but we
 504         * don't want to return in transactional state.  This also ensures
 505         * that flush_fp_to_thread won't set TIF_RESTORE_TM again.
 506         */
 507        regs->msr &= ~MSR_TS_MASK;
 508
 509        /* Save both sets of general registers */
 510        if (save_general_regs(&current->thread.ckpt_regs, frame)
 511            || save_general_regs(regs, tm_frame))
 512                return 1;
 513
 514        /* Stash the top half of the 64bit MSR into the 32bit MSR word
 515         * of the transactional mcontext.  This way we have a backward-compatible
 516         * MSR in the 'normal' (checkpointed) mcontext and additionally one can
 517         * also look at what type of transaction (T or S) was active at the
 518         * time of the signal.
 519         */
 520        if (__put_user((msr >> 32), &tm_frame->mc_gregs[PT_MSR]))
 521                return 1;
 522
 523#ifdef CONFIG_ALTIVEC
 524        /* save altivec registers */
 525        if (current->thread.used_vr) {
 526                if (__copy_to_user(&frame->mc_vregs, &current->thread.ckvr_state,
 527                                   ELF_NVRREG * sizeof(vector128)))
 528                        return 1;
 529                if (msr & MSR_VEC) {
 530                        if (__copy_to_user(&tm_frame->mc_vregs,
 531                                           &current->thread.vr_state,
 532                                           ELF_NVRREG * sizeof(vector128)))
 533                                return 1;
 534                } else {
 535                        if (__copy_to_user(&tm_frame->mc_vregs,
 536                                           &current->thread.ckvr_state,
 537                                           ELF_NVRREG * sizeof(vector128)))
 538                                return 1;
 539                }
 540
 541                /* set MSR_VEC in the saved MSR value to indicate that
 542                 * frame->mc_vregs contains valid data
 543                 */
 544                msr |= MSR_VEC;
 545        }
 546
 547        /* We always copy to/from vrsave, it's 0 if we don't have or don't
 548         * use altivec. Since VSCR only contains 32 bits saved in the least
 549         * significant bits of a vector, we "cheat" and stuff VRSAVE in the
 550         * most significant bits of that same vector. --BenH
 551         */
 552        if (cpu_has_feature(CPU_FTR_ALTIVEC))
 553                current->thread.ckvrsave = mfspr(SPRN_VRSAVE);
 554        if (__put_user(current->thread.ckvrsave,
 555                       (u32 __user *)&frame->mc_vregs[32]))
 556                return 1;
 557        if (msr & MSR_VEC) {
 558                if (__put_user(current->thread.vrsave,
 559                               (u32 __user *)&tm_frame->mc_vregs[32]))
 560                        return 1;
 561        } else {
 562                if (__put_user(current->thread.ckvrsave,
 563                               (u32 __user *)&tm_frame->mc_vregs[32]))
 564                        return 1;
 565        }
 566#endif /* CONFIG_ALTIVEC */
 567
 568        if (copy_ckfpr_to_user(&frame->mc_fregs, current))
 569                return 1;
 570        if (msr & MSR_FP) {
 571                if (copy_fpr_to_user(&tm_frame->mc_fregs, current))
 572                        return 1;
 573        } else {
 574                if (copy_ckfpr_to_user(&tm_frame->mc_fregs, current))
 575                        return 1;
 576        }
 577
 578#ifdef CONFIG_VSX
 579        /*
 580         * Copy VSR 0-31 upper half from thread_struct to local
 581         * buffer, then write that to userspace.  Also set MSR_VSX in
 582         * the saved MSR value to indicate that frame->mc_vregs
 583         * contains valid data
 584         */
 585        if (current->thread.used_vsr) {
 586                if (copy_ckvsx_to_user(&frame->mc_vsregs, current))
 587                        return 1;
 588                if (msr & MSR_VSX) {
 589                        if (copy_vsx_to_user(&tm_frame->mc_vsregs,
 590                                                      current))
 591                                return 1;
 592                } else {
 593                        if (copy_ckvsx_to_user(&tm_frame->mc_vsregs, current))
 594                                return 1;
 595                }
 596
 597                msr |= MSR_VSX;
 598        }
 599#endif /* CONFIG_VSX */
 600#ifdef CONFIG_SPE
 601        /* SPE regs are not checkpointed with TM, so this section is
 602         * simply the same as in save_user_regs().
 603         */
 604        if (current->thread.used_spe) {
 605                flush_spe_to_thread(current);
 606                if (__copy_to_user(&frame->mc_vregs, current->thread.evr,
 607                                   ELF_NEVRREG * sizeof(u32)))
 608                        return 1;
 609                /* set MSR_SPE in the saved MSR value to indicate that
 610                 * frame->mc_vregs contains valid data */
 611                msr |= MSR_SPE;
 612        }
 613
 614        /* We always copy to/from spefscr */
 615        if (__put_user(current->thread.spefscr, (u32 __user *)&frame->mc_vregs + ELF_NEVRREG))
 616                return 1;
 617#endif /* CONFIG_SPE */
 618
 619        if (__put_user(msr, &frame->mc_gregs[PT_MSR]))
 620                return 1;
 621        if (sigret) {
 622                /* Set up the sigreturn trampoline: li r0,sigret; sc */
 623                if (__put_user(0x38000000UL + sigret, &frame->tramp[0])
 624                    || __put_user(0x44000002UL, &frame->tramp[1]))
 625                        return 1;
 626                flush_icache_range((unsigned long) &frame->tramp[0],
 627                                   (unsigned long) &frame->tramp[2]);
 628        }
 629
 630        return 0;
 631}
 632#endif
 633
 634/*
 635 * Restore the current user register values from the user stack,
 636 * (except for MSR).
 637 */
 638static long restore_user_regs(struct pt_regs *regs,
 639                              struct mcontext __user *sr, int sig)
 640{
 641        long err;
 642        unsigned int save_r2 = 0;
 643        unsigned long msr;
 644#ifdef CONFIG_VSX
 645        int i;
 646#endif
 647
 648        /*
 649         * restore general registers but not including MSR or SOFTE. Also
 650         * take care of keeping r2 (TLS) intact if not a signal
 651         */
 652        if (!sig)
 653                save_r2 = (unsigned int)regs->gpr[2];
 654        err = restore_general_regs(regs, sr);
 655        regs->trap = 0;
 656        err |= __get_user(msr, &sr->mc_gregs[PT_MSR]);
 657        if (!sig)
 658                regs->gpr[2] = (unsigned long) save_r2;
 659        if (err)
 660                return 1;
 661
 662        /* if doing signal return, restore the previous little-endian mode */
 663        if (sig)
 664                regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE);
 665
 666#ifdef CONFIG_ALTIVEC
 667        /*
 668         * Force the process to reload the altivec registers from
 669         * current->thread when it next does altivec instructions
 670         */
 671        regs->msr &= ~MSR_VEC;
 672        if (msr & MSR_VEC) {
 673                /* restore altivec registers from the stack */
 674                if (__copy_from_user(&current->thread.vr_state, &sr->mc_vregs,
 675                                     sizeof(sr->mc_vregs)))
 676                        return 1;
 677                current->thread.used_vr = true;
 678        } else if (current->thread.used_vr)
 679                memset(&current->thread.vr_state, 0,
 680                       ELF_NVRREG * sizeof(vector128));
 681
 682        /* Always get VRSAVE back */
 683        if (__get_user(current->thread.vrsave, (u32 __user *)&sr->mc_vregs[32]))
 684                return 1;
 685        if (cpu_has_feature(CPU_FTR_ALTIVEC))
 686                mtspr(SPRN_VRSAVE, current->thread.vrsave);
 687#endif /* CONFIG_ALTIVEC */
 688        if (copy_fpr_from_user(current, &sr->mc_fregs))
 689                return 1;
 690
 691#ifdef CONFIG_VSX
 692        /*
 693         * Force the process to reload the VSX registers from
 694         * current->thread when it next does VSX instruction.
 695         */
 696        regs->msr &= ~MSR_VSX;
 697        if (msr & MSR_VSX) {
 698                /*
 699                 * Restore altivec registers from the stack to a local
 700                 * buffer, then write this out to the thread_struct
 701                 */
 702                if (copy_vsx_from_user(current, &sr->mc_vsregs))
 703                        return 1;
 704                current->thread.used_vsr = true;
 705        } else if (current->thread.used_vsr)
 706                for (i = 0; i < 32 ; i++)
 707                        current->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = 0;
 708#endif /* CONFIG_VSX */
 709        /*
 710         * force the process to reload the FP registers from
 711         * current->thread when it next does FP instructions
 712         */
 713        regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1);
 714
 715#ifdef CONFIG_SPE
 716        /* force the process to reload the spe registers from
 717           current->thread when it next does spe instructions */
 718        regs->msr &= ~MSR_SPE;
 719        if (msr & MSR_SPE) {
 720                /* restore spe registers from the stack */
 721                if (__copy_from_user(current->thread.evr, &sr->mc_vregs,
 722                                     ELF_NEVRREG * sizeof(u32)))
 723                        return 1;
 724                current->thread.used_spe = true;
 725        } else if (current->thread.used_spe)
 726                memset(current->thread.evr, 0, ELF_NEVRREG * sizeof(u32));
 727
 728        /* Always get SPEFSCR back */
 729        if (__get_user(current->thread.spefscr, (u32 __user *)&sr->mc_vregs + ELF_NEVRREG))
 730                return 1;
 731#endif /* CONFIG_SPE */
 732
 733        return 0;
 734}
 735
 736#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 737/*
 738 * Restore the current user register values from the user stack, except for
 739 * MSR, and recheckpoint the original checkpointed register state for processes
 740 * in transactions.
 741 */
 742static long restore_tm_user_regs(struct pt_regs *regs,
 743                                 struct mcontext __user *sr,
 744                                 struct mcontext __user *tm_sr)
 745{
 746        long err;
 747        unsigned long msr, msr_hi;
 748#ifdef CONFIG_VSX
 749        int i;
 750#endif
 751
 752        if (tm_suspend_disabled)
 753                return 1;
 754        /*
 755         * restore general registers but not including MSR or SOFTE. Also
 756         * take care of keeping r2 (TLS) intact if not a signal.
 757         * See comment in signal_64.c:restore_tm_sigcontexts();
 758         * TFHAR is restored from the checkpointed NIP; TEXASR and TFIAR
 759         * were set by the signal delivery.
 760         */
 761        err = restore_general_regs(regs, tm_sr);
 762        err |= restore_general_regs(&current->thread.ckpt_regs, sr);
 763
 764        err |= __get_user(current->thread.tm_tfhar, &sr->mc_gregs[PT_NIP]);
 765
 766        err |= __get_user(msr, &sr->mc_gregs[PT_MSR]);
 767        if (err)
 768                return 1;
 769
 770        /* Restore the previous little-endian mode */
 771        regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE);
 772
 773#ifdef CONFIG_ALTIVEC
 774        regs->msr &= ~MSR_VEC;
 775        if (msr & MSR_VEC) {
 776                /* restore altivec registers from the stack */
 777                if (__copy_from_user(&current->thread.ckvr_state, &sr->mc_vregs,
 778                                     sizeof(sr->mc_vregs)) ||
 779                    __copy_from_user(&current->thread.vr_state,
 780                                     &tm_sr->mc_vregs,
 781                                     sizeof(sr->mc_vregs)))
 782                        return 1;
 783                current->thread.used_vr = true;
 784        } else if (current->thread.used_vr) {
 785                memset(&current->thread.vr_state, 0,
 786                       ELF_NVRREG * sizeof(vector128));
 787                memset(&current->thread.ckvr_state, 0,
 788                       ELF_NVRREG * sizeof(vector128));
 789        }
 790
 791        /* Always get VRSAVE back */
 792        if (__get_user(current->thread.ckvrsave,
 793                       (u32 __user *)&sr->mc_vregs[32]) ||
 794            __get_user(current->thread.vrsave,
 795                       (u32 __user *)&tm_sr->mc_vregs[32]))
 796                return 1;
 797        if (cpu_has_feature(CPU_FTR_ALTIVEC))
 798                mtspr(SPRN_VRSAVE, current->thread.ckvrsave);
 799#endif /* CONFIG_ALTIVEC */
 800
 801        regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1);
 802
 803        if (copy_fpr_from_user(current, &sr->mc_fregs) ||
 804            copy_ckfpr_from_user(current, &tm_sr->mc_fregs))
 805                return 1;
 806
 807#ifdef CONFIG_VSX
 808        regs->msr &= ~MSR_VSX;
 809        if (msr & MSR_VSX) {
 810                /*
 811                 * Restore altivec registers from the stack to a local
 812                 * buffer, then write this out to the thread_struct
 813                 */
 814                if (copy_vsx_from_user(current, &tm_sr->mc_vsregs) ||
 815                    copy_ckvsx_from_user(current, &sr->mc_vsregs))
 816                        return 1;
 817                current->thread.used_vsr = true;
 818        } else if (current->thread.used_vsr)
 819                for (i = 0; i < 32 ; i++) {
 820                        current->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = 0;
 821                        current->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = 0;
 822                }
 823#endif /* CONFIG_VSX */
 824
 825#ifdef CONFIG_SPE
 826        /* SPE regs are not checkpointed with TM, so this section is
 827         * simply the same as in restore_user_regs().
 828         */
 829        regs->msr &= ~MSR_SPE;
 830        if (msr & MSR_SPE) {
 831                if (__copy_from_user(current->thread.evr, &sr->mc_vregs,
 832                                     ELF_NEVRREG * sizeof(u32)))
 833                        return 1;
 834                current->thread.used_spe = true;
 835        } else if (current->thread.used_spe)
 836                memset(current->thread.evr, 0, ELF_NEVRREG * sizeof(u32));
 837
 838        /* Always get SPEFSCR back */
 839        if (__get_user(current->thread.spefscr, (u32 __user *)&sr->mc_vregs
 840                       + ELF_NEVRREG))
 841                return 1;
 842#endif /* CONFIG_SPE */
 843
 844        /* Get the top half of the MSR from the user context */
 845        if (__get_user(msr_hi, &tm_sr->mc_gregs[PT_MSR]))
 846                return 1;
 847        msr_hi <<= 32;
 848        /* If TM bits are set to the reserved value, it's an invalid context */
 849        if (MSR_TM_RESV(msr_hi))
 850                return 1;
 851        /* Pull in the MSR TM bits from the user context */
 852        regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr_hi & MSR_TS_MASK);
 853        /* Now, recheckpoint.  This loads up all of the checkpointed (older)
 854         * registers, including FP and V[S]Rs.  After recheckpointing, the
 855         * transactional versions should be loaded.
 856         */
 857        tm_enable();
 858        /* Make sure the transaction is marked as failed */
 859        current->thread.tm_texasr |= TEXASR_FS;
 860        /* This loads the checkpointed FP/VEC state, if used */
 861        tm_recheckpoint(&current->thread);
 862
 863        /* This loads the speculative FP/VEC state, if used */
 864        msr_check_and_set(msr & (MSR_FP | MSR_VEC));
 865        if (msr & MSR_FP) {
 866                load_fp_state(&current->thread.fp_state);
 867                regs->msr |= (MSR_FP | current->thread.fpexc_mode);
 868        }
 869#ifdef CONFIG_ALTIVEC
 870        if (msr & MSR_VEC) {
 871                load_vr_state(&current->thread.vr_state);
 872                regs->msr |= MSR_VEC;
 873        }
 874#endif
 875
 876        return 0;
 877}
 878#endif
 879
 880#ifdef CONFIG_PPC64
 881
 882#define copy_siginfo_to_user    copy_siginfo_to_user32
 883
 884#endif /* CONFIG_PPC64 */
 885
 886/*
 887 * Set up a signal frame for a "real-time" signal handler
 888 * (one which gets siginfo).
 889 */
 890int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
 891                       struct task_struct *tsk)
 892{
 893        struct rt_sigframe __user *rt_sf;
 894        struct mcontext __user *frame;
 895        struct mcontext __user *tm_frame = NULL;
 896        void __user *addr;
 897        unsigned long newsp = 0;
 898        int sigret;
 899        unsigned long tramp;
 900        struct pt_regs *regs = tsk->thread.regs;
 901
 902        BUG_ON(tsk != current);
 903
 904        /* Set up Signal Frame */
 905        /* Put a Real Time Context onto stack */
 906        rt_sf = get_sigframe(ksig, get_tm_stackpointer(tsk), sizeof(*rt_sf), 1);
 907        addr = rt_sf;
 908        if (unlikely(rt_sf == NULL))
 909                goto badframe;
 910
 911        /* Put the siginfo & fill in most of the ucontext */
 912        if (copy_siginfo_to_user(&rt_sf->info, &ksig->info)
 913            || __put_user(0, &rt_sf->uc.uc_flags)
 914            || __save_altstack(&rt_sf->uc.uc_stack, regs->gpr[1])
 915            || __put_user(to_user_ptr(&rt_sf->uc.uc_mcontext),
 916                    &rt_sf->uc.uc_regs)
 917            || put_sigset_t(&rt_sf->uc.uc_sigmask, oldset))
 918                goto badframe;
 919
 920        /* Save user registers on the stack */
 921        frame = &rt_sf->uc.uc_mcontext;
 922        addr = frame;
 923        if (vdso32_rt_sigtramp && tsk->mm->context.vdso_base) {
 924                sigret = 0;
 925                tramp = tsk->mm->context.vdso_base + vdso32_rt_sigtramp;
 926        } else {
 927                sigret = __NR_rt_sigreturn;
 928                tramp = (unsigned long) frame->tramp;
 929        }
 930
 931#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 932        tm_frame = &rt_sf->uc_transact.uc_mcontext;
 933        if (MSR_TM_ACTIVE(regs->msr)) {
 934                if (__put_user((unsigned long)&rt_sf->uc_transact,
 935                               &rt_sf->uc.uc_link) ||
 936                    __put_user((unsigned long)tm_frame,
 937                               &rt_sf->uc_transact.uc_regs))
 938                        goto badframe;
 939                if (save_tm_user_regs(regs, frame, tm_frame, sigret))
 940                        goto badframe;
 941        }
 942        else
 943#endif
 944        {
 945                if (__put_user(0, &rt_sf->uc.uc_link))
 946                        goto badframe;
 947                if (save_user_regs(regs, frame, tm_frame, sigret, 1))
 948                        goto badframe;
 949        }
 950        regs->link = tramp;
 951
 952        tsk->thread.fp_state.fpscr = 0; /* turn off all fp exceptions */
 953
 954        /* create a stack frame for the caller of the handler */
 955        newsp = ((unsigned long)rt_sf) - (__SIGNAL_FRAMESIZE + 16);
 956        addr = (void __user *)regs->gpr[1];
 957        if (put_user(regs->gpr[1], (u32 __user *)newsp))
 958                goto badframe;
 959
 960        /* Fill registers for signal handler */
 961        regs->gpr[1] = newsp;
 962        regs->gpr[3] = ksig->sig;
 963        regs->gpr[4] = (unsigned long) &rt_sf->info;
 964        regs->gpr[5] = (unsigned long) &rt_sf->uc;
 965        regs->gpr[6] = (unsigned long) rt_sf;
 966        regs->nip = (unsigned long) ksig->ka.sa.sa_handler;
 967        /* enter the signal handler in native-endian mode */
 968        regs->msr &= ~MSR_LE;
 969        regs->msr |= (MSR_KERNEL & MSR_LE);
 970        return 0;
 971
 972badframe:
 973        if (show_unhandled_signals)
 974                printk_ratelimited(KERN_INFO
 975                                   "%s[%d]: bad frame in handle_rt_signal32: "
 976                                   "%p nip %08lx lr %08lx\n",
 977                                   tsk->comm, tsk->pid,
 978                                   addr, regs->nip, regs->link);
 979
 980        return 1;
 981}
 982
 983static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int sig)
 984{
 985        sigset_t set;
 986        struct mcontext __user *mcp;
 987
 988        if (get_sigset_t(&set, &ucp->uc_sigmask))
 989                return -EFAULT;
 990#ifdef CONFIG_PPC64
 991        {
 992                u32 cmcp;
 993
 994                if (__get_user(cmcp, &ucp->uc_regs))
 995                        return -EFAULT;
 996                mcp = (struct mcontext __user *)(u64)cmcp;
 997                /* no need to check access_ok(mcp), since mcp < 4GB */
 998        }
 999#else
1000        if (__get_user(mcp, &ucp->uc_regs))
1001                return -EFAULT;
1002        if (!access_ok(mcp, sizeof(*mcp)))
1003                return -EFAULT;
1004#endif
1005        set_current_blocked(&set);
1006        if (restore_user_regs(regs, mcp, sig))
1007                return -EFAULT;
1008
1009        return 0;
1010}
1011
1012#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1013static int do_setcontext_tm(struct ucontext __user *ucp,
1014                            struct ucontext __user *tm_ucp,
1015                            struct pt_regs *regs)
1016{
1017        sigset_t set;
1018        struct mcontext __user *mcp;
1019        struct mcontext __user *tm_mcp;
1020        u32 cmcp;
1021        u32 tm_cmcp;
1022
1023        if (get_sigset_t(&set, &ucp->uc_sigmask))
1024                return -EFAULT;
1025
1026        if (__get_user(cmcp, &ucp->uc_regs) ||
1027            __get_user(tm_cmcp, &tm_ucp->uc_regs))
1028                return -EFAULT;
1029        mcp = (struct mcontext __user *)(u64)cmcp;
1030        tm_mcp = (struct mcontext __user *)(u64)tm_cmcp;
1031        /* no need to check access_ok(mcp), since mcp < 4GB */
1032
1033        set_current_blocked(&set);
1034        if (restore_tm_user_regs(regs, mcp, tm_mcp))
1035                return -EFAULT;
1036
1037        return 0;
1038}
1039#endif
1040
1041#ifdef CONFIG_PPC64
1042COMPAT_SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
1043                       struct ucontext __user *, new_ctx, int, ctx_size)
1044#else
1045SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
1046                       struct ucontext __user *, new_ctx, long, ctx_size)
1047#endif
1048{
1049        struct pt_regs *regs = current_pt_regs();
1050        int ctx_has_vsx_region = 0;
1051
1052#ifdef CONFIG_PPC64
1053        unsigned long new_msr = 0;
1054
1055        if (new_ctx) {
1056                struct mcontext __user *mcp;
1057                u32 cmcp;
1058
1059                /*
1060                 * Get pointer to the real mcontext.  No need for
1061                 * access_ok since we are dealing with compat
1062                 * pointers.
1063                 */
1064                if (__get_user(cmcp, &new_ctx->uc_regs))
1065                        return -EFAULT;
1066                mcp = (struct mcontext __user *)(u64)cmcp;
1067                if (__get_user(new_msr, &mcp->mc_gregs[PT_MSR]))
1068                        return -EFAULT;
1069        }
1070        /*
1071         * Check that the context is not smaller than the original
1072         * size (with VMX but without VSX)
1073         */
1074        if (ctx_size < UCONTEXTSIZEWITHOUTVSX)
1075                return -EINVAL;
1076        /*
1077         * If the new context state sets the MSR VSX bits but
1078         * it doesn't provide VSX state.
1079         */
1080        if ((ctx_size < sizeof(struct ucontext)) &&
1081            (new_msr & MSR_VSX))
1082                return -EINVAL;
1083        /* Does the context have enough room to store VSX data? */
1084        if (ctx_size >= sizeof(struct ucontext))
1085                ctx_has_vsx_region = 1;
1086#else
1087        /* Context size is for future use. Right now, we only make sure
1088         * we are passed something we understand
1089         */
1090        if (ctx_size < sizeof(struct ucontext))
1091                return -EINVAL;
1092#endif
1093        if (old_ctx != NULL) {
1094                struct mcontext __user *mctx;
1095
1096                /*
1097                 * old_ctx might not be 16-byte aligned, in which
1098                 * case old_ctx->uc_mcontext won't be either.
1099                 * Because we have the old_ctx->uc_pad2 field
1100                 * before old_ctx->uc_mcontext, we need to round down
1101                 * from &old_ctx->uc_mcontext to a 16-byte boundary.
1102                 */
1103                mctx = (struct mcontext __user *)
1104                        ((unsigned long) &old_ctx->uc_mcontext & ~0xfUL);
1105                if (!access_ok(old_ctx, ctx_size)
1106                    || save_user_regs(regs, mctx, NULL, 0, ctx_has_vsx_region)
1107                    || put_sigset_t(&old_ctx->uc_sigmask, &current->blocked)
1108                    || __put_user(to_user_ptr(mctx), &old_ctx->uc_regs))
1109                        return -EFAULT;
1110        }
1111        if (new_ctx == NULL)
1112                return 0;
1113        if (!access_ok(new_ctx, ctx_size) ||
1114            fault_in_pages_readable((u8 __user *)new_ctx, ctx_size))
1115                return -EFAULT;
1116
1117        /*
1118         * If we get a fault copying the context into the kernel's
1119         * image of the user's registers, we can't just return -EFAULT
1120         * because the user's registers will be corrupted.  For instance
1121         * the NIP value may have been updated but not some of the
1122         * other registers.  Given that we have done the access_ok
1123         * and successfully read the first and last bytes of the region
1124         * above, this should only happen in an out-of-memory situation
1125         * or if another thread unmaps the region containing the context.
1126         * We kill the task with a SIGSEGV in this situation.
1127         */
1128        if (do_setcontext(new_ctx, regs, 0))
1129                do_exit(SIGSEGV);
1130
1131        set_thread_flag(TIF_RESTOREALL);
1132        return 0;
1133}
1134
1135#ifdef CONFIG_PPC64
1136COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
1137#else
1138SYSCALL_DEFINE0(rt_sigreturn)
1139#endif
1140{
1141        struct rt_sigframe __user *rt_sf;
1142        struct pt_regs *regs = current_pt_regs();
1143        int tm_restore = 0;
1144#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1145        struct ucontext __user *uc_transact;
1146        unsigned long msr_hi;
1147        unsigned long tmp;
1148#endif
1149        /* Always make any pending restarted system calls return -EINTR */
1150        current->restart_block.fn = do_no_restart_syscall;
1151
1152        rt_sf = (struct rt_sigframe __user *)
1153                (regs->gpr[1] + __SIGNAL_FRAMESIZE + 16);
1154        if (!access_ok(rt_sf, sizeof(*rt_sf)))
1155                goto bad;
1156
1157#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1158        /*
1159         * If there is a transactional state then throw it away.
1160         * The purpose of a sigreturn is to destroy all traces of the
1161         * signal frame, this includes any transactional state created
1162         * within in. We only check for suspended as we can never be
1163         * active in the kernel, we are active, there is nothing better to
1164         * do than go ahead and Bad Thing later.
1165         * The cause is not important as there will never be a
1166         * recheckpoint so it's not user visible.
1167         */
1168        if (MSR_TM_SUSPENDED(mfmsr()))
1169                tm_reclaim_current(0);
1170
1171        if (__get_user(tmp, &rt_sf->uc.uc_link))
1172                goto bad;
1173        uc_transact = (struct ucontext __user *)(uintptr_t)tmp;
1174        if (uc_transact) {
1175                u32 cmcp;
1176                struct mcontext __user *mcp;
1177
1178                if (__get_user(cmcp, &uc_transact->uc_regs))
1179                        return -EFAULT;
1180                mcp = (struct mcontext __user *)(u64)cmcp;
1181                /* The top 32 bits of the MSR are stashed in the transactional
1182                 * ucontext. */
1183                if (__get_user(msr_hi, &mcp->mc_gregs[PT_MSR]))
1184                        goto bad;
1185
1186                if (MSR_TM_ACTIVE(msr_hi<<32)) {
1187                        /* Trying to start TM on non TM system */
1188                        if (!cpu_has_feature(CPU_FTR_TM))
1189                                goto bad;
1190                        /* We only recheckpoint on return if we're
1191                         * transaction.
1192                         */
1193                        tm_restore = 1;
1194                        if (do_setcontext_tm(&rt_sf->uc, uc_transact, regs))
1195                                goto bad;
1196                }
1197        }
1198        if (!tm_restore) {
1199                /*
1200                 * Unset regs->msr because ucontext MSR TS is not
1201                 * set, and recheckpoint was not called. This avoid
1202                 * hitting a TM Bad thing at RFID
1203                 */
1204                regs->msr &= ~MSR_TS_MASK;
1205        }
1206        /* Fall through, for non-TM restore */
1207#endif
1208        if (!tm_restore)
1209                if (do_setcontext(&rt_sf->uc, regs, 1))
1210                        goto bad;
1211
1212        /*
1213         * It's not clear whether or why it is desirable to save the
1214         * sigaltstack setting on signal delivery and restore it on
1215         * signal return.  But other architectures do this and we have
1216         * always done it up until now so it is probably better not to
1217         * change it.  -- paulus
1218         */
1219#ifdef CONFIG_PPC64
1220        if (compat_restore_altstack(&rt_sf->uc.uc_stack))
1221                goto bad;
1222#else
1223        if (restore_altstack(&rt_sf->uc.uc_stack))
1224                goto bad;
1225#endif
1226        set_thread_flag(TIF_RESTOREALL);
1227        return 0;
1228
1229 bad:
1230        if (show_unhandled_signals)
1231                printk_ratelimited(KERN_INFO
1232                                   "%s[%d]: bad frame in sys_rt_sigreturn: "
1233                                   "%p nip %08lx lr %08lx\n",
1234                                   current->comm, current->pid,
1235                                   rt_sf, regs->nip, regs->link);
1236
1237        force_sig(SIGSEGV, current);
1238        return 0;
1239}
1240
1241#ifdef CONFIG_PPC32
1242SYSCALL_DEFINE3(debug_setcontext, struct ucontext __user *, ctx,
1243                         int, ndbg, struct sig_dbg_op __user *, dbg)
1244{
1245        struct pt_regs *regs = current_pt_regs();
1246        struct sig_dbg_op op;
1247        int i;
1248        unsigned long new_msr = regs->msr;
1249#ifdef CONFIG_PPC_ADV_DEBUG_REGS
1250        unsigned long new_dbcr0 = current->thread.debug.dbcr0;
1251#endif
1252
1253        for (i=0; i<ndbg; i++) {
1254                if (copy_from_user(&op, dbg + i, sizeof(op)))
1255                        return -EFAULT;
1256                switch (op.dbg_type) {
1257                case SIG_DBG_SINGLE_STEPPING:
1258#ifdef CONFIG_PPC_ADV_DEBUG_REGS
1259                        if (op.dbg_value) {
1260                                new_msr |= MSR_DE;
1261                                new_dbcr0 |= (DBCR0_IDM | DBCR0_IC);
1262                        } else {
1263                                new_dbcr0 &= ~DBCR0_IC;
1264                                if (!DBCR_ACTIVE_EVENTS(new_dbcr0,
1265                                                current->thread.debug.dbcr1)) {
1266                                        new_msr &= ~MSR_DE;
1267                                        new_dbcr0 &= ~DBCR0_IDM;
1268                                }
1269                        }
1270#else
1271                        if (op.dbg_value)
1272                                new_msr |= MSR_SE;
1273                        else
1274                                new_msr &= ~MSR_SE;
1275#endif
1276                        break;
1277                case SIG_DBG_BRANCH_TRACING:
1278#ifdef CONFIG_PPC_ADV_DEBUG_REGS
1279                        return -EINVAL;
1280#else
1281                        if (op.dbg_value)
1282                                new_msr |= MSR_BE;
1283                        else
1284                                new_msr &= ~MSR_BE;
1285#endif
1286                        break;
1287
1288                default:
1289                        return -EINVAL;
1290                }
1291        }
1292
1293        /* We wait until here to actually install the values in the
1294           registers so if we fail in the above loop, it will not
1295           affect the contents of these registers.  After this point,
1296           failure is a problem, anyway, and it's very unlikely unless
1297           the user is really doing something wrong. */
1298        regs->msr = new_msr;
1299#ifdef CONFIG_PPC_ADV_DEBUG_REGS
1300        current->thread.debug.dbcr0 = new_dbcr0;
1301#endif
1302
1303        if (!access_ok(ctx, sizeof(*ctx)) ||
1304            fault_in_pages_readable((u8 __user *)ctx, sizeof(*ctx)))
1305                return -EFAULT;
1306
1307        /*
1308         * If we get a fault copying the context into the kernel's
1309         * image of the user's registers, we can't just return -EFAULT
1310         * because the user's registers will be corrupted.  For instance
1311         * the NIP value may have been updated but not some of the
1312         * other registers.  Given that we have done the access_ok
1313         * and successfully read the first and last bytes of the region
1314         * above, this should only happen in an out-of-memory situation
1315         * or if another thread unmaps the region containing the context.
1316         * We kill the task with a SIGSEGV in this situation.
1317         */
1318        if (do_setcontext(ctx, regs, 1)) {
1319                if (show_unhandled_signals)
1320                        printk_ratelimited(KERN_INFO "%s[%d]: bad frame in "
1321                                           "sys_debug_setcontext: %p nip %08lx "
1322                                           "lr %08lx\n",
1323                                           current->comm, current->pid,
1324                                           ctx, regs->nip, regs->link);
1325
1326                force_sig(SIGSEGV, current);
1327                goto out;
1328        }
1329
1330        /*
1331         * It's not clear whether or why it is desirable to save the
1332         * sigaltstack setting on signal delivery and restore it on
1333         * signal return.  But other architectures do this and we have
1334         * always done it up until now so it is probably better not to
1335         * change it.  -- paulus
1336         */
1337        restore_altstack(&ctx->uc_stack);
1338
1339        set_thread_flag(TIF_RESTOREALL);
1340 out:
1341        return 0;
1342}
1343#endif
1344
1345/*
1346 * OK, we're invoking a handler
1347 */
1348int handle_signal32(struct ksignal *ksig, sigset_t *oldset,
1349                struct task_struct *tsk)
1350{
1351        struct sigcontext __user *sc;
1352        struct sigframe __user *frame;
1353        struct mcontext __user *tm_mctx = NULL;
1354        unsigned long newsp = 0;
1355        int sigret;
1356        unsigned long tramp;
1357        struct pt_regs *regs = tsk->thread.regs;
1358
1359        BUG_ON(tsk != current);
1360
1361        /* Set up Signal Frame */
1362        frame = get_sigframe(ksig, get_tm_stackpointer(tsk), sizeof(*frame), 1);
1363        if (unlikely(frame == NULL))
1364                goto badframe;
1365        sc = (struct sigcontext __user *) &frame->sctx;
1366
1367#if _NSIG != 64
1368#error "Please adjust handle_signal()"
1369#endif
1370        if (__put_user(to_user_ptr(ksig->ka.sa.sa_handler), &sc->handler)
1371            || __put_user(oldset->sig[0], &sc->oldmask)
1372#ifdef CONFIG_PPC64
1373            || __put_user((oldset->sig[0] >> 32), &sc->_unused[3])
1374#else
1375            || __put_user(oldset->sig[1], &sc->_unused[3])
1376#endif
1377            || __put_user(to_user_ptr(&frame->mctx), &sc->regs)
1378            || __put_user(ksig->sig, &sc->signal))
1379                goto badframe;
1380
1381        if (vdso32_sigtramp && tsk->mm->context.vdso_base) {
1382                sigret = 0;
1383                tramp = tsk->mm->context.vdso_base + vdso32_sigtramp;
1384        } else {
1385                sigret = __NR_sigreturn;
1386                tramp = (unsigned long) frame->mctx.tramp;
1387        }
1388
1389#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1390        tm_mctx = &frame->mctx_transact;
1391        if (MSR_TM_ACTIVE(regs->msr)) {
1392                if (save_tm_user_regs(regs, &frame->mctx, &frame->mctx_transact,
1393                                      sigret))
1394                        goto badframe;
1395        }
1396        else
1397#endif
1398        {
1399                if (save_user_regs(regs, &frame->mctx, tm_mctx, sigret, 1))
1400                        goto badframe;
1401        }
1402
1403        regs->link = tramp;
1404
1405        tsk->thread.fp_state.fpscr = 0; /* turn off all fp exceptions */
1406
1407        /* create a stack frame for the caller of the handler */
1408        newsp = ((unsigned long)frame) - __SIGNAL_FRAMESIZE;
1409        if (put_user(regs->gpr[1], (u32 __user *)newsp))
1410                goto badframe;
1411
1412        regs->gpr[1] = newsp;
1413        regs->gpr[3] = ksig->sig;
1414        regs->gpr[4] = (unsigned long) sc;
1415        regs->nip = (unsigned long) (unsigned long)ksig->ka.sa.sa_handler;
1416        /* enter the signal handler in big-endian mode */
1417        regs->msr &= ~MSR_LE;
1418        return 0;
1419
1420badframe:
1421        if (show_unhandled_signals)
1422                printk_ratelimited(KERN_INFO
1423                                   "%s[%d]: bad frame in handle_signal32: "
1424                                   "%p nip %08lx lr %08lx\n",
1425                                   tsk->comm, tsk->pid,
1426                                   frame, regs->nip, regs->link);
1427
1428        return 1;
1429}
1430
1431/*
1432 * Do a signal return; undo the signal stack.
1433 */
1434#ifdef CONFIG_PPC64
1435COMPAT_SYSCALL_DEFINE0(sigreturn)
1436#else
1437SYSCALL_DEFINE0(sigreturn)
1438#endif
1439{
1440        struct pt_regs *regs = current_pt_regs();
1441        struct sigframe __user *sf;
1442        struct sigcontext __user *sc;
1443        struct sigcontext sigctx;
1444        struct mcontext __user *sr;
1445        void __user *addr;
1446        sigset_t set;
1447#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1448        struct mcontext __user *mcp, *tm_mcp;
1449        unsigned long msr_hi;
1450#endif
1451
1452        /* Always make any pending restarted system calls return -EINTR */
1453        current->restart_block.fn = do_no_restart_syscall;
1454
1455        sf = (struct sigframe __user *)(regs->gpr[1] + __SIGNAL_FRAMESIZE);
1456        sc = &sf->sctx;
1457        addr = sc;
1458        if (copy_from_user(&sigctx, sc, sizeof(sigctx)))
1459                goto badframe;
1460
1461#ifdef CONFIG_PPC64
1462        /*
1463         * Note that PPC32 puts the upper 32 bits of the sigmask in the
1464         * unused part of the signal stackframe
1465         */
1466        set.sig[0] = sigctx.oldmask + ((long)(sigctx._unused[3]) << 32);
1467#else
1468        set.sig[0] = sigctx.oldmask;
1469        set.sig[1] = sigctx._unused[3];
1470#endif
1471        set_current_blocked(&set);
1472
1473#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1474        mcp = (struct mcontext __user *)&sf->mctx;
1475        tm_mcp = (struct mcontext __user *)&sf->mctx_transact;
1476        if (__get_user(msr_hi, &tm_mcp->mc_gregs[PT_MSR]))
1477                goto badframe;
1478        if (MSR_TM_ACTIVE(msr_hi<<32)) {
1479                if (!cpu_has_feature(CPU_FTR_TM))
1480                        goto badframe;
1481                if (restore_tm_user_regs(regs, mcp, tm_mcp))
1482                        goto badframe;
1483        } else
1484#endif
1485        {
1486                sr = (struct mcontext __user *)from_user_ptr(sigctx.regs);
1487                addr = sr;
1488                if (!access_ok(sr, sizeof(*sr))
1489                    || restore_user_regs(regs, sr, 1))
1490                        goto badframe;
1491        }
1492
1493        set_thread_flag(TIF_RESTOREALL);
1494        return 0;
1495
1496badframe:
1497        if (show_unhandled_signals)
1498                printk_ratelimited(KERN_INFO
1499                                   "%s[%d]: bad frame in sys_sigreturn: "
1500                                   "%p nip %08lx lr %08lx\n",
1501                                   current->comm, current->pid,
1502                                   addr, regs->nip, regs->link);
1503
1504        force_sig(SIGSEGV, current);
1505        return 0;
1506}
1507