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