• Home
  • Raw
  • Download

Lines Matching +full:pre +full:- +full:programs

1 // SPDX-License-Identifier: GPL-2.0
6 * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson
7 * 2000-06-20 Pentium III FXSR, SSE support by Gareth Hughes
8 * 2000-2002 x86-64 support by Andi Kleen
25 #include <linux/user-return-notifier.h>
28 #include <linux/entry-common.h>
48 ksig->ka.sa.sa_flags & SA_IA32_ABI; in is_ia32_compat_frame()
59 ksig->ka.sa.sa_flags & SA_X32_ABI; in is_x32_frame()
66 /* x86 ABI requires 16-byte alignment */
69 #define MAX_FRAME_PADDING (FRAME_ALIGNMENT - 1)
78 struct k_sigaction *ka = &ksig->ka; in get_sigframe()
81 bool nested_altstack = on_sig_stack(regs->sp); in get_sigframe()
84 unsigned long sp = regs->sp; in get_sigframe()
89 sp -= 128; in get_sigframe()
92 if (ka->sa.sa_flags & SA_ONSTACK) { in get_sigframe()
95 * programs use SS_AUTODISARM, which disables that check, and in get_sigframe()
96 * programs that don't use SS_AUTODISARM get compatible. in get_sigframe()
99 sp = current->sas_ss_sp + current->sas_ss_size; in get_sigframe()
104 regs->ss != __USER_DS && in get_sigframe()
105 !(ka->sa.sa_flags & SA_RESTORER) && in get_sigframe()
106 ka->sa.sa_restorer) { in get_sigframe()
108 sp = (unsigned long) ka->sa.sa_restorer; in get_sigframe()
115 sp -= frame_size; in get_sigframe()
122 sp = ((sp + 4) & -FRAME_ALIGNMENT) - 4; in get_sigframe()
124 sp = round_down(sp, FRAME_ALIGNMENT) - 8; in get_sigframe()
128 * Return an always-bogus address instead so we will die with SIGSEGV. in get_sigframe()
135 current->comm, task_pid_nr(current)); in get_sigframe()
137 return (void __user *)-1L; in get_sigframe()
142 return (void __user *)-1L; in get_sigframe()
150 * -- the largest size. It means the size for 64-bit apps is a bit more
160 * The FP state frame contains an XSAVE buffer which must be 64-byte aligned.
169 * -------------------------
171 * -------------------------
173 * -------------------------
175 * -------------------------
177 * -------------------------
179 * -------------------------
210 /* Perform fixup for the pre-signal frame. */ in setup_rt_frame()
215 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in setup_rt_frame()
230 struct fpu *fpu = &current->thread.fpu; in handle_signal()
236 if (syscall_get_nr(current, regs) != -1) { in handle_signal()
239 case -ERESTART_RESTARTBLOCK: in handle_signal()
240 case -ERESTARTNOHAND: in handle_signal()
241 regs->ax = -EINTR; in handle_signal()
244 case -ERESTARTSYS: in handle_signal()
245 if (!(ksig->ka.sa.sa_flags & SA_RESTART)) { in handle_signal()
246 regs->ax = -EINTR; in handle_signal()
250 case -ERESTARTNOINTR: in handle_signal()
251 regs->ax = regs->orig_ax; in handle_signal()
252 regs->ip -= 2; in handle_signal()
278 regs->flags &= ~(X86_EFLAGS_DF|X86_EFLAGS_RF|X86_EFLAGS_TF); in handle_signal()
290 if (current->restart_block.arch_data & TS_COMPAT) in get_nr_restart_syscall()
294 return __NR_restart_syscall | (regs->orig_ax & __X32_SYSCALL_BIT); in get_nr_restart_syscall()
316 if (syscall_get_nr(current, regs) != -1) { in arch_do_signal_or_restart()
317 /* Restart the system call - no handlers present */ in arch_do_signal_or_restart()
319 case -ERESTARTNOHAND: in arch_do_signal_or_restart()
320 case -ERESTARTSYS: in arch_do_signal_or_restart()
321 case -ERESTARTNOINTR: in arch_do_signal_or_restart()
322 regs->ax = regs->orig_ax; in arch_do_signal_or_restart()
323 regs->ip -= 2; in arch_do_signal_or_restart()
326 case -ERESTART_RESTARTBLOCK: in arch_do_signal_or_restart()
327 regs->ax = get_nr_restart_syscall(regs); in arch_do_signal_or_restart()
328 regs->ip -= 2; in arch_do_signal_or_restart()
348 me->comm, me->pid, where, frame, in signal_fault()
349 regs->ip, regs->sp, regs->orig_ax); in signal_fault()
350 print_vma_addr(KERN_CONT " in ", regs->ip); in signal_fault()
372 * exceeds that size already. As such programs might never use the
381 * permission are checked against the size of the non-dynamic feature set
390 unsigned long fsize = max_frame_size - fpu_default_state_size; in sigaltstack_size_valid()
393 lockdep_assert_held(&current->sighand->siglock); in sigaltstack_size_valid()
398 fsize += current->group_leader->thread.fpu.perm.__user_state_size; in sigaltstack_size_valid()
405 mask = current->group_leader->thread.fpu.perm.__state_perm; in sigaltstack_size_valid()