1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * PowerPC version 4 * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) 5 * 6 * Derived from "arch/i386/kernel/signal.c" 7 * Copyright (C) 1991, 1992 Linus Torvalds 8 * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson 9 */ 10 11 #include <linux/sched.h> 12 #include <linux/mm.h> 13 #include <linux/smp.h> 14 #include <linux/kernel.h> 15 #include <linux/signal.h> 16 #include <linux/errno.h> 17 #include <linux/wait.h> 18 #include <linux/unistd.h> 19 #include <linux/stddef.h> 20 #include <linux/elf.h> 21 #include <linux/ptrace.h> 22 #include <linux/ratelimit.h> 23 #include <linux/syscalls.h> 24 #include <linux/pagemap.h> 25 26 #include <asm/sigcontext.h> 27 #include <asm/ucontext.h> 28 #include <linux/uaccess.h> 29 #include <asm/unistd.h> 30 #include <asm/cacheflush.h> 31 #include <asm/syscalls.h> 32 #include <asm/vdso.h> 33 #include <asm/switch_to.h> 34 #include <asm/tm.h> 35 #include <asm/asm-prototypes.h> 36 37 #include "signal.h" 38 39 40 #define GP_REGS_SIZE min(sizeof(elf_gregset_t), sizeof(struct pt_regs)) 41 #define FP_REGS_SIZE sizeof(elf_fpregset_t) 42 43 #define TRAMP_TRACEBACK 4 44 #define TRAMP_SIZE 7 45 46 /* 47 * When we have signals to deliver, we set up on the user stack, 48 * going down from the original stack pointer: 49 * 1) a rt_sigframe struct which contains the ucontext 50 * 2) a gap of __SIGNAL_FRAMESIZE bytes which acts as a dummy caller 51 * frame for the signal handler. 52 */ 53 54 struct rt_sigframe { 55 /* sys_rt_sigreturn requires the ucontext be the first field */ 56 struct ucontext uc; 57 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM 58 struct ucontext uc_transact; 59 #endif 60 unsigned long _unused[2]; 61 unsigned int tramp[TRAMP_SIZE]; 62 struct siginfo __user *pinfo; 63 void __user *puc; 64 struct siginfo info; 65 /* New 64 bit little-endian ABI allows redzone of 512 bytes below sp */ 66 char abigap[USER_REDZONE_SIZE]; 67 } __attribute__ ((aligned (16))); 68 69 /* 70 * This computes a quad word aligned pointer inside the vmx_reserve array 71 * element. For historical reasons sigcontext might not be quad word aligned, 72 * but the location we write the VMX regs to must be. See the comment in 73 * sigcontext for more detail. 74 */ 75 #ifdef CONFIG_ALTIVEC 76 static elf_vrreg_t __user *sigcontext_vmx_regs(struct sigcontext __user *sc) 77 { 78 return (elf_vrreg_t __user *) (((unsigned long)sc->vmx_reserve + 15) & ~0xful); 79 } 80 #endif 81 82 /* 83 * Set up the sigcontext for the signal frame. 84 */ 85 86 static long setup_sigcontext(struct sigcontext __user *sc, 87 struct task_struct *tsk, int signr, sigset_t *set, 88 unsigned long handler, int ctx_has_vsx_region) 89 { 90 /* When CONFIG_ALTIVEC is set, we _always_ setup v_regs even if the 91 * process never used altivec yet (MSR_VEC is zero in pt_regs of 92 * the context). This is very important because we must ensure we 93 * don't lose the VRSAVE content that may have been set prior to 94 * the process doing its first vector operation 95 * Userland shall check AT_HWCAP to know whether it can rely on the 96 * v_regs pointer or not 97 */ 98 #ifdef CONFIG_ALTIVEC 99 elf_vrreg_t __user *v_regs = sigcontext_vmx_regs(sc); 100 unsigned long vrsave; 101 #endif 102 struct pt_regs *regs = tsk->thread.regs; 103 unsigned long msr = regs->msr; 104 long err = 0; 105 /* Force usr to alway see softe as 1 (interrupts enabled) */ 106 unsigned long softe = 0x1; 107 108 BUG_ON(tsk != current); 109 110 #ifdef CONFIG_ALTIVEC 111 err |= __put_user(v_regs, &sc->v_regs); 112 113 /* save altivec registers */ 114 if (tsk->thread.used_vr) { 115 flush_altivec_to_thread(tsk); 116 /* Copy 33 vec registers (vr0..31 and vscr) to the stack */ 117 err |= __copy_to_user(v_regs, &tsk->thread.vr_state, 118 33 * sizeof(vector128)); 119 /* set MSR_VEC in the MSR value in the frame to indicate that sc->v_reg) 120 * contains valid data. 121 */ 122 msr |= MSR_VEC; 123 } 124 /* We always copy to/from vrsave, it's 0 if we don't have or don't 125 * use altivec. 126 */ 127 vrsave = 0; 128 if (cpu_has_feature(CPU_FTR_ALTIVEC)) { 129 vrsave = mfspr(SPRN_VRSAVE); 130 tsk->thread.vrsave = vrsave; 131 } 132 133 err |= __put_user(vrsave, (u32 __user *)&v_regs[33]); 134 #else /* CONFIG_ALTIVEC */ 135 err |= __put_user(0, &sc->v_regs); 136 #endif /* CONFIG_ALTIVEC */ 137 flush_fp_to_thread(tsk); 138 /* copy fpr regs and fpscr */ 139 err |= copy_fpr_to_user(&sc->fp_regs, tsk); 140 141 /* 142 * Clear the MSR VSX bit to indicate there is no valid state attached 143 * to this context, except in the specific case below where we set it. 144 */ 145 msr &= ~MSR_VSX; 146 #ifdef CONFIG_VSX 147 /* 148 * Copy VSX low doubleword to local buffer for formatting, 149 * then out to userspace. Update v_regs to point after the 150 * VMX data. 151 */ 152 if (tsk->thread.used_vsr && ctx_has_vsx_region) { 153 flush_vsx_to_thread(tsk); 154 v_regs += ELF_NVRREG; 155 err |= copy_vsx_to_user(v_regs, tsk); 156 /* set MSR_VSX in the MSR value in the frame to 157 * indicate that sc->vs_reg) contains valid data. 158 */ 159 msr |= MSR_VSX; 160 } 161 #endif /* CONFIG_VSX */ 162 err |= __put_user(&sc->gp_regs, &sc->regs); 163 WARN_ON(!FULL_REGS(regs)); 164 err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE); 165 err |= __put_user(msr, &sc->gp_regs[PT_MSR]); 166 err |= __put_user(softe, &sc->gp_regs[PT_SOFTE]); 167 err |= __put_user(signr, &sc->signal); 168 err |= __put_user(handler, &sc->handler); 169 if (set != NULL) 170 err |= __put_user(set->sig[0], &sc->oldmask); 171 172 return err; 173 } 174 175 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM 176 /* 177 * As above, but Transactional Memory is in use, so deliver sigcontexts 178 * containing checkpointed and transactional register states. 179 * 180 * To do this, we treclaim (done before entering here) to gather both sets of 181 * registers and set up the 'normal' sigcontext registers with rolled-back 182 * register values such that a simple signal handler sees a correct 183 * checkpointed register state. If interested, a TM-aware sighandler can 184 * examine the transactional registers in the 2nd sigcontext to determine the 185 * real origin of the signal. 186 */ 187 static long setup_tm_sigcontexts(struct sigcontext __user *sc, 188 struct sigcontext __user *tm_sc, 189 struct task_struct *tsk, 190 int signr, sigset_t *set, unsigned long handler, 191 unsigned long msr) 192 { 193 /* When CONFIG_ALTIVEC is set, we _always_ setup v_regs even if the 194 * process never used altivec yet (MSR_VEC is zero in pt_regs of 195 * the context). This is very important because we must ensure we 196 * don't lose the VRSAVE content that may have been set prior to 197 * the process doing its first vector operation 198 * Userland shall check AT_HWCAP to know wether it can rely on the 199 * v_regs pointer or not. 200 */ 201 #ifdef CONFIG_ALTIVEC 202 elf_vrreg_t __user *v_regs = sigcontext_vmx_regs(sc); 203 elf_vrreg_t __user *tm_v_regs = sigcontext_vmx_regs(tm_sc); 204 #endif 205 struct pt_regs *regs = tsk->thread.regs; 206 long err = 0; 207 208 BUG_ON(tsk != current); 209 210 BUG_ON(!MSR_TM_ACTIVE(msr)); 211 212 WARN_ON(tm_suspend_disabled); 213 214 /* Restore checkpointed FP, VEC, and VSX bits from ckpt_regs as 215 * it contains the correct FP, VEC, VSX state after we treclaimed 216 * the transaction and giveup_all() was called on reclaiming. 217 */ 218 msr |= tsk->thread.ckpt_regs.msr & (MSR_FP | MSR_VEC | MSR_VSX); 219 220 #ifdef CONFIG_ALTIVEC 221 err |= __put_user(v_regs, &sc->v_regs); 222 err |= __put_user(tm_v_regs, &tm_sc->v_regs); 223 224 /* save altivec registers */ 225 if (tsk->thread.used_vr) { 226 /* Copy 33 vec registers (vr0..31 and vscr) to the stack */ 227 err |= __copy_to_user(v_regs, &tsk->thread.ckvr_state, 228 33 * sizeof(vector128)); 229 /* If VEC was enabled there are transactional VRs valid too, 230 * else they're a copy of the checkpointed VRs. 231 */ 232 if (msr & MSR_VEC) 233 err |= __copy_to_user(tm_v_regs, 234 &tsk->thread.vr_state, 235 33 * sizeof(vector128)); 236 else 237 err |= __copy_to_user(tm_v_regs, 238 &tsk->thread.ckvr_state, 239 33 * sizeof(vector128)); 240 241 /* set MSR_VEC in the MSR value in the frame to indicate 242 * that sc->v_reg contains valid data. 243 */ 244 msr |= MSR_VEC; 245 } 246 /* We always copy to/from vrsave, it's 0 if we don't have or don't 247 * use altivec. 248 */ 249 if (cpu_has_feature(CPU_FTR_ALTIVEC)) 250 tsk->thread.ckvrsave = mfspr(SPRN_VRSAVE); 251 err |= __put_user(tsk->thread.ckvrsave, (u32 __user *)&v_regs[33]); 252 if (msr & MSR_VEC) 253 err |= __put_user(tsk->thread.vrsave, 254 (u32 __user *)&tm_v_regs[33]); 255 else 256 err |= __put_user(tsk->thread.ckvrsave, 257 (u32 __user *)&tm_v_regs[33]); 258 259 #else /* CONFIG_ALTIVEC */ 260 err |= __put_user(0, &sc->v_regs); 261 err |= __put_user(0, &tm_sc->v_regs); 262 #endif /* CONFIG_ALTIVEC */ 263 264 /* copy fpr regs and fpscr */ 265 err |= copy_ckfpr_to_user(&sc->fp_regs, tsk); 266 if (msr & MSR_FP) 267 err |= copy_fpr_to_user(&tm_sc->fp_regs, tsk); 268 else 269 err |= copy_ckfpr_to_user(&tm_sc->fp_regs, tsk); 270 271 #ifdef CONFIG_VSX 272 /* 273 * Copy VSX low doubleword to local buffer for formatting, 274 * then out to userspace. Update v_regs to point after the 275 * VMX data. 276 */ 277 if (tsk->thread.used_vsr) { 278 v_regs += ELF_NVRREG; 279 tm_v_regs += ELF_NVRREG; 280 281 err |= copy_ckvsx_to_user(v_regs, tsk); 282 283 if (msr & MSR_VSX) 284 err |= copy_vsx_to_user(tm_v_regs, tsk); 285 else 286 err |= copy_ckvsx_to_user(tm_v_regs, tsk); 287 288 /* set MSR_VSX in the MSR value in the frame to 289 * indicate that sc->vs_reg) contains valid data. 290 */ 291 msr |= MSR_VSX; 292 } 293 #endif /* CONFIG_VSX */ 294 295 err |= __put_user(&sc->gp_regs, &sc->regs); 296 err |= __put_user(&tm_sc->gp_regs, &tm_sc->regs); 297 WARN_ON(!FULL_REGS(regs)); 298 err |= __copy_to_user(&tm_sc->gp_regs, regs, GP_REGS_SIZE); 299 err |= __copy_to_user(&sc->gp_regs, 300 &tsk->thread.ckpt_regs, GP_REGS_SIZE); 301 err |= __put_user(msr, &tm_sc->gp_regs[PT_MSR]); 302 err |= __put_user(msr, &sc->gp_regs[PT_MSR]); 303 err |= __put_user(signr, &sc->signal); 304 err |= __put_user(handler, &sc->handler); 305 if (set != NULL) 306 err |= __put_user(set->sig[0], &sc->oldmask); 307 308 return err; 309 } 310 #endif 311 312 /* 313 * Restore the sigcontext from the signal frame. 314 */ 315 316 static long restore_sigcontext(struct task_struct *tsk, sigset_t *set, int sig, 317 struct sigcontext __user *sc) 318 { 319 #ifdef CONFIG_ALTIVEC 320 elf_vrreg_t __user *v_regs; 321 #endif 322 unsigned long err = 0; 323 unsigned long save_r13 = 0; 324 unsigned long msr; 325 struct pt_regs *regs = tsk->thread.regs; 326 #ifdef CONFIG_VSX 327 int i; 328 #endif 329 330 BUG_ON(tsk != current); 331 332 /* If this is not a signal return, we preserve the TLS in r13 */ 333 if (!sig) 334 save_r13 = regs->gpr[13]; 335 336 /* copy the GPRs */ 337 err |= __copy_from_user(regs->gpr, sc->gp_regs, sizeof(regs->gpr)); 338 err |= __get_user(regs->nip, &sc->gp_regs[PT_NIP]); 339 /* get MSR separately, transfer the LE bit if doing signal return */ 340 err |= __get_user(msr, &sc->gp_regs[PT_MSR]); 341 if (sig) 342 regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE); 343 err |= __get_user(regs->orig_gpr3, &sc->gp_regs[PT_ORIG_R3]); 344 err |= __get_user(regs->ctr, &sc->gp_regs[PT_CTR]); 345 err |= __get_user(regs->link, &sc->gp_regs[PT_LNK]); 346 err |= __get_user(regs->xer, &sc->gp_regs[PT_XER]); 347 err |= __get_user(regs->ccr, &sc->gp_regs[PT_CCR]); 348 /* Don't allow userspace to set SOFTE */ 349 set_trap_norestart(regs); 350 err |= __get_user(regs->dar, &sc->gp_regs[PT_DAR]); 351 err |= __get_user(regs->dsisr, &sc->gp_regs[PT_DSISR]); 352 err |= __get_user(regs->result, &sc->gp_regs[PT_RESULT]); 353 354 if (!sig) 355 regs->gpr[13] = save_r13; 356 if (set != NULL) 357 err |= __get_user(set->sig[0], &sc->oldmask); 358 359 /* 360 * Force reload of FP/VEC. 361 * This has to be done before copying stuff into tsk->thread.fpr/vr 362 * for the reasons explained in the previous comment. 363 */ 364 regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC | MSR_VSX); 365 366 #ifdef CONFIG_ALTIVEC 367 err |= __get_user(v_regs, &sc->v_regs); 368 if (err) 369 return err; 370 if (v_regs && !access_ok(v_regs, 34 * sizeof(vector128))) 371 return -EFAULT; 372 /* Copy 33 vec registers (vr0..31 and vscr) from the stack */ 373 if (v_regs != NULL && (msr & MSR_VEC) != 0) { 374 err |= __copy_from_user(&tsk->thread.vr_state, v_regs, 375 33 * sizeof(vector128)); 376 tsk->thread.used_vr = true; 377 } else if (tsk->thread.used_vr) { 378 memset(&tsk->thread.vr_state, 0, 33 * sizeof(vector128)); 379 } 380 /* Always get VRSAVE back */ 381 if (v_regs != NULL) 382 err |= __get_user(tsk->thread.vrsave, (u32 __user *)&v_regs[33]); 383 else 384 tsk->thread.vrsave = 0; 385 if (cpu_has_feature(CPU_FTR_ALTIVEC)) 386 mtspr(SPRN_VRSAVE, tsk->thread.vrsave); 387 #endif /* CONFIG_ALTIVEC */ 388 /* restore floating point */ 389 err |= copy_fpr_from_user(tsk, &sc->fp_regs); 390 #ifdef CONFIG_VSX 391 /* 392 * Get additional VSX data. Update v_regs to point after the 393 * VMX data. Copy VSX low doubleword from userspace to local 394 * buffer for formatting, then into the taskstruct. 395 */ 396 v_regs += ELF_NVRREG; 397 if ((msr & MSR_VSX) != 0) { 398 err |= copy_vsx_from_user(tsk, v_regs); 399 tsk->thread.used_vsr = true; 400 } else { 401 for (i = 0; i < 32 ; i++) 402 tsk->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = 0; 403 } 404 #endif 405 return err; 406 } 407 408 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM 409 /* 410 * Restore the two sigcontexts from the frame of a transactional processes. 411 */ 412 413 static long restore_tm_sigcontexts(struct task_struct *tsk, 414 struct sigcontext __user *sc, 415 struct sigcontext __user *tm_sc) 416 { 417 #ifdef CONFIG_ALTIVEC 418 elf_vrreg_t __user *v_regs, *tm_v_regs; 419 #endif 420 unsigned long err = 0; 421 unsigned long msr; 422 struct pt_regs *regs = tsk->thread.regs; 423 #ifdef CONFIG_VSX 424 int i; 425 #endif 426 427 BUG_ON(tsk != current); 428 429 if (tm_suspend_disabled) 430 return -EINVAL; 431 432 /* copy the GPRs */ 433 err |= __copy_from_user(regs->gpr, tm_sc->gp_regs, sizeof(regs->gpr)); 434 err |= __copy_from_user(&tsk->thread.ckpt_regs, sc->gp_regs, 435 sizeof(regs->gpr)); 436 437 /* 438 * TFHAR is restored from the checkpointed 'wound-back' ucontext's NIP. 439 * TEXASR was set by the signal delivery reclaim, as was TFIAR. 440 * Users doing anything abhorrent like thread-switching w/ signals for 441 * TM-Suspended code will have to back TEXASR/TFIAR up themselves. 442 * For the case of getting a signal and simply returning from it, 443 * we don't need to re-copy them here. 444 */ 445 err |= __get_user(regs->nip, &tm_sc->gp_regs[PT_NIP]); 446 err |= __get_user(tsk->thread.tm_tfhar, &sc->gp_regs[PT_NIP]); 447 448 /* get MSR separately, transfer the LE bit if doing signal return */ 449 err |= __get_user(msr, &sc->gp_regs[PT_MSR]); 450 /* Don't allow reserved mode. */ 451 if (MSR_TM_RESV(msr)) 452 return -EINVAL; 453 454 /* pull in MSR LE from user context */ 455 regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE); 456 457 /* The following non-GPR non-FPR non-VR state is also checkpointed: */ 458 err |= __get_user(regs->ctr, &tm_sc->gp_regs[PT_CTR]); 459 err |= __get_user(regs->link, &tm_sc->gp_regs[PT_LNK]); 460 err |= __get_user(regs->xer, &tm_sc->gp_regs[PT_XER]); 461 err |= __get_user(regs->ccr, &tm_sc->gp_regs[PT_CCR]); 462 err |= __get_user(tsk->thread.ckpt_regs.ctr, 463 &sc->gp_regs[PT_CTR]); 464 err |= __get_user(tsk->thread.ckpt_regs.link, 465 &sc->gp_regs[PT_LNK]); 466 err |= __get_user(tsk->thread.ckpt_regs.xer, 467 &sc->gp_regs[PT_XER]); 468 err |= __get_user(tsk->thread.ckpt_regs.ccr, 469 &sc->gp_regs[PT_CCR]); 470 /* Don't allow userspace to set SOFTE */ 471 set_trap_norestart(regs); 472 /* These regs are not checkpointed; they can go in 'regs'. */ 473 err |= __get_user(regs->dar, &sc->gp_regs[PT_DAR]); 474 err |= __get_user(regs->dsisr, &sc->gp_regs[PT_DSISR]); 475 err |= __get_user(regs->result, &sc->gp_regs[PT_RESULT]); 476 477 /* 478 * Force reload of FP/VEC. 479 * This has to be done before copying stuff into tsk->thread.fpr/vr 480 * for the reasons explained in the previous comment. 481 */ 482 regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC | MSR_VSX); 483 484 #ifdef CONFIG_ALTIVEC 485 err |= __get_user(v_regs, &sc->v_regs); 486 err |= __get_user(tm_v_regs, &tm_sc->v_regs); 487 if (err) 488 return err; 489 if (v_regs && !access_ok(v_regs, 34 * sizeof(vector128))) 490 return -EFAULT; 491 if (tm_v_regs && !access_ok(tm_v_regs, 34 * sizeof(vector128))) 492 return -EFAULT; 493 /* Copy 33 vec registers (vr0..31 and vscr) from the stack */ 494 if (v_regs != NULL && tm_v_regs != NULL && (msr & MSR_VEC) != 0) { 495 err |= __copy_from_user(&tsk->thread.ckvr_state, v_regs, 496 33 * sizeof(vector128)); 497 err |= __copy_from_user(&tsk->thread.vr_state, tm_v_regs, 498 33 * sizeof(vector128)); 499 current->thread.used_vr = true; 500 } 501 else if (tsk->thread.used_vr) { 502 memset(&tsk->thread.vr_state, 0, 33 * sizeof(vector128)); 503 memset(&tsk->thread.ckvr_state, 0, 33 * sizeof(vector128)); 504 } 505 /* Always get VRSAVE back */ 506 if (v_regs != NULL && tm_v_regs != NULL) { 507 err |= __get_user(tsk->thread.ckvrsave, 508 (u32 __user *)&v_regs[33]); 509 err |= __get_user(tsk->thread.vrsave, 510 (u32 __user *)&tm_v_regs[33]); 511 } 512 else { 513 tsk->thread.vrsave = 0; 514 tsk->thread.ckvrsave = 0; 515 } 516 if (cpu_has_feature(CPU_FTR_ALTIVEC)) 517 mtspr(SPRN_VRSAVE, tsk->thread.vrsave); 518 #endif /* CONFIG_ALTIVEC */ 519 /* restore floating point */ 520 err |= copy_fpr_from_user(tsk, &tm_sc->fp_regs); 521 err |= copy_ckfpr_from_user(tsk, &sc->fp_regs); 522 #ifdef CONFIG_VSX 523 /* 524 * Get additional VSX data. Update v_regs to point after the 525 * VMX data. Copy VSX low doubleword from userspace to local 526 * buffer for formatting, then into the taskstruct. 527 */ 528 if (v_regs && ((msr & MSR_VSX) != 0)) { 529 v_regs += ELF_NVRREG; 530 tm_v_regs += ELF_NVRREG; 531 err |= copy_vsx_from_user(tsk, tm_v_regs); 532 err |= copy_ckvsx_from_user(tsk, v_regs); 533 tsk->thread.used_vsr = true; 534 } else { 535 for (i = 0; i < 32 ; i++) { 536 tsk->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = 0; 537 tsk->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = 0; 538 } 539 } 540 #endif 541 tm_enable(); 542 /* Make sure the transaction is marked as failed */ 543 tsk->thread.tm_texasr |= TEXASR_FS; 544 545 /* 546 * Disabling preemption, since it is unsafe to be preempted 547 * with MSR[TS] set without recheckpointing. 548 */ 549 preempt_disable(); 550 551 /* pull in MSR TS bits from user context */ 552 regs->msr |= msr & MSR_TS_MASK; 553 554 /* 555 * Ensure that TM is enabled in regs->msr before we leave the signal 556 * handler. It could be the case that (a) user disabled the TM bit 557 * through the manipulation of the MSR bits in uc_mcontext or (b) the 558 * TM bit was disabled because a sufficient number of context switches 559 * happened whilst in the signal handler and load_tm overflowed, 560 * disabling the TM bit. In either case we can end up with an illegal 561 * TM state leading to a TM Bad Thing when we return to userspace. 562 * 563 * CAUTION: 564 * After regs->MSR[TS] being updated, make sure that get_user(), 565 * put_user() or similar functions are *not* called. These 566 * functions can generate page faults which will cause the process 567 * to be de-scheduled with MSR[TS] set but without calling 568 * tm_recheckpoint(). This can cause a bug. 569 */ 570 regs->msr |= MSR_TM; 571 572 /* This loads the checkpointed FP/VEC state, if used */ 573 tm_recheckpoint(&tsk->thread); 574 575 msr_check_and_set(msr & (MSR_FP | MSR_VEC)); 576 if (msr & MSR_FP) { 577 load_fp_state(&tsk->thread.fp_state); 578 regs->msr |= (MSR_FP | tsk->thread.fpexc_mode); 579 } 580 if (msr & MSR_VEC) { 581 load_vr_state(&tsk->thread.vr_state); 582 regs->msr |= MSR_VEC; 583 } 584 585 preempt_enable(); 586 587 return err; 588 } 589 #endif 590 591 /* 592 * Setup the trampoline code on the stack 593 */ 594 static long setup_trampoline(unsigned int syscall, unsigned int __user *tramp) 595 { 596 int i; 597 long err = 0; 598 599 /* bctrl # call the handler */ 600 err |= __put_user(PPC_INST_BCTRL, &tramp[0]); 601 /* addi r1, r1, __SIGNAL_FRAMESIZE # Pop the dummy stackframe */ 602 err |= __put_user(PPC_INST_ADDI | __PPC_RT(R1) | __PPC_RA(R1) | 603 (__SIGNAL_FRAMESIZE & 0xffff), &tramp[1]); 604 /* li r0, __NR_[rt_]sigreturn| */ 605 err |= __put_user(PPC_INST_ADDI | (syscall & 0xffff), &tramp[2]); 606 /* sc */ 607 err |= __put_user(PPC_INST_SC, &tramp[3]); 608 609 /* Minimal traceback info */ 610 for (i=TRAMP_TRACEBACK; i < TRAMP_SIZE ;i++) 611 err |= __put_user(0, &tramp[i]); 612 613 if (!err) 614 flush_icache_range((unsigned long) &tramp[0], 615 (unsigned long) &tramp[TRAMP_SIZE]); 616 617 return err; 618 } 619 620 /* 621 * Userspace code may pass a ucontext which doesn't include VSX added 622 * at the end. We need to check for this case. 623 */ 624 #define UCONTEXTSIZEWITHOUTVSX \ 625 (sizeof(struct ucontext) - 32*sizeof(long)) 626 627 /* 628 * Handle {get,set,swap}_context operations 629 */ 630 SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx, 631 struct ucontext __user *, new_ctx, long, ctx_size) 632 { 633 sigset_t set; 634 unsigned long new_msr = 0; 635 int ctx_has_vsx_region = 0; 636 637 if (new_ctx && 638 get_user(new_msr, &new_ctx->uc_mcontext.gp_regs[PT_MSR])) 639 return -EFAULT; 640 /* 641 * Check that the context is not smaller than the original 642 * size (with VMX but without VSX) 643 */ 644 if (ctx_size < UCONTEXTSIZEWITHOUTVSX) 645 return -EINVAL; 646 /* 647 * If the new context state sets the MSR VSX bits but 648 * it doesn't provide VSX state. 649 */ 650 if ((ctx_size < sizeof(struct ucontext)) && 651 (new_msr & MSR_VSX)) 652 return -EINVAL; 653 /* Does the context have enough room to store VSX data? */ 654 if (ctx_size >= sizeof(struct ucontext)) 655 ctx_has_vsx_region = 1; 656 657 if (old_ctx != NULL) { 658 if (!access_ok(old_ctx, ctx_size) 659 || setup_sigcontext(&old_ctx->uc_mcontext, current, 0, NULL, 0, 660 ctx_has_vsx_region) 661 || __copy_to_user(&old_ctx->uc_sigmask, 662 ¤t->blocked, sizeof(sigset_t))) 663 return -EFAULT; 664 } 665 if (new_ctx == NULL) 666 return 0; 667 if (!access_ok(new_ctx, ctx_size) || 668 fault_in_pages_readable((u8 __user *)new_ctx, ctx_size)) 669 return -EFAULT; 670 671 /* 672 * If we get a fault copying the context into the kernel's 673 * image of the user's registers, we can't just return -EFAULT 674 * because the user's registers will be corrupted. For instance 675 * the NIP value may have been updated but not some of the 676 * other registers. Given that we have done the access_ok 677 * and successfully read the first and last bytes of the region 678 * above, this should only happen in an out-of-memory situation 679 * or if another thread unmaps the region containing the context. 680 * We kill the task with a SIGSEGV in this situation. 681 */ 682 683 if (__copy_from_user(&set, &new_ctx->uc_sigmask, sizeof(set))) 684 do_exit(SIGSEGV); 685 set_current_blocked(&set); 686 if (restore_sigcontext(current, NULL, 0, &new_ctx->uc_mcontext)) 687 do_exit(SIGSEGV); 688 689 /* This returns like rt_sigreturn */ 690 set_thread_flag(TIF_RESTOREALL); 691 return 0; 692 } 693 694 695 /* 696 * Do a signal return; undo the signal stack. 697 */ 698 699 SYSCALL_DEFINE0(rt_sigreturn) 700 { 701 struct pt_regs *regs = current_pt_regs(); 702 struct ucontext __user *uc = (struct ucontext __user *)regs->gpr[1]; 703 sigset_t set; 704 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM 705 unsigned long msr; 706 #endif 707 708 /* Always make any pending restarted system calls return -EINTR */ 709 current->restart_block.fn = do_no_restart_syscall; 710 711 if (!access_ok(uc, sizeof(*uc))) 712 goto badframe; 713 714 if (__copy_from_user(&set, &uc->uc_sigmask, sizeof(set))) 715 goto badframe; 716 set_current_blocked(&set); 717 718 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM 719 /* 720 * If there is a transactional state then throw it away. 721 * The purpose of a sigreturn is to destroy all traces of the 722 * signal frame, this includes any transactional state created 723 * within in. We only check for suspended as we can never be 724 * active in the kernel, we are active, there is nothing better to 725 * do than go ahead and Bad Thing later. 726 * The cause is not important as there will never be a 727 * recheckpoint so it's not user visible. 728 */ 729 if (MSR_TM_SUSPENDED(mfmsr())) 730 tm_reclaim_current(0); 731 732 /* 733 * Disable MSR[TS] bit also, so, if there is an exception in the 734 * code below (as a page fault in copy_ckvsx_to_user()), it does 735 * not recheckpoint this task if there was a context switch inside 736 * the exception. 737 * 738 * A major page fault can indirectly call schedule(). A reschedule 739 * process in the middle of an exception can have a side effect 740 * (Changing the CPU MSR[TS] state), since schedule() is called 741 * with the CPU MSR[TS] disable and returns with MSR[TS]=Suspended 742 * (switch_to() calls tm_recheckpoint() for the 'new' process). In 743 * this case, the process continues to be the same in the CPU, but 744 * the CPU state just changed. 745 * 746 * This can cause a TM Bad Thing, since the MSR in the stack will 747 * have the MSR[TS]=0, and this is what will be used to RFID. 748 * 749 * Clearing MSR[TS] state here will avoid a recheckpoint if there 750 * is any process reschedule in kernel space. The MSR[TS] state 751 * does not need to be saved also, since it will be replaced with 752 * the MSR[TS] that came from user context later, at 753 * restore_tm_sigcontexts. 754 */ 755 regs->msr &= ~MSR_TS_MASK; 756 757 if (__get_user(msr, &uc->uc_mcontext.gp_regs[PT_MSR])) 758 goto badframe; 759 if (MSR_TM_ACTIVE(msr)) { 760 /* We recheckpoint on return. */ 761 struct ucontext __user *uc_transact; 762 763 /* Trying to start TM on non TM system */ 764 if (!cpu_has_feature(CPU_FTR_TM)) 765 goto badframe; 766 767 if (__get_user(uc_transact, &uc->uc_link)) 768 goto badframe; 769 if (restore_tm_sigcontexts(current, &uc->uc_mcontext, 770 &uc_transact->uc_mcontext)) 771 goto badframe; 772 } else 773 #endif 774 { 775 /* 776 * Fall through, for non-TM restore 777 * 778 * Unset MSR[TS] on the thread regs since MSR from user 779 * context does not have MSR active, and recheckpoint was 780 * not called since restore_tm_sigcontexts() was not called 781 * also. 782 * 783 * If not unsetting it, the code can RFID to userspace with 784 * MSR[TS] set, but without CPU in the proper state, 785 * causing a TM bad thing. 786 */ 787 current->thread.regs->msr &= ~MSR_TS_MASK; 788 if (restore_sigcontext(current, NULL, 1, &uc->uc_mcontext)) 789 goto badframe; 790 } 791 792 if (restore_altstack(&uc->uc_stack)) 793 goto badframe; 794 795 set_thread_flag(TIF_RESTOREALL); 796 return 0; 797 798 badframe: 799 signal_fault(current, regs, "rt_sigreturn", uc); 800 801 force_sig(SIGSEGV); 802 return 0; 803 } 804 805 int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, 806 struct task_struct *tsk) 807 { 808 struct rt_sigframe __user *frame; 809 unsigned long newsp = 0; 810 long err = 0; 811 struct pt_regs *regs = tsk->thread.regs; 812 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM 813 /* Save the thread's msr before get_tm_stackpointer() changes it */ 814 unsigned long msr = regs->msr; 815 #endif 816 817 frame = get_sigframe(ksig, tsk, sizeof(*frame), 0); 818 if (!access_ok(frame, sizeof(*frame))) 819 goto badframe; 820 821 err |= __put_user(&frame->info, &frame->pinfo); 822 err |= __put_user(&frame->uc, &frame->puc); 823 err |= copy_siginfo_to_user(&frame->info, &ksig->info); 824 if (err) 825 goto badframe; 826 827 /* Create the ucontext. */ 828 err |= __put_user(0, &frame->uc.uc_flags); 829 err |= __save_altstack(&frame->uc.uc_stack, regs->gpr[1]); 830 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM 831 if (MSR_TM_ACTIVE(msr)) { 832 /* The ucontext_t passed to userland points to the second 833 * ucontext_t (for transactional state) with its uc_link ptr. 834 */ 835 err |= __put_user(&frame->uc_transact, &frame->uc.uc_link); 836 err |= setup_tm_sigcontexts(&frame->uc.uc_mcontext, 837 &frame->uc_transact.uc_mcontext, 838 tsk, ksig->sig, NULL, 839 (unsigned long)ksig->ka.sa.sa_handler, 840 msr); 841 } else 842 #endif 843 { 844 err |= __put_user(0, &frame->uc.uc_link); 845 err |= setup_sigcontext(&frame->uc.uc_mcontext, tsk, ksig->sig, 846 NULL, (unsigned long)ksig->ka.sa.sa_handler, 847 1); 848 } 849 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); 850 if (err) 851 goto badframe; 852 853 /* Make sure signal handler doesn't get spurious FP exceptions */ 854 tsk->thread.fp_state.fpscr = 0; 855 856 /* Set up to return from userspace. */ 857 if (tsk->mm->context.vdso) { 858 regs->nip = VDSO64_SYMBOL(tsk->mm->context.vdso, sigtramp_rt64); 859 } else { 860 err |= setup_trampoline(__NR_rt_sigreturn, &frame->tramp[0]); 861 if (err) 862 goto badframe; 863 regs->nip = (unsigned long) &frame->tramp[0]; 864 } 865 866 /* Allocate a dummy caller frame for the signal handler. */ 867 newsp = ((unsigned long)frame) - __SIGNAL_FRAMESIZE; 868 err |= put_user(regs->gpr[1], (unsigned long __user *)newsp); 869 870 /* Set up "regs" so we "return" to the signal handler. */ 871 if (is_elf2_task()) { 872 regs->ctr = (unsigned long) ksig->ka.sa.sa_handler; 873 regs->gpr[12] = regs->ctr; 874 } else { 875 /* Handler is *really* a pointer to the function descriptor for 876 * the signal routine. The first entry in the function 877 * descriptor is the entry address of signal and the second 878 * entry is the TOC value we need to use. 879 */ 880 func_descr_t __user *funct_desc_ptr = 881 (func_descr_t __user *) ksig->ka.sa.sa_handler; 882 883 err |= get_user(regs->ctr, &funct_desc_ptr->entry); 884 err |= get_user(regs->gpr[2], &funct_desc_ptr->toc); 885 } 886 887 /* enter the signal handler in native-endian mode */ 888 regs->msr &= ~MSR_LE; 889 regs->msr |= (MSR_KERNEL & MSR_LE); 890 regs->gpr[1] = newsp; 891 regs->gpr[3] = ksig->sig; 892 regs->result = 0; 893 if (ksig->ka.sa.sa_flags & SA_SIGINFO) { 894 err |= get_user(regs->gpr[4], (unsigned long __user *)&frame->pinfo); 895 err |= get_user(regs->gpr[5], (unsigned long __user *)&frame->puc); 896 regs->gpr[6] = (unsigned long) frame; 897 } else { 898 regs->gpr[4] = (unsigned long)&frame->uc.uc_mcontext; 899 } 900 if (err) 901 goto badframe; 902 903 return 0; 904 905 badframe: 906 signal_fault(current, regs, "handle_rt_signal64", frame); 907 908 return 1; 909 } 910