summaryrefslogtreecommitdiffstats
path: root/kernel/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/signal.c')
-rw-r--r--kernel/signal.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/kernel/signal.c b/kernel/signal.c
index 00cd1ce998be..4a0934e03d5c 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -3352,7 +3352,29 @@ SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize)
3352 return -EFAULT; 3352 return -EFAULT;
3353 return sigsuspend(&newset); 3353 return sigsuspend(&newset);
3354} 3354}
3355#endif /* __ARCH_WANT_SYS_RT_SIGSUSPEND */ 3355
3356#ifdef CONFIG_COMPAT
3357COMPAT_SYSCALL_DEFINE2(rt_sigsuspend, compat_sigset_t __user *, unewset, compat_size_t, sigsetsize)
3358{
3359#ifdef __BIG_ENDIAN
3360 sigset_t newset;
3361 compat_sigset_t newset32;
3362
3363 /* XXX: Don't preclude handling different sized sigset_t's. */
3364 if (sigsetsize != sizeof(sigset_t))
3365 return -EINVAL;
3366
3367 if (copy_from_user(&newset32, unewset, sizeof(compat_sigset_t)))
3368 return -EFAULT;
3369 sigset_from_compat(&newset, &newset32);
3370 return sigsuspend(&newset);
3371#else
3372 /* on little-endian bitmaps don't care about granularity */
3373 return sys_rt_sigsuspend((sigset_t __user *)unewset, sigsetsize);
3374#endif
3375}
3376#endif
3377#endif
3356 3378
3357__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma) 3379__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
3358{ 3380{