1 /* 2 * Based on arch/arm/kernel/signal.c 3 * 4 * Copyright (C) 1995-2009 Russell King 5 * Copyright (C) 2012 ARM Ltd. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #include <linux/errno.h> 21 #include <linux/signal.h> 22 #include <linux/personality.h> 23 #include <linux/freezer.h> 24 #include <linux/uaccess.h> 25 #include <linux/tracehook.h> 26 #include <linux/ratelimit.h> 27 28 #include <asm/compat.h> 29 #include <asm/debug-monitors.h> 30 #include <asm/elf.h> 31 #include <asm/cacheflush.h> 32 #include <asm/ucontext.h> 33 #include <asm/unistd.h> 34 #include <asm/fpsimd.h> 35 #include <asm/signal32.h> 36 #include <asm/vdso.h> 37 38 /* 39 * Do a signal return; undo the signal stack. These are aligned to 128-bit. 40 */ 41 struct rt_sigframe { 42 struct siginfo info; 43 struct ucontext uc; 44 u64 fp; 45 u64 lr; 46 }; 47 48 static int preserve_fpsimd_context(struct fpsimd_context __user *ctx) 49 { 50 struct fpsimd_state *fpsimd = ¤t->thread.fpsimd_state; 51 int err; 52 53 /* dump the hardware registers to the fpsimd_state structure */ 54 fpsimd_save_state(fpsimd); 55 56 /* copy the FP and status/control registers */ 57 err = __copy_to_user(ctx->vregs, fpsimd->vregs, sizeof(fpsimd->vregs)); 58 __put_user_error(fpsimd->fpsr, &ctx->fpsr, err); 59 __put_user_error(fpsimd->fpcr, &ctx->fpcr, err); 60 61 /* copy the magic/size information */ 62 __put_user_error(FPSIMD_MAGIC, &ctx->head.magic, err); 63 __put_user_error(sizeof(struct fpsimd_context), &ctx->head.size, err); 64 65 return err ? -EFAULT : 0; 66 } 67 68 static int restore_fpsimd_context(struct fpsimd_context __user *ctx) 69 { 70 struct fpsimd_state fpsimd; 71 __u32 magic, size; 72 int err = 0; 73 74 /* check the magic/size information */ 75 __get_user_error(magic, &ctx->head.magic, err); 76 __get_user_error(size, &ctx->head.size, err); 77 if (err) 78 return -EFAULT; 79 if (magic != FPSIMD_MAGIC || size != sizeof(struct fpsimd_context)) 80 return -EINVAL; 81 82 /* copy the FP and status/control registers */ 83 err = __copy_from_user(fpsimd.vregs, ctx->vregs, 84 sizeof(fpsimd.vregs)); 85 __get_user_error(fpsimd.fpsr, &ctx->fpsr, err); 86 __get_user_error(fpsimd.fpcr, &ctx->fpcr, err); 87 88 /* load the hardware registers from the fpsimd_state structure */ 89 if (!err) { 90 preempt_disable(); 91 fpsimd_load_state(&fpsimd); 92 preempt_enable(); 93 } 94 95 return err ? -EFAULT : 0; 96 } 97 98 static int restore_sigframe(struct pt_regs *regs, 99 struct rt_sigframe __user *sf) 100 { 101 sigset_t set; 102 int i, err; 103 struct aux_context __user *aux = 104 (struct aux_context __user *)sf->uc.uc_mcontext.__reserved; 105 106 err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set)); 107 if (err == 0) 108 set_current_blocked(&set); 109 110 for (i = 0; i < 31; i++) 111 __get_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i], 112 err); 113 __get_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err); 114 __get_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err); 115 __get_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err); 116 117 /* 118 * Avoid sys_rt_sigreturn() restarting. 119 */ 120 regs->syscallno = ~0UL; 121 122 err |= !valid_user_regs(®s->user_regs); 123 124 if (err == 0) 125 err |= restore_fpsimd_context(&aux->fpsimd); 126 127 return err; 128 } 129 130 asmlinkage long sys_rt_sigreturn(struct pt_regs *regs) 131 { 132 struct rt_sigframe __user *frame; 133 134 /* Always make any pending restarted system calls return -EINTR */ 135 current_thread_info()->restart_block.fn = do_no_restart_syscall; 136 137 /* 138 * Since we stacked the signal on a 128-bit boundary, then 'sp' should 139 * be word aligned here. 140 */ 141 if (regs->sp & 15) 142 goto badframe; 143 144 frame = (struct rt_sigframe __user *)regs->sp; 145 146 if (!access_ok(VERIFY_READ, frame, sizeof (*frame))) 147 goto badframe; 148 149 if (restore_sigframe(regs, frame)) 150 goto badframe; 151 152 if (restore_altstack(&frame->uc.uc_stack)) 153 goto badframe; 154 155 return regs->regs[0]; 156 157 badframe: 158 if (show_unhandled_signals) 159 pr_info_ratelimited("%s[%d]: bad frame in %s: pc=%08llx sp=%08llx\n", 160 current->comm, task_pid_nr(current), __func__, 161 regs->pc, regs->sp); 162 force_sig(SIGSEGV, current); 163 return 0; 164 } 165 166 static int setup_sigframe(struct rt_sigframe __user *sf, 167 struct pt_regs *regs, sigset_t *set) 168 { 169 int i, err = 0; 170 struct aux_context __user *aux = 171 (struct aux_context __user *)sf->uc.uc_mcontext.__reserved; 172 173 /* set up the stack frame for unwinding */ 174 __put_user_error(regs->regs[29], &sf->fp, err); 175 __put_user_error(regs->regs[30], &sf->lr, err); 176 177 for (i = 0; i < 31; i++) 178 __put_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i], 179 err); 180 __put_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err); 181 __put_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err); 182 __put_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err); 183 184 __put_user_error(current->thread.fault_address, &sf->uc.uc_mcontext.fault_address, err); 185 186 err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(*set)); 187 188 if (err == 0) 189 err |= preserve_fpsimd_context(&aux->fpsimd); 190 191 /* set the "end" magic */ 192 __put_user_error(0, &aux->end.magic, err); 193 __put_user_error(0, &aux->end.size, err); 194 195 return err; 196 } 197 198 static struct rt_sigframe __user *get_sigframe(struct k_sigaction *ka, 199 struct pt_regs *regs) 200 { 201 unsigned long sp, sp_top; 202 struct rt_sigframe __user *frame; 203 204 sp = sp_top = regs->sp; 205 206 /* 207 * This is the X/Open sanctioned signal stack switching. 208 */ 209 if ((ka->sa.sa_flags & SA_ONSTACK) && !sas_ss_flags(sp)) 210 sp = sp_top = current->sas_ss_sp + current->sas_ss_size; 211 212 sp = (sp - sizeof(struct rt_sigframe)) & ~15; 213 frame = (struct rt_sigframe __user *)sp; 214 215 /* 216 * Check that we can actually write to the signal frame. 217 */ 218 if (!access_ok(VERIFY_WRITE, frame, sp_top - sp)) 219 frame = NULL; 220 221 return frame; 222 } 223 224 static void setup_return(struct pt_regs *regs, struct k_sigaction *ka, 225 void __user *frame, int usig) 226 { 227 __sigrestore_t sigtramp; 228 229 regs->regs[0] = usig; 230 regs->sp = (unsigned long)frame; 231 regs->regs[29] = regs->sp + offsetof(struct rt_sigframe, fp); 232 regs->pc = (unsigned long)ka->sa.sa_handler; 233 234 if (ka->sa.sa_flags & SA_RESTORER) 235 sigtramp = ka->sa.sa_restorer; 236 else 237 sigtramp = VDSO_SYMBOL(current->mm->context.vdso, sigtramp); 238 239 regs->regs[30] = (unsigned long)sigtramp; 240 } 241 242 static int setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, 243 sigset_t *set, struct pt_regs *regs) 244 { 245 struct rt_sigframe __user *frame; 246 int err = 0; 247 248 frame = get_sigframe(ka, regs); 249 if (!frame) 250 return 1; 251 252 __put_user_error(0, &frame->uc.uc_flags, err); 253 __put_user_error(NULL, &frame->uc.uc_link, err); 254 255 err |= __save_altstack(&frame->uc.uc_stack, regs->sp); 256 err |= setup_sigframe(frame, regs, set); 257 if (err == 0) { 258 setup_return(regs, ka, frame, usig); 259 if (ka->sa.sa_flags & SA_SIGINFO) { 260 err |= copy_siginfo_to_user(&frame->info, info); 261 regs->regs[1] = (unsigned long)&frame->info; 262 regs->regs[2] = (unsigned long)&frame->uc; 263 } 264 } 265 266 return err; 267 } 268 269 static void setup_restart_syscall(struct pt_regs *regs) 270 { 271 if (is_compat_task()) 272 compat_setup_restart_syscall(regs); 273 else 274 regs->regs[8] = __NR_restart_syscall; 275 } 276 277 /* 278 * OK, we're invoking a handler 279 */ 280 static void handle_signal(unsigned long sig, struct k_sigaction *ka, 281 siginfo_t *info, struct pt_regs *regs) 282 { 283 struct thread_info *thread = current_thread_info(); 284 struct task_struct *tsk = current; 285 sigset_t *oldset = sigmask_to_save(); 286 int usig = sig; 287 int ret; 288 289 /* 290 * translate the signal 291 */ 292 if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) 293 usig = thread->exec_domain->signal_invmap[usig]; 294 295 /* 296 * Set up the stack frame 297 */ 298 if (is_compat_task()) { 299 if (ka->sa.sa_flags & SA_SIGINFO) 300 ret = compat_setup_rt_frame(usig, ka, info, oldset, 301 regs); 302 else 303 ret = compat_setup_frame(usig, ka, oldset, regs); 304 } else { 305 ret = setup_rt_frame(usig, ka, info, oldset, regs); 306 } 307 308 /* 309 * Check that the resulting registers are actually sane. 310 */ 311 ret |= !valid_user_regs(®s->user_regs); 312 313 if (ret != 0) { 314 force_sigsegv(sig, tsk); 315 return; 316 } 317 318 /* 319 * Fast forward the stepping logic so we step into the signal 320 * handler. 321 */ 322 user_fastforward_single_step(tsk); 323 324 signal_delivered(sig, info, ka, regs, 0); 325 } 326 327 /* 328 * Note that 'init' is a special process: it doesn't get signals it doesn't 329 * want to handle. Thus you cannot kill init even with a SIGKILL even by 330 * mistake. 331 * 332 * Note that we go through the signals twice: once to check the signals that 333 * the kernel can handle, and then we build all the user-level signal handling 334 * stack-frames in one go after that. 335 */ 336 static void do_signal(struct pt_regs *regs) 337 { 338 unsigned long continue_addr = 0, restart_addr = 0; 339 struct k_sigaction ka; 340 siginfo_t info; 341 int signr, retval = 0; 342 int syscall = (int)regs->syscallno; 343 344 /* 345 * If we were from a system call, check for system call restarting... 346 */ 347 if (syscall >= 0) { 348 continue_addr = regs->pc; 349 restart_addr = continue_addr - (compat_thumb_mode(regs) ? 2 : 4); 350 retval = regs->regs[0]; 351 352 /* 353 * Avoid additional syscall restarting via ret_to_user. 354 */ 355 regs->syscallno = ~0UL; 356 357 /* 358 * Prepare for system call restart. We do this here so that a 359 * debugger will see the already changed PC. 360 */ 361 switch (retval) { 362 case -ERESTARTNOHAND: 363 case -ERESTARTSYS: 364 case -ERESTARTNOINTR: 365 case -ERESTART_RESTARTBLOCK: 366 regs->regs[0] = regs->orig_x0; 367 regs->pc = restart_addr; 368 break; 369 } 370 } 371 372 /* 373 * Get the signal to deliver. When running under ptrace, at this point 374 * the debugger may change all of our registers. 375 */ 376 signr = get_signal_to_deliver(&info, &ka, regs, NULL); 377 if (signr > 0) { 378 /* 379 * Depending on the signal settings, we may need to revert the 380 * decision to restart the system call, but skip this if a 381 * debugger has chosen to restart at a different PC. 382 */ 383 if (regs->pc == restart_addr && 384 (retval == -ERESTARTNOHAND || 385 retval == -ERESTART_RESTARTBLOCK || 386 (retval == -ERESTARTSYS && 387 !(ka.sa.sa_flags & SA_RESTART)))) { 388 regs->regs[0] = -EINTR; 389 regs->pc = continue_addr; 390 } 391 392 handle_signal(signr, &ka, &info, regs); 393 return; 394 } 395 396 /* 397 * Handle restarting a different system call. As above, if a debugger 398 * has chosen to restart at a different PC, ignore the restart. 399 */ 400 if (syscall >= 0 && regs->pc == restart_addr) { 401 if (retval == -ERESTART_RESTARTBLOCK) 402 setup_restart_syscall(regs); 403 user_rewind_single_step(current); 404 } 405 406 restore_saved_sigmask(); 407 } 408 409 asmlinkage void do_notify_resume(struct pt_regs *regs, 410 unsigned int thread_flags) 411 { 412 if (thread_flags & _TIF_SIGPENDING) 413 do_signal(regs); 414 415 if (thread_flags & _TIF_NOTIFY_RESUME) { 416 clear_thread_flag(TIF_NOTIFY_RESUME); 417 tracehook_notify_resume(regs); 418 } 419 } 420