aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-12-24 21:43:56 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2013-02-03 15:09:18 -0500
commitad4b65a434bdd2ff37d095ab1ccd836203e985ba (patch)
tree8e5582b9fe0e867b6ab8d317976b93d864f0bde1 /kernel
parenteaca6eae3e0c41d41fcb9d1d70e00934988dff2e (diff)
consolidate rt_sigsuspend()
* pull compat version alongside with the native one * make little-endian compat variant just call the native * don't bother with separate conditional for compat (both native and compat are going to become unconditional very soon). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/compat.c17
-rw-r--r--kernel/signal.c24
2 files changed, 23 insertions, 18 deletions
diff --git a/kernel/compat.c b/kernel/compat.c
index adf7646343da..0c07d435254f 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -1067,23 +1067,6 @@ asmlinkage long compat_sys_stime(compat_time_t __user *tptr)
1067 1067
1068#endif /* __ARCH_WANT_COMPAT_SYS_TIME */ 1068#endif /* __ARCH_WANT_COMPAT_SYS_TIME */
1069 1069
1070#ifdef __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
1071asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, compat_size_t sigsetsize)
1072{
1073 sigset_t newset;
1074 compat_sigset_t newset32;
1075
1076 /* XXX: Don't preclude handling different sized sigset_t's. */
1077 if (sigsetsize != sizeof(sigset_t))
1078 return -EINVAL;
1079
1080 if (copy_from_user(&newset32, unewset, sizeof(compat_sigset_t)))
1081 return -EFAULT;
1082 sigset_from_compat(&newset, &newset32);
1083 return sigsuspend(&newset);
1084}
1085#endif /* __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND */
1086
1087asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp) 1070asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp)
1088{ 1071{
1089 struct timex txc; 1072 struct timex txc;
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{