xref: /openbmc/linux/arch/x86/kernel/signal_64.c (revision 22246614)
1 /*
2  *  Copyright (C) 1991, 1992  Linus Torvalds
3  *  Copyright (C) 2000, 2001, 2002 Andi Kleen SuSE Labs
4  *
5  *  1997-11-28  Modified for POSIX.1b signals by Richard Henderson
6  *  2000-06-20  Pentium III FXSR, SSE support by Gareth Hughes
7  *  2000-2002   x86-64 support by Andi Kleen
8  */
9 
10 #include <linux/sched.h>
11 #include <linux/mm.h>
12 #include <linux/smp.h>
13 #include <linux/kernel.h>
14 #include <linux/signal.h>
15 #include <linux/errno.h>
16 #include <linux/wait.h>
17 #include <linux/ptrace.h>
18 #include <linux/unistd.h>
19 #include <linux/stddef.h>
20 #include <linux/personality.h>
21 #include <linux/compiler.h>
22 #include <asm/processor.h>
23 #include <asm/ucontext.h>
24 #include <asm/uaccess.h>
25 #include <asm/i387.h>
26 #include <asm/proto.h>
27 #include <asm/ia32_unistd.h>
28 #include <asm/mce.h>
29 #include "sigframe.h"
30 
31 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
32 
33 #define __FIX_EFLAGS	(X86_EFLAGS_AC | X86_EFLAGS_OF | \
34 			 X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \
35 			 X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \
36 			 X86_EFLAGS_CF)
37 
38 #ifdef CONFIG_X86_32
39 # define FIX_EFLAGS	(__FIX_EFLAGS | X86_EFLAGS_RF)
40 #else
41 # define FIX_EFLAGS	__FIX_EFLAGS
42 #endif
43 
44 int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
45                sigset_t *set, struct pt_regs * regs);
46 int ia32_setup_frame(int sig, struct k_sigaction *ka,
47             sigset_t *set, struct pt_regs * regs);
48 
49 asmlinkage long
50 sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
51 		struct pt_regs *regs)
52 {
53 	return do_sigaltstack(uss, uoss, regs->sp);
54 }
55 
56 
57 /*
58  * Do a signal return; undo the signal stack.
59  */
60 static int
61 restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
62 		   unsigned long *pax)
63 {
64 	unsigned int err = 0;
65 
66 	/* Always make any pending restarted system calls return -EINTR */
67 	current_thread_info()->restart_block.fn = do_no_restart_syscall;
68 
69 #define COPY(x)		err |= __get_user(regs->x, &sc->x)
70 
71 	COPY(di); COPY(si); COPY(bp); COPY(sp); COPY(bx);
72 	COPY(dx); COPY(cx); COPY(ip);
73 	COPY(r8);
74 	COPY(r9);
75 	COPY(r10);
76 	COPY(r11);
77 	COPY(r12);
78 	COPY(r13);
79 	COPY(r14);
80 	COPY(r15);
81 
82 	/* Kernel saves and restores only the CS segment register on signals,
83 	 * which is the bare minimum needed to allow mixed 32/64-bit code.
84 	 * App's signal handler can save/restore other segments if needed. */
85 	{
86 		unsigned cs;
87 		err |= __get_user(cs, &sc->cs);
88 		regs->cs = cs | 3;	/* Force into user mode */
89 	}
90 
91 	{
92 		unsigned int tmpflags;
93 		err |= __get_user(tmpflags, &sc->flags);
94 		regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
95 		regs->orig_ax = -1;		/* disable syscall checks */
96 	}
97 
98 	{
99 		struct _fpstate __user * buf;
100 		err |= __get_user(buf, &sc->fpstate);
101 
102 		if (buf) {
103 			if (!access_ok(VERIFY_READ, buf, sizeof(*buf)))
104 				goto badframe;
105 			err |= restore_i387(buf);
106 		} else {
107 			struct task_struct *me = current;
108 			if (used_math()) {
109 				clear_fpu(me);
110 				clear_used_math();
111 			}
112 		}
113 	}
114 
115 	err |= __get_user(*pax, &sc->ax);
116 	return err;
117 
118 badframe:
119 	return 1;
120 }
121 
122 asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
123 {
124 	struct rt_sigframe __user *frame;
125 	sigset_t set;
126 	unsigned long ax;
127 
128 	frame = (struct rt_sigframe __user *)(regs->sp - sizeof(long));
129 	if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
130 		goto badframe;
131 	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
132 		goto badframe;
133 
134 	sigdelsetmask(&set, ~_BLOCKABLE);
135 	spin_lock_irq(&current->sighand->siglock);
136 	current->blocked = set;
137 	recalc_sigpending();
138 	spin_unlock_irq(&current->sighand->siglock);
139 
140 	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
141 		goto badframe;
142 
143 	if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->sp) == -EFAULT)
144 		goto badframe;
145 
146 	return ax;
147 
148 badframe:
149 	signal_fault(regs,frame,"sigreturn");
150 	return 0;
151 }
152 
153 /*
154  * Set up a signal frame.
155  */
156 
157 static inline int
158 setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, unsigned long mask, struct task_struct *me)
159 {
160 	int err = 0;
161 
162 	err |= __put_user(regs->cs, &sc->cs);
163 	err |= __put_user(0, &sc->gs);
164 	err |= __put_user(0, &sc->fs);
165 
166 	err |= __put_user(regs->di, &sc->di);
167 	err |= __put_user(regs->si, &sc->si);
168 	err |= __put_user(regs->bp, &sc->bp);
169 	err |= __put_user(regs->sp, &sc->sp);
170 	err |= __put_user(regs->bx, &sc->bx);
171 	err |= __put_user(regs->dx, &sc->dx);
172 	err |= __put_user(regs->cx, &sc->cx);
173 	err |= __put_user(regs->ax, &sc->ax);
174 	err |= __put_user(regs->r8, &sc->r8);
175 	err |= __put_user(regs->r9, &sc->r9);
176 	err |= __put_user(regs->r10, &sc->r10);
177 	err |= __put_user(regs->r11, &sc->r11);
178 	err |= __put_user(regs->r12, &sc->r12);
179 	err |= __put_user(regs->r13, &sc->r13);
180 	err |= __put_user(regs->r14, &sc->r14);
181 	err |= __put_user(regs->r15, &sc->r15);
182 	err |= __put_user(me->thread.trap_no, &sc->trapno);
183 	err |= __put_user(me->thread.error_code, &sc->err);
184 	err |= __put_user(regs->ip, &sc->ip);
185 	err |= __put_user(regs->flags, &sc->flags);
186 	err |= __put_user(mask, &sc->oldmask);
187 	err |= __put_user(me->thread.cr2, &sc->cr2);
188 
189 	return err;
190 }
191 
192 /*
193  * Determine which stack to use..
194  */
195 
196 static void __user *
197 get_stack(struct k_sigaction *ka, struct pt_regs *regs, unsigned long size)
198 {
199 	unsigned long sp;
200 
201 	/* Default to using normal stack - redzone*/
202 	sp = regs->sp - 128;
203 
204 	/* This is the X/Open sanctioned signal stack switching.  */
205 	if (ka->sa.sa_flags & SA_ONSTACK) {
206 		if (sas_ss_flags(sp) == 0)
207 			sp = current->sas_ss_sp + current->sas_ss_size;
208 	}
209 
210 	return (void __user *)round_down(sp - size, 16);
211 }
212 
213 static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
214 			   sigset_t *set, struct pt_regs * regs)
215 {
216 	struct rt_sigframe __user *frame;
217 	struct _fpstate __user *fp = NULL;
218 	int err = 0;
219 	struct task_struct *me = current;
220 
221 	if (used_math()) {
222 		fp = get_stack(ka, regs, sizeof(struct _fpstate));
223 		frame = (void __user *)round_down(
224 			(unsigned long)fp - sizeof(struct rt_sigframe), 16) - 8;
225 
226 		if (!access_ok(VERIFY_WRITE, fp, sizeof(struct _fpstate)))
227 			goto give_sigsegv;
228 
229 		if (save_i387(fp) < 0)
230 			err |= -1;
231 	} else
232 		frame = get_stack(ka, regs, sizeof(struct rt_sigframe)) - 8;
233 
234 	if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
235 		goto give_sigsegv;
236 
237 	if (ka->sa.sa_flags & SA_SIGINFO) {
238 		err |= copy_siginfo_to_user(&frame->info, info);
239 		if (err)
240 			goto give_sigsegv;
241 	}
242 
243 	/* Create the ucontext.  */
244 	err |= __put_user(0, &frame->uc.uc_flags);
245 	err |= __put_user(0, &frame->uc.uc_link);
246 	err |= __put_user(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
247 	err |= __put_user(sas_ss_flags(regs->sp),
248 			  &frame->uc.uc_stack.ss_flags);
249 	err |= __put_user(me->sas_ss_size, &frame->uc.uc_stack.ss_size);
250 	err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0], me);
251 	err |= __put_user(fp, &frame->uc.uc_mcontext.fpstate);
252 	if (sizeof(*set) == 16) {
253 		__put_user(set->sig[0], &frame->uc.uc_sigmask.sig[0]);
254 		__put_user(set->sig[1], &frame->uc.uc_sigmask.sig[1]);
255 	} else
256 		err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
257 
258 	/* Set up to return from userspace.  If provided, use a stub
259 	   already in userspace.  */
260 	/* x86-64 should always use SA_RESTORER. */
261 	if (ka->sa.sa_flags & SA_RESTORER) {
262 		err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
263 	} else {
264 		/* could use a vstub here */
265 		goto give_sigsegv;
266 	}
267 
268 	if (err)
269 		goto give_sigsegv;
270 
271 	/* Set up registers for signal handler */
272 	regs->di = sig;
273 	/* In case the signal handler was declared without prototypes */
274 	regs->ax = 0;
275 
276 	/* This also works for non SA_SIGINFO handlers because they expect the
277 	   next argument after the signal number on the stack. */
278 	regs->si = (unsigned long)&frame->info;
279 	regs->dx = (unsigned long)&frame->uc;
280 	regs->ip = (unsigned long) ka->sa.sa_handler;
281 
282 	regs->sp = (unsigned long)frame;
283 
284 	/* Set up the CS register to run signal handlers in 64-bit mode,
285 	   even if the handler happens to be interrupting 32-bit code. */
286 	regs->cs = __USER_CS;
287 
288 	return 0;
289 
290 give_sigsegv:
291 	force_sigsegv(sig, current);
292 	return -EFAULT;
293 }
294 
295 /*
296  * Return -1L or the syscall number that @regs is executing.
297  */
298 static long current_syscall(struct pt_regs *regs)
299 {
300 	/*
301 	 * We always sign-extend a -1 value being set here,
302 	 * so this is always either -1L or a syscall number.
303 	 */
304 	return regs->orig_ax;
305 }
306 
307 /*
308  * Return a value that is -EFOO if the system call in @regs->orig_ax
309  * returned an error.  This only works for @regs from @current.
310  */
311 static long current_syscall_ret(struct pt_regs *regs)
312 {
313 #ifdef CONFIG_IA32_EMULATION
314 	if (test_thread_flag(TIF_IA32))
315 		/*
316 		 * Sign-extend the value so (int)-EFOO becomes (long)-EFOO
317 		 * and will match correctly in comparisons.
318 		 */
319 		return (int) regs->ax;
320 #endif
321 	return regs->ax;
322 }
323 
324 /*
325  * OK, we're invoking a handler
326  */
327 
328 static int
329 handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
330 	      sigset_t *oldset, struct pt_regs *regs)
331 {
332 	int ret;
333 
334 	/* Are we from a system call? */
335 	if (current_syscall(regs) >= 0) {
336 		/* If so, check system call restarting.. */
337 		switch (current_syscall_ret(regs)) {
338 		case -ERESTART_RESTARTBLOCK:
339 		case -ERESTARTNOHAND:
340 			regs->ax = -EINTR;
341 			break;
342 
343 		case -ERESTARTSYS:
344 			if (!(ka->sa.sa_flags & SA_RESTART)) {
345 				regs->ax = -EINTR;
346 				break;
347 			}
348 		/* fallthrough */
349 		case -ERESTARTNOINTR:
350 			regs->ax = regs->orig_ax;
351 			regs->ip -= 2;
352 			break;
353 		}
354 	}
355 
356 	/*
357 	 * If TF is set due to a debugger (TIF_FORCED_TF), clear the TF
358 	 * flag so that register information in the sigcontext is correct.
359 	 */
360 	if (unlikely(regs->flags & X86_EFLAGS_TF) &&
361 	    likely(test_and_clear_thread_flag(TIF_FORCED_TF)))
362 		regs->flags &= ~X86_EFLAGS_TF;
363 
364 #ifdef CONFIG_IA32_EMULATION
365 	if (test_thread_flag(TIF_IA32)) {
366 		if (ka->sa.sa_flags & SA_SIGINFO)
367 			ret = ia32_setup_rt_frame(sig, ka, info, oldset, regs);
368 		else
369 			ret = ia32_setup_frame(sig, ka, oldset, regs);
370 	} else
371 #endif
372 	ret = setup_rt_frame(sig, ka, info, oldset, regs);
373 
374 	if (ret == 0) {
375 		/*
376 		 * This has nothing to do with segment registers,
377 		 * despite the name.  This magic affects uaccess.h
378 		 * macros' behavior.  Reset it to the normal setting.
379 		 */
380 		set_fs(USER_DS);
381 
382 		/*
383 		 * Clear the direction flag as per the ABI for function entry.
384 		 */
385 		regs->flags &= ~X86_EFLAGS_DF;
386 
387 		/*
388 		 * Clear TF when entering the signal handler, but
389 		 * notify any tracer that was single-stepping it.
390 		 * The tracer may want to single-step inside the
391 		 * handler too.
392 		 */
393 		regs->flags &= ~X86_EFLAGS_TF;
394 		if (test_thread_flag(TIF_SINGLESTEP))
395 			ptrace_notify(SIGTRAP);
396 
397 		spin_lock_irq(&current->sighand->siglock);
398 		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
399 		if (!(ka->sa.sa_flags & SA_NODEFER))
400 			sigaddset(&current->blocked,sig);
401 		recalc_sigpending();
402 		spin_unlock_irq(&current->sighand->siglock);
403 	}
404 
405 	return ret;
406 }
407 
408 /*
409  * Note that 'init' is a special process: it doesn't get signals it doesn't
410  * want to handle. Thus you cannot kill init even with a SIGKILL even by
411  * mistake.
412  */
413 static void do_signal(struct pt_regs *regs)
414 {
415 	struct k_sigaction ka;
416 	siginfo_t info;
417 	int signr;
418 	sigset_t *oldset;
419 
420 	/*
421 	 * We want the common case to go fast, which is why we may in certain
422 	 * cases get here from kernel mode. Just return without doing anything
423 	 * if so.
424 	 * X86_32: vm86 regs switched out by assembly code before reaching
425 	 * here, so testing against kernel CS suffices.
426 	 */
427 	if (!user_mode(regs))
428 		return;
429 
430 	if (current_thread_info()->status & TS_RESTORE_SIGMASK)
431 		oldset = &current->saved_sigmask;
432 	else
433 		oldset = &current->blocked;
434 
435 	signr = get_signal_to_deliver(&info, &ka, regs, NULL);
436 	if (signr > 0) {
437 		/* Re-enable any watchpoints before delivering the
438 		 * signal to user space. The processor register will
439 		 * have been cleared if the watchpoint triggered
440 		 * inside the kernel.
441 		 */
442 		if (current->thread.debugreg7)
443 			set_debugreg(current->thread.debugreg7, 7);
444 
445 		/* Whee!  Actually deliver the signal.  */
446 		if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
447 			/*
448 			 * A signal was successfully delivered; the saved
449 			 * sigmask will have been stored in the signal frame,
450 			 * and will be restored by sigreturn, so we can simply
451 			 * clear the TS_RESTORE_SIGMASK flag.
452 			 */
453 			current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
454 		}
455 		return;
456 	}
457 
458 	/* Did we come from a system call? */
459 	if (current_syscall(regs) >= 0) {
460 		/* Restart the system call - no handlers present */
461 		switch (current_syscall_ret(regs)) {
462 		case -ERESTARTNOHAND:
463 		case -ERESTARTSYS:
464 		case -ERESTARTNOINTR:
465 			regs->ax = regs->orig_ax;
466 			regs->ip -= 2;
467 			break;
468 		case -ERESTART_RESTARTBLOCK:
469 			regs->ax = test_thread_flag(TIF_IA32) ?
470 					__NR_ia32_restart_syscall :
471 					__NR_restart_syscall;
472 			regs->ip -= 2;
473 			break;
474 		}
475 	}
476 
477 	/*
478 	 * If there's no signal to deliver, we just put the saved sigmask
479 	 * back.
480 	 */
481 	if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
482 		current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
483 		sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
484 	}
485 }
486 
487 void do_notify_resume(struct pt_regs *regs, void *unused,
488 		      __u32 thread_info_flags)
489 {
490 	/* Pending single-step? */
491 	if (thread_info_flags & _TIF_SINGLESTEP) {
492 		regs->flags |= X86_EFLAGS_TF;
493 		clear_thread_flag(TIF_SINGLESTEP);
494 	}
495 
496 #ifdef CONFIG_X86_MCE
497 	/* notify userspace of pending MCEs */
498 	if (thread_info_flags & _TIF_MCE_NOTIFY)
499 		mce_notify_user();
500 #endif /* CONFIG_X86_MCE */
501 
502 	/* deal with pending signal delivery */
503 	if (thread_info_flags & _TIF_SIGPENDING)
504 		do_signal(regs);
505 
506 	if (thread_info_flags & _TIF_HRTICK_RESCHED)
507 		hrtick_resched();
508 }
509 
510 void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
511 {
512 	struct task_struct *me = current;
513 	if (show_unhandled_signals && printk_ratelimit()) {
514 		printk("%s[%d] bad frame in %s frame:%p ip:%lx sp:%lx orax:%lx",
515 	       me->comm,me->pid,where,frame,regs->ip,regs->sp,regs->orig_ax);
516 		print_vma_addr(" in ", regs->ip);
517 		printk("\n");
518 	}
519 
520 	force_sig(SIGSEGV, me);
521 }
522