switch signalfd{,4}() to COMPAT_SYSCALL_DEFINE
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
2cf0966683
commit
7d197ed4a6
|
@ -1299,12 +1299,6 @@ ENTRY(compat_sys_utimensat_wrapper)
|
||||||
lgfr %r5,%r5 # int
|
lgfr %r5,%r5 # int
|
||||||
jg compat_sys_utimensat
|
jg compat_sys_utimensat
|
||||||
|
|
||||||
ENTRY(compat_sys_signalfd_wrapper)
|
|
||||||
lgfr %r2,%r2 # int
|
|
||||||
llgtr %r3,%r3 # compat_sigset_t *
|
|
||||||
llgfr %r4,%r4 # compat_size_t
|
|
||||||
jg compat_sys_signalfd
|
|
||||||
|
|
||||||
ENTRY(sys_eventfd_wrapper)
|
ENTRY(sys_eventfd_wrapper)
|
||||||
llgfr %r2,%r2 # unsigned int
|
llgfr %r2,%r2 # unsigned int
|
||||||
jg sys_eventfd
|
jg sys_eventfd
|
||||||
|
@ -1323,13 +1317,6 @@ ENTRY(sys_timerfd_create_wrapper)
|
||||||
lgfr %r3,%r3 # int
|
lgfr %r3,%r3 # int
|
||||||
jg sys_timerfd_create
|
jg sys_timerfd_create
|
||||||
|
|
||||||
ENTRY(compat_sys_signalfd4_wrapper)
|
|
||||||
lgfr %r2,%r2 # int
|
|
||||||
llgtr %r3,%r3 # compat_sigset_t *
|
|
||||||
llgfr %r4,%r4 # compat_size_t
|
|
||||||
lgfr %r5,%r5 # int
|
|
||||||
jg compat_sys_signalfd4
|
|
||||||
|
|
||||||
ENTRY(sys_eventfd2_wrapper)
|
ENTRY(sys_eventfd2_wrapper)
|
||||||
llgfr %r2,%r2 # unsigned int
|
llgfr %r2,%r2 # unsigned int
|
||||||
lgfr %r3,%r3 # int
|
lgfr %r3,%r3 # int
|
||||||
|
|
|
@ -324,13 +324,13 @@ SYSCALL(sys_epoll_pwait,sys_epoll_pwait,compat_sys_epoll_pwait_wrapper)
|
||||||
SYSCALL(sys_utimes,sys_utimes,compat_sys_utimes_wrapper)
|
SYSCALL(sys_utimes,sys_utimes,compat_sys_utimes_wrapper)
|
||||||
SYSCALL(sys_s390_fallocate,sys_fallocate,sys_fallocate_wrapper)
|
SYSCALL(sys_s390_fallocate,sys_fallocate,sys_fallocate_wrapper)
|
||||||
SYSCALL(sys_utimensat,sys_utimensat,compat_sys_utimensat_wrapper) /* 315 */
|
SYSCALL(sys_utimensat,sys_utimensat,compat_sys_utimensat_wrapper) /* 315 */
|
||||||
SYSCALL(sys_signalfd,sys_signalfd,compat_sys_signalfd_wrapper)
|
SYSCALL(sys_signalfd,sys_signalfd,compat_sys_signalfd)
|
||||||
NI_SYSCALL /* 317 old sys_timer_fd */
|
NI_SYSCALL /* 317 old sys_timer_fd */
|
||||||
SYSCALL(sys_eventfd,sys_eventfd,sys_eventfd_wrapper)
|
SYSCALL(sys_eventfd,sys_eventfd,sys_eventfd_wrapper)
|
||||||
SYSCALL(sys_timerfd_create,sys_timerfd_create,sys_timerfd_create_wrapper)
|
SYSCALL(sys_timerfd_create,sys_timerfd_create,sys_timerfd_create_wrapper)
|
||||||
SYSCALL(sys_timerfd_settime,sys_timerfd_settime,compat_sys_timerfd_settime) /* 320 */
|
SYSCALL(sys_timerfd_settime,sys_timerfd_settime,compat_sys_timerfd_settime) /* 320 */
|
||||||
SYSCALL(sys_timerfd_gettime,sys_timerfd_gettime,compat_sys_timerfd_gettime)
|
SYSCALL(sys_timerfd_gettime,sys_timerfd_gettime,compat_sys_timerfd_gettime)
|
||||||
SYSCALL(sys_signalfd4,sys_signalfd4,compat_sys_signalfd4_wrapper)
|
SYSCALL(sys_signalfd4,sys_signalfd4,compat_sys_signalfd4)
|
||||||
SYSCALL(sys_eventfd2,sys_eventfd2,sys_eventfd2_wrapper)
|
SYSCALL(sys_eventfd2,sys_eventfd2,sys_eventfd2_wrapper)
|
||||||
SYSCALL(sys_inotify_init1,sys_inotify_init1,sys_inotify_init1_wrapper)
|
SYSCALL(sys_inotify_init1,sys_inotify_init1,sys_inotify_init1_wrapper)
|
||||||
SYSCALL(sys_pipe2,sys_pipe2,sys_pipe2_wrapper) /* 325 */
|
SYSCALL(sys_pipe2,sys_pipe2,sys_pipe2_wrapper) /* 325 */
|
||||||
|
|
30
fs/compat.c
30
fs/compat.c
|
@ -1707,36 +1707,6 @@ asmlinkage long compat_sys_epoll_pwait(int epfd,
|
||||||
|
|
||||||
#endif /* CONFIG_EPOLL */
|
#endif /* CONFIG_EPOLL */
|
||||||
|
|
||||||
#ifdef CONFIG_SIGNALFD
|
|
||||||
|
|
||||||
asmlinkage long compat_sys_signalfd4(int ufd,
|
|
||||||
const compat_sigset_t __user *sigmask,
|
|
||||||
compat_size_t sigsetsize, int flags)
|
|
||||||
{
|
|
||||||
compat_sigset_t ss32;
|
|
||||||
sigset_t tmp;
|
|
||||||
sigset_t __user *ksigmask;
|
|
||||||
|
|
||||||
if (sigsetsize != sizeof(compat_sigset_t))
|
|
||||||
return -EINVAL;
|
|
||||||
if (copy_from_user(&ss32, sigmask, sizeof(ss32)))
|
|
||||||
return -EFAULT;
|
|
||||||
sigset_from_compat(&tmp, &ss32);
|
|
||||||
ksigmask = compat_alloc_user_space(sizeof(sigset_t));
|
|
||||||
if (copy_to_user(ksigmask, &tmp, sizeof(sigset_t)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
return sys_signalfd4(ufd, ksigmask, sizeof(sigset_t), flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
asmlinkage long compat_sys_signalfd(int ufd,
|
|
||||||
const compat_sigset_t __user *sigmask,
|
|
||||||
compat_size_t sigsetsize)
|
|
||||||
{
|
|
||||||
return compat_sys_signalfd4(ufd, sigmask, sigsetsize, 0);
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_SIGNALFD */
|
|
||||||
|
|
||||||
#ifdef CONFIG_FHANDLE
|
#ifdef CONFIG_FHANDLE
|
||||||
/*
|
/*
|
||||||
* Exactly like fs/open.c:sys_open_by_handle_at(), except that it
|
* Exactly like fs/open.c:sys_open_by_handle_at(), except that it
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <linux/signalfd.h>
|
#include <linux/signalfd.h>
|
||||||
#include <linux/syscalls.h>
|
#include <linux/syscalls.h>
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
|
|
||||||
void signalfd_cleanup(struct sighand_struct *sighand)
|
void signalfd_cleanup(struct sighand_struct *sighand)
|
||||||
{
|
{
|
||||||
|
@ -311,3 +312,33 @@ SYSCALL_DEFINE3(signalfd, int, ufd, sigset_t __user *, user_mask,
|
||||||
{
|
{
|
||||||
return sys_signalfd4(ufd, user_mask, sizemask, 0);
|
return sys_signalfd4(ufd, user_mask, sizemask, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_COMPAT
|
||||||
|
COMPAT_SYSCALL_DEFINE4(signalfd4, int, ufd,
|
||||||
|
const compat_sigset_t __user *,sigmask,
|
||||||
|
compat_size_t, sigsetsize,
|
||||||
|
int, flags)
|
||||||
|
{
|
||||||
|
compat_sigset_t ss32;
|
||||||
|
sigset_t tmp;
|
||||||
|
sigset_t __user *ksigmask;
|
||||||
|
|
||||||
|
if (sigsetsize != sizeof(compat_sigset_t))
|
||||||
|
return -EINVAL;
|
||||||
|
if (copy_from_user(&ss32, sigmask, sizeof(ss32)))
|
||||||
|
return -EFAULT;
|
||||||
|
sigset_from_compat(&tmp, &ss32);
|
||||||
|
ksigmask = compat_alloc_user_space(sizeof(sigset_t));
|
||||||
|
if (copy_to_user(ksigmask, &tmp, sizeof(sigset_t)))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
return sys_signalfd4(ufd, ksigmask, sizeof(sigset_t), flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
COMPAT_SYSCALL_DEFINE3(signalfd, int, ufd,
|
||||||
|
const compat_sigset_t __user *,sigmask,
|
||||||
|
compat_size_t, sigsetsize)
|
||||||
|
{
|
||||||
|
return compat_sys_signalfd4(ufd, sigmask, sigsetsize, 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue