2 * Copyright IBM Corp. 2000, 2006
3 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
4 * Gerhard Tonn (ton@de.ibm.com)
6 * Copyright (C) 1991, 1992 Linus Torvalds
8 * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson
11 #include <linux/compat.h>
12 #include <linux/sched.h>
14 #include <linux/smp.h>
15 #include <linux/kernel.h>
16 #include <linux/signal.h>
17 #include <linux/errno.h>
18 #include <linux/wait.h>
19 #include <linux/ptrace.h>
20 #include <linux/unistd.h>
21 #include <linux/stddef.h>
22 #include <linux/tty.h>
23 #include <linux/personality.h>
24 #include <linux/binfmts.h>
25 #include <asm/ucontext.h>
26 #include <asm/uaccess.h>
27 #include <asm/lowcore.h>
28 #include <asm/switch_to.h>
29 #include "compat_linux.h"
30 #include "compat_ptrace.h"
35 __u8 callee_used_stack
[__SIGNAL_FRAMESIZE32
];
36 struct sigcontext32 sc
;
39 _sigregs_ext32 sregs_ext
;
40 __u16 svc_insn
; /* Offset of svc_insn is NOT fixed! */
45 __u8 callee_used_stack
[__SIGNAL_FRAMESIZE32
];
47 compat_siginfo_t info
;
51 int copy_siginfo_to_user32(compat_siginfo_t __user
*to
, const siginfo_t
*from
)
55 /* If you change siginfo_t structure, please be sure
56 this code is fixed accordingly.
57 It should never copy any pad contained in the structure
58 to avoid security leaks, but must copy the generic
59 3 ints plus the relevant union member.
60 This routine must convert siginfo from 64bit to 32bit as well
62 err
= __put_user(from
->si_signo
, &to
->si_signo
);
63 err
|= __put_user(from
->si_errno
, &to
->si_errno
);
64 err
|= __put_user((short)from
->si_code
, &to
->si_code
);
65 if (from
->si_code
< 0)
66 err
|= __copy_to_user(&to
->_sifields
._pad
, &from
->_sifields
._pad
, SI_PAD_SIZE
);
68 switch (from
->si_code
>> 16) {
69 case __SI_RT
>> 16: /* This is not generated by the kernel as of now. */
70 case __SI_MESGQ
>> 16:
71 err
|= __put_user(from
->si_int
, &to
->si_int
);
74 err
|= __put_user(from
->si_pid
, &to
->si_pid
);
75 err
|= __put_user(from
->si_uid
, &to
->si_uid
);
78 err
|= __put_user(from
->si_pid
, &to
->si_pid
);
79 err
|= __put_user(from
->si_uid
, &to
->si_uid
);
80 err
|= __put_user(from
->si_utime
, &to
->si_utime
);
81 err
|= __put_user(from
->si_stime
, &to
->si_stime
);
82 err
|= __put_user(from
->si_status
, &to
->si_status
);
84 case __SI_FAULT
>> 16:
85 err
|= __put_user((unsigned long) from
->si_addr
,
89 err
|= __put_user(from
->si_band
, &to
->si_band
);
90 err
|= __put_user(from
->si_fd
, &to
->si_fd
);
92 case __SI_TIMER
>> 16:
93 err
|= __put_user(from
->si_tid
, &to
->si_tid
);
94 err
|= __put_user(from
->si_overrun
, &to
->si_overrun
);
95 err
|= __put_user(from
->si_int
, &to
->si_int
);
101 return err
? -EFAULT
: 0;
104 int copy_siginfo_from_user32(siginfo_t
*to
, compat_siginfo_t __user
*from
)
109 err
= __get_user(to
->si_signo
, &from
->si_signo
);
110 err
|= __get_user(to
->si_errno
, &from
->si_errno
);
111 err
|= __get_user(to
->si_code
, &from
->si_code
);
114 err
|= __copy_from_user(&to
->_sifields
._pad
, &from
->_sifields
._pad
, SI_PAD_SIZE
);
116 switch (to
->si_code
>> 16) {
117 case __SI_RT
>> 16: /* This is not generated by the kernel as of now. */
118 case __SI_MESGQ
>> 16:
119 err
|= __get_user(to
->si_int
, &from
->si_int
);
121 case __SI_KILL
>> 16:
122 err
|= __get_user(to
->si_pid
, &from
->si_pid
);
123 err
|= __get_user(to
->si_uid
, &from
->si_uid
);
125 case __SI_CHLD
>> 16:
126 err
|= __get_user(to
->si_pid
, &from
->si_pid
);
127 err
|= __get_user(to
->si_uid
, &from
->si_uid
);
128 err
|= __get_user(to
->si_utime
, &from
->si_utime
);
129 err
|= __get_user(to
->si_stime
, &from
->si_stime
);
130 err
|= __get_user(to
->si_status
, &from
->si_status
);
132 case __SI_FAULT
>> 16:
133 err
|= __get_user(tmp
, &from
->si_addr
);
134 to
->si_addr
= (void __force __user
*)
135 (u64
) (tmp
& PSW32_ADDR_INSN
);
137 case __SI_POLL
>> 16:
138 err
|= __get_user(to
->si_band
, &from
->si_band
);
139 err
|= __get_user(to
->si_fd
, &from
->si_fd
);
141 case __SI_TIMER
>> 16:
142 err
|= __get_user(to
->si_tid
, &from
->si_tid
);
143 err
|= __get_user(to
->si_overrun
, &from
->si_overrun
);
144 err
|= __get_user(to
->si_int
, &from
->si_int
);
150 return err
? -EFAULT
: 0;
153 /* Store registers needed to create the signal frame */
154 static void store_sigregs(void)
158 save_access_regs(current
->thread
.acrs
);
159 save_fp_ctl(¤t
->thread
.fp_regs
.fpc
);
160 if (current
->thread
.vxrs
) {
161 save_vx_regs(current
->thread
.vxrs
);
162 for (i
= 0; i
< __NUM_FPRS
; i
++)
163 current
->thread
.fp_regs
.fprs
[i
] =
164 *(freg_t
*)(current
->thread
.vxrs
+ i
);
166 save_fp_regs(current
->thread
.fp_regs
.fprs
);
169 /* Load registers after signal return */
170 static void load_sigregs(void)
174 restore_access_regs(current
->thread
.acrs
);
175 /* restore_fp_ctl is done in restore_sigregs */
176 if (current
->thread
.vxrs
) {
177 for (i
= 0; i
< __NUM_FPRS
; i
++)
178 *(freg_t
*)(current
->thread
.vxrs
+ i
) =
179 current
->thread
.fp_regs
.fprs
[i
];
180 restore_vx_regs(current
->thread
.vxrs
);
182 restore_fp_regs(current
->thread
.fp_regs
.fprs
);
185 static int save_sigregs32(struct pt_regs
*regs
, _sigregs32 __user
*sregs
)
187 _sigregs32 user_sregs
;
190 user_sregs
.regs
.psw
.mask
= (__u32
)(regs
->psw
.mask
>> 32);
191 user_sregs
.regs
.psw
.mask
&= PSW32_MASK_USER
| PSW32_MASK_RI
;
192 user_sregs
.regs
.psw
.mask
|= PSW32_USER_BITS
;
193 user_sregs
.regs
.psw
.addr
= (__u32
) regs
->psw
.addr
|
194 (__u32
)(regs
->psw
.mask
& PSW_MASK_BA
);
195 for (i
= 0; i
< NUM_GPRS
; i
++)
196 user_sregs
.regs
.gprs
[i
] = (__u32
) regs
->gprs
[i
];
197 memcpy(&user_sregs
.regs
.acrs
, current
->thread
.acrs
,
198 sizeof(user_sregs
.regs
.acrs
));
199 memcpy(&user_sregs
.fpregs
, ¤t
->thread
.fp_regs
,
200 sizeof(user_sregs
.fpregs
));
201 if (__copy_to_user(sregs
, &user_sregs
, sizeof(_sigregs32
)))
206 static int restore_sigregs32(struct pt_regs
*regs
,_sigregs32 __user
*sregs
)
208 _sigregs32 user_sregs
;
211 /* Alwys make any pending restarted system call return -EINTR */
212 current
->restart_block
.fn
= do_no_restart_syscall
;
214 if (__copy_from_user(&user_sregs
, &sregs
->regs
, sizeof(user_sregs
)))
217 if (!is_ri_task(current
) && (user_sregs
.regs
.psw
.mask
& PSW32_MASK_RI
))
220 /* Loading the floating-point-control word can fail. Do that first. */
221 if (restore_fp_ctl(&user_sregs
.fpregs
.fpc
))
224 /* Use regs->psw.mask instead of PSW_USER_BITS to preserve PER bit. */
225 regs
->psw
.mask
= (regs
->psw
.mask
& ~(PSW_MASK_USER
| PSW_MASK_RI
)) |
226 (__u64
)(user_sregs
.regs
.psw
.mask
& PSW32_MASK_USER
) << 32 |
227 (__u64
)(user_sregs
.regs
.psw
.mask
& PSW32_MASK_RI
) << 32 |
228 (__u64
)(user_sregs
.regs
.psw
.addr
& PSW32_ADDR_AMODE
);
229 /* Check for invalid user address space control. */
230 if ((regs
->psw
.mask
& PSW_MASK_ASC
) == PSW_ASC_HOME
)
231 regs
->psw
.mask
= PSW_ASC_PRIMARY
|
232 (regs
->psw
.mask
& ~PSW_MASK_ASC
);
233 regs
->psw
.addr
= (__u64
)(user_sregs
.regs
.psw
.addr
& PSW32_ADDR_INSN
);
234 for (i
= 0; i
< NUM_GPRS
; i
++)
235 regs
->gprs
[i
] = (__u64
) user_sregs
.regs
.gprs
[i
];
236 memcpy(¤t
->thread
.acrs
, &user_sregs
.regs
.acrs
,
237 sizeof(current
->thread
.acrs
));
239 memcpy(¤t
->thread
.fp_regs
, &user_sregs
.fpregs
,
240 sizeof(current
->thread
.fp_regs
));
242 clear_pt_regs_flag(regs
, PIF_SYSCALL
); /* No longer in a system call */
246 static int save_sigregs_ext32(struct pt_regs
*regs
,
247 _sigregs_ext32 __user
*sregs_ext
)
249 __u32 gprs_high
[NUM_GPRS
];
250 __u64 vxrs
[__NUM_VXRS_LOW
];
253 /* Save high gprs to signal stack */
254 for (i
= 0; i
< NUM_GPRS
; i
++)
255 gprs_high
[i
] = regs
->gprs
[i
] >> 32;
256 if (__copy_to_user(&sregs_ext
->gprs_high
, &gprs_high
,
257 sizeof(sregs_ext
->gprs_high
)))
260 /* Save vector registers to signal stack */
261 if (current
->thread
.vxrs
) {
262 for (i
= 0; i
< __NUM_VXRS_LOW
; i
++)
263 vxrs
[i
] = *((__u64
*)(current
->thread
.vxrs
+ i
) + 1);
264 if (__copy_to_user(&sregs_ext
->vxrs_low
, vxrs
,
265 sizeof(sregs_ext
->vxrs_low
)) ||
266 __copy_to_user(&sregs_ext
->vxrs_high
,
267 current
->thread
.vxrs
+ __NUM_VXRS_LOW
,
268 sizeof(sregs_ext
->vxrs_high
)))
274 static int restore_sigregs_ext32(struct pt_regs
*regs
,
275 _sigregs_ext32 __user
*sregs_ext
)
277 __u32 gprs_high
[NUM_GPRS
];
278 __u64 vxrs
[__NUM_VXRS_LOW
];
281 /* Restore high gprs from signal stack */
282 if (__copy_from_user(&gprs_high
, &sregs_ext
->gprs_high
,
283 sizeof(&sregs_ext
->gprs_high
)))
285 for (i
= 0; i
< NUM_GPRS
; i
++)
286 *(__u32
*)®s
->gprs
[i
] = gprs_high
[i
];
288 /* Restore vector registers from signal stack */
289 if (current
->thread
.vxrs
) {
290 if (__copy_from_user(vxrs
, &sregs_ext
->vxrs_low
,
291 sizeof(sregs_ext
->vxrs_low
)) ||
292 __copy_from_user(current
->thread
.vxrs
+ __NUM_VXRS_LOW
,
293 &sregs_ext
->vxrs_high
,
294 sizeof(sregs_ext
->vxrs_high
)))
296 for (i
= 0; i
< __NUM_VXRS_LOW
; i
++)
297 *((__u64
*)(current
->thread
.vxrs
+ i
) + 1) = vxrs
[i
];
302 COMPAT_SYSCALL_DEFINE0(sigreturn
)
304 struct pt_regs
*regs
= task_pt_regs(current
);
305 sigframe32 __user
*frame
= (sigframe32 __user
*)regs
->gprs
[15];
308 if (__copy_from_user(&set
.sig
, &frame
->sc
.oldmask
, _SIGMASK_COPY_SIZE32
))
310 set_current_blocked(&set
);
311 if (restore_sigregs32(regs
, &frame
->sregs
))
313 if (restore_sigregs_ext32(regs
, &frame
->sregs_ext
))
316 return regs
->gprs
[2];
318 force_sig(SIGSEGV
, current
);
322 COMPAT_SYSCALL_DEFINE0(rt_sigreturn
)
324 struct pt_regs
*regs
= task_pt_regs(current
);
325 rt_sigframe32 __user
*frame
= (rt_sigframe32 __user
*)regs
->gprs
[15];
328 if (__copy_from_user(&set
, &frame
->uc
.uc_sigmask
, sizeof(set
)))
330 set_current_blocked(&set
);
331 if (compat_restore_altstack(&frame
->uc
.uc_stack
))
333 if (restore_sigregs32(regs
, &frame
->uc
.uc_mcontext
))
335 if (restore_sigregs_ext32(regs
, &frame
->uc
.uc_mcontext_ext
))
338 return regs
->gprs
[2];
340 force_sig(SIGSEGV
, current
);
345 * Set up a signal frame.
350 * Determine which stack to use..
352 static inline void __user
*
353 get_sigframe(struct k_sigaction
*ka
, struct pt_regs
* regs
, size_t frame_size
)
357 /* Default to using normal stack */
358 sp
= (unsigned long) A(regs
->gprs
[15]);
360 /* Overflow on alternate signal stack gives SIGSEGV. */
361 if (on_sig_stack(sp
) && !on_sig_stack((sp
- frame_size
) & -8UL))
362 return (void __user
*) -1UL;
364 /* This is the X/Open sanctioned signal stack switching. */
365 if (ka
->sa
.sa_flags
& SA_ONSTACK
) {
366 if (! sas_ss_flags(sp
))
367 sp
= current
->sas_ss_sp
+ current
->sas_ss_size
;
370 return (void __user
*)((sp
- frame_size
) & -8ul);
373 static int setup_frame32(struct ksignal
*ksig
, sigset_t
*set
,
374 struct pt_regs
*regs
)
377 sigframe32 __user
*frame
;
378 struct sigcontext32 sc
;
379 unsigned long restorer
;
383 * gprs_high are always present for 31-bit compat tasks.
384 * The space for vector registers is only allocated if
385 * the machine supports it
387 frame_size
= sizeof(*frame
) - sizeof(frame
->sregs_ext
.__reserved
);
389 frame_size
-= sizeof(frame
->sregs_ext
.vxrs_low
) +
390 sizeof(frame
->sregs_ext
.vxrs_high
);
391 frame
= get_sigframe(&ksig
->ka
, regs
, frame_size
);
392 if (frame
== (void __user
*) -1UL)
395 /* Set up backchain. */
396 if (__put_user(regs
->gprs
[15], (unsigned int __user
*) frame
))
399 /* Create struct sigcontext32 on the signal stack */
400 memcpy(&sc
.oldmask
, &set
->sig
, _SIGMASK_COPY_SIZE32
);
401 sc
.sregs
= (__u32
)(unsigned long __force
) &frame
->sregs
;
402 if (__copy_to_user(&frame
->sc
, &sc
, sizeof(frame
->sc
)))
405 /* Store registers needed to create the signal frame */
408 /* Create _sigregs32 on the signal stack */
409 if (save_sigregs32(regs
, &frame
->sregs
))
412 /* Place signal number on stack to allow backtrace from handler. */
413 if (__put_user(regs
->gprs
[2], (int __force __user
*) &frame
->signo
))
416 /* Create _sigregs_ext32 on the signal stack */
417 if (save_sigregs_ext32(regs
, &frame
->sregs_ext
))
420 /* Set up to return from userspace. If provided, use a stub
421 already in userspace. */
422 if (ksig
->ka
.sa
.sa_flags
& SA_RESTORER
) {
423 restorer
= (unsigned long __force
)
424 ksig
->ka
.sa
.sa_restorer
| PSW32_ADDR_AMODE
;
426 /* Signal frames without vectors registers are short ! */
427 __u16 __user
*svc
= (void __user
*) frame
+ frame_size
- 2;
428 if (__put_user(S390_SYSCALL_OPCODE
| __NR_sigreturn
, svc
))
430 restorer
= (unsigned long __force
) svc
| PSW32_ADDR_AMODE
;
433 /* Set up registers for signal handler */
434 regs
->gprs
[14] = restorer
;
435 regs
->gprs
[15] = (__force __u64
) frame
;
436 /* Force 31 bit amode and default user address space control. */
437 regs
->psw
.mask
= PSW_MASK_BA
|
438 (PSW_USER_BITS
& PSW_MASK_ASC
) |
439 (regs
->psw
.mask
& ~PSW_MASK_ASC
);
440 regs
->psw
.addr
= (__force __u64
) ksig
->ka
.sa
.sa_handler
;
443 regs
->gprs
[3] = (__force __u64
) &frame
->sc
;
445 /* We forgot to include these in the sigcontext.
446 To avoid breaking binary compatibility, they are passed as args. */
447 if (sig
== SIGSEGV
|| sig
== SIGBUS
|| sig
== SIGILL
||
448 sig
== SIGTRAP
|| sig
== SIGFPE
) {
449 /* set extra registers only for synchronous signals */
450 regs
->gprs
[4] = regs
->int_code
& 127;
451 regs
->gprs
[5] = regs
->int_parm_long
;
452 regs
->gprs
[6] = task_thread_info(current
)->last_break
;
458 static int setup_rt_frame32(struct ksignal
*ksig
, sigset_t
*set
,
459 struct pt_regs
*regs
)
461 rt_sigframe32 __user
*frame
;
462 unsigned long restorer
;
466 frame_size
= sizeof(*frame
) -
467 sizeof(frame
->uc
.uc_mcontext_ext
.__reserved
);
469 * gprs_high are always present for 31-bit compat tasks.
470 * The space for vector registers is only allocated if
471 * the machine supports it
473 uc_flags
= UC_GPRS_HIGH
;
474 if (MACHINE_HAS_VX
) {
475 if (current
->thread
.vxrs
)
478 frame_size
-= sizeof(frame
->uc
.uc_mcontext_ext
.vxrs_low
) +
479 sizeof(frame
->uc
.uc_mcontext_ext
.vxrs_high
);
480 frame
= get_sigframe(&ksig
->ka
, regs
, frame_size
);
481 if (frame
== (void __user
*) -1UL)
484 /* Set up backchain. */
485 if (__put_user(regs
->gprs
[15], (unsigned int __force __user
*) frame
))
488 /* Set up to return from userspace. If provided, use a stub
489 already in userspace. */
490 if (ksig
->ka
.sa
.sa_flags
& SA_RESTORER
) {
491 restorer
= (unsigned long __force
)
492 ksig
->ka
.sa
.sa_restorer
| PSW32_ADDR_AMODE
;
494 __u16 __user
*svc
= &frame
->svc_insn
;
495 if (__put_user(S390_SYSCALL_OPCODE
| __NR_rt_sigreturn
, svc
))
497 restorer
= (unsigned long __force
) svc
| PSW32_ADDR_AMODE
;
500 /* Create siginfo on the signal stack */
501 if (copy_siginfo_to_user32(&frame
->info
, &ksig
->info
))
504 /* Store registers needed to create the signal frame */
507 /* Create ucontext on the signal stack. */
508 if (__put_user(uc_flags
, &frame
->uc
.uc_flags
) ||
509 __put_user(0, &frame
->uc
.uc_link
) ||
510 __compat_save_altstack(&frame
->uc
.uc_stack
, regs
->gprs
[15]) ||
511 save_sigregs32(regs
, &frame
->uc
.uc_mcontext
) ||
512 __copy_to_user(&frame
->uc
.uc_sigmask
, set
, sizeof(*set
)) ||
513 save_sigregs_ext32(regs
, &frame
->uc
.uc_mcontext_ext
))
516 /* Set up registers for signal handler */
517 regs
->gprs
[14] = restorer
;
518 regs
->gprs
[15] = (__force __u64
) frame
;
519 /* Force 31 bit amode and default user address space control. */
520 regs
->psw
.mask
= PSW_MASK_BA
|
521 (PSW_USER_BITS
& PSW_MASK_ASC
) |
522 (regs
->psw
.mask
& ~PSW_MASK_ASC
);
523 regs
->psw
.addr
= (__u64 __force
) ksig
->ka
.sa
.sa_handler
;
525 regs
->gprs
[2] = ksig
->sig
;
526 regs
->gprs
[3] = (__force __u64
) &frame
->info
;
527 regs
->gprs
[4] = (__force __u64
) &frame
->uc
;
528 regs
->gprs
[5] = task_thread_info(current
)->last_break
;
533 * OK, we're invoking a handler
536 void handle_signal32(struct ksignal
*ksig
, sigset_t
*oldset
,
537 struct pt_regs
*regs
)
541 /* Set up the stack frame */
542 if (ksig
->ka
.sa
.sa_flags
& SA_SIGINFO
)
543 ret
= setup_rt_frame32(ksig
, oldset
, regs
);
545 ret
= setup_frame32(ksig
, oldset
, regs
);
547 signal_setup_done(ret
, ksig
, test_thread_flag(TIF_SINGLE_STEP
));