forked from Minki/linux
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>
This commit is contained in:
parent
eaca6eae3e
commit
ad4b65a434
@ -1067,23 +1067,6 @@ asmlinkage long compat_sys_stime(compat_time_t __user *tptr)
|
||||
|
||||
#endif /* __ARCH_WANT_COMPAT_SYS_TIME */
|
||||
|
||||
#ifdef __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
|
||||
asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, compat_size_t sigsetsize)
|
||||
{
|
||||
sigset_t newset;
|
||||
compat_sigset_t newset32;
|
||||
|
||||
/* XXX: Don't preclude handling different sized sigset_t's. */
|
||||
if (sigsetsize != sizeof(sigset_t))
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(&newset32, unewset, sizeof(compat_sigset_t)))
|
||||
return -EFAULT;
|
||||
sigset_from_compat(&newset, &newset32);
|
||||
return sigsuspend(&newset);
|
||||
}
|
||||
#endif /* __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND */
|
||||
|
||||
asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp)
|
||||
{
|
||||
struct timex txc;
|
||||
|
@ -3352,7 +3352,29 @@ SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize)
|
||||
return -EFAULT;
|
||||
return sigsuspend(&newset);
|
||||
}
|
||||
#endif /* __ARCH_WANT_SYS_RT_SIGSUSPEND */
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
COMPAT_SYSCALL_DEFINE2(rt_sigsuspend, compat_sigset_t __user *, unewset, compat_size_t, sigsetsize)
|
||||
{
|
||||
#ifdef __BIG_ENDIAN
|
||||
sigset_t newset;
|
||||
compat_sigset_t newset32;
|
||||
|
||||
/* XXX: Don't preclude handling different sized sigset_t's. */
|
||||
if (sigsetsize != sizeof(sigset_t))
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(&newset32, unewset, sizeof(compat_sigset_t)))
|
||||
return -EFAULT;
|
||||
sigset_from_compat(&newset, &newset32);
|
||||
return sigsuspend(&newset);
|
||||
#else
|
||||
/* on little-endian bitmaps don't care about granularity */
|
||||
return sys_rt_sigsuspend((sigset_t __user *)unewset, sigsetsize);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user