mirror of https://gitee.com/openkylin/linux.git
unify compat fanotify_mark(2), switch to COMPAT_SYSCALL_DEFINE
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
5522ddb3fc
commit
91c2e0bcae
|
@ -389,7 +389,7 @@ __SYSCALL(364, sys_perf_event_open)
|
||||||
__SYSCALL(365, compat_sys_recvmmsg)
|
__SYSCALL(365, compat_sys_recvmmsg)
|
||||||
__SYSCALL(366, sys_accept4)
|
__SYSCALL(366, sys_accept4)
|
||||||
__SYSCALL(367, sys_fanotify_init)
|
__SYSCALL(367, sys_fanotify_init)
|
||||||
__SYSCALL(368, compat_sys_fanotify_mark_wrapper)
|
__SYSCALL(368, compat_sys_fanotify_mark)
|
||||||
__SYSCALL(369, sys_prlimit64)
|
__SYSCALL(369, sys_prlimit64)
|
||||||
__SYSCALL(370, sys_name_to_handle_at)
|
__SYSCALL(370, sys_name_to_handle_at)
|
||||||
__SYSCALL(371, compat_sys_open_by_handle_at)
|
__SYSCALL(371, compat_sys_open_by_handle_at)
|
||||||
|
|
|
@ -104,13 +104,6 @@ compat_sys_fallocate_wrapper:
|
||||||
b sys_fallocate
|
b sys_fallocate
|
||||||
ENDPROC(compat_sys_fallocate_wrapper)
|
ENDPROC(compat_sys_fallocate_wrapper)
|
||||||
|
|
||||||
compat_sys_fanotify_mark_wrapper:
|
|
||||||
orr x2, x2, x3, lsl #32
|
|
||||||
mov w3, w4
|
|
||||||
mov w4, w5
|
|
||||||
b sys_fanotify_mark
|
|
||||||
ENDPROC(compat_sys_fanotify_mark_wrapper)
|
|
||||||
|
|
||||||
#undef __SYSCALL
|
#undef __SYSCALL
|
||||||
#define __SYSCALL(x, y) .quad y // x
|
#define __SYSCALL(x, y) .quad y // x
|
||||||
|
|
||||||
|
|
|
@ -165,10 +165,3 @@ asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_a2,
|
||||||
return sys_fallocate(fd, mode, merge_64(offset_a2, offset_a3),
|
return sys_fallocate(fd, mode, merge_64(offset_a2, offset_a3),
|
||||||
merge_64(len_a4, len_a5));
|
merge_64(len_a4, len_a5));
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSCALL_DEFINE6(32_fanotify_mark, int, fanotify_fd, unsigned int, flags,
|
|
||||||
u64, a3, u64, a4, int, dfd, const char __user *, pathname)
|
|
||||||
{
|
|
||||||
return sys_fanotify_mark(fanotify_fd, flags, merge_64(a3, a4),
|
|
||||||
dfd, pathname);
|
|
||||||
}
|
|
||||||
|
|
|
@ -529,7 +529,7 @@ sys_call_table:
|
||||||
PTR sys_accept4
|
PTR sys_accept4
|
||||||
PTR compat_sys_recvmmsg /* 4335 */
|
PTR compat_sys_recvmmsg /* 4335 */
|
||||||
PTR sys_fanotify_init
|
PTR sys_fanotify_init
|
||||||
PTR sys_32_fanotify_mark
|
PTR compat_sys_fanotify_mark
|
||||||
PTR sys_prlimit64
|
PTR sys_prlimit64
|
||||||
PTR sys_name_to_handle_at
|
PTR sys_name_to_handle_at
|
||||||
PTR compat_sys_open_by_handle_at /* 4340 */
|
PTR compat_sys_open_by_handle_at /* 4340 */
|
||||||
|
|
|
@ -59,11 +59,3 @@ asmlinkage long sys32_unimplemented(int r26, int r25, int r24, int r23,
|
||||||
current->comm, current->pid, r20);
|
current->comm, current->pid, r20);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long compat_sys_fanotify_mark(int fan_fd, int flags, u32 mask_hi,
|
|
||||||
u32 mask_lo, int fd,
|
|
||||||
const char __user *pathname)
|
|
||||||
{
|
|
||||||
return sys_fanotify_mark(fan_fd, flags, ((u64)mask_hi << 32) | mask_lo,
|
|
||||||
fd, pathname);
|
|
||||||
}
|
|
||||||
|
|
|
@ -126,11 +126,3 @@ asmlinkage long compat_sys_sync_file_range2(int fd, unsigned int flags,
|
||||||
|
|
||||||
return sys_sync_file_range(fd, offset, nbytes, flags);
|
return sys_sync_file_range(fd, offset, nbytes, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long compat_sys_fanotify_mark(int fanotify_fd, unsigned int flags,
|
|
||||||
unsigned mask_hi, unsigned mask_lo,
|
|
||||||
int dfd, const char __user *pathname)
|
|
||||||
{
|
|
||||||
u64 mask = ((u64)mask_hi << 32) | mask_lo;
|
|
||||||
return sys_fanotify_mark(fanotify_fd, flags, mask, dfd, pathname);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1349,15 +1349,6 @@ ENTRY(sys_fanotify_init_wrapper)
|
||||||
llgfr %r3,%r3 # unsigned int
|
llgfr %r3,%r3 # unsigned int
|
||||||
jg sys_fanotify_init # branch to system call
|
jg sys_fanotify_init # branch to system call
|
||||||
|
|
||||||
ENTRY(sys_fanotify_mark_wrapper)
|
|
||||||
lgfr %r2,%r2 # int
|
|
||||||
llgfr %r3,%r3 # unsigned int
|
|
||||||
sllg %r4,%r4,32 # get high word of 64bit mask
|
|
||||||
lr %r4,%r5 # get low word of 64bit mask
|
|
||||||
llgfr %r5,%r6 # unsigned int
|
|
||||||
llgt %r6,164(%r15) # char *
|
|
||||||
jg sys_fanotify_mark # branch to system call
|
|
||||||
|
|
||||||
ENTRY(sys_prlimit64_wrapper)
|
ENTRY(sys_prlimit64_wrapper)
|
||||||
lgfr %r2,%r2 # pid_t
|
lgfr %r2,%r2 # pid_t
|
||||||
llgfr %r3,%r3 # unsigned int
|
llgfr %r3,%r3 # unsigned int
|
||||||
|
|
|
@ -341,7 +341,7 @@ SYSCALL(sys_pwritev,sys_pwritev,compat_sys_pwritev)
|
||||||
SYSCALL(sys_rt_tgsigqueueinfo,sys_rt_tgsigqueueinfo,compat_sys_rt_tgsigqueueinfo) /* 330 */
|
SYSCALL(sys_rt_tgsigqueueinfo,sys_rt_tgsigqueueinfo,compat_sys_rt_tgsigqueueinfo) /* 330 */
|
||||||
SYSCALL(sys_perf_event_open,sys_perf_event_open,sys_perf_event_open_wrapper)
|
SYSCALL(sys_perf_event_open,sys_perf_event_open,sys_perf_event_open_wrapper)
|
||||||
SYSCALL(sys_fanotify_init,sys_fanotify_init,sys_fanotify_init_wrapper)
|
SYSCALL(sys_fanotify_init,sys_fanotify_init,sys_fanotify_init_wrapper)
|
||||||
SYSCALL(sys_fanotify_mark,sys_fanotify_mark,sys_fanotify_mark_wrapper)
|
SYSCALL(sys_fanotify_mark,sys_fanotify_mark,compat_sys_fanotify_mark)
|
||||||
SYSCALL(sys_prlimit64,sys_prlimit64,sys_prlimit64_wrapper)
|
SYSCALL(sys_prlimit64,sys_prlimit64,sys_prlimit64_wrapper)
|
||||||
SYSCALL(sys_name_to_handle_at,sys_name_to_handle_at,sys_name_to_handle_at_wrapper) /* 335 */
|
SYSCALL(sys_name_to_handle_at,sys_name_to_handle_at,sys_name_to_handle_at_wrapper) /* 335 */
|
||||||
SYSCALL(sys_open_by_handle_at,sys_open_by_handle_at,compat_sys_open_by_handle_at)
|
SYSCALL(sys_open_by_handle_at,sys_open_by_handle_at,compat_sys_open_by_handle_at)
|
||||||
|
|
|
@ -239,15 +239,6 @@ do_sys_accept4: /* sys_accept4(int, struct sockaddr *, int *, int) */
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
.globl sys32_fanotify_mark
|
|
||||||
sys32_fanotify_mark:
|
|
||||||
sethi %hi(sys_fanotify_mark), %g1
|
|
||||||
sllx %o2, 32, %o2
|
|
||||||
or %o2, %o3, %o2
|
|
||||||
mov %o4, %o3
|
|
||||||
jmpl %g1 + %lo(sys_fanotify_mark), %g0
|
|
||||||
mov %o5, %o4
|
|
||||||
|
|
||||||
.section __ex_table,"a"
|
.section __ex_table,"a"
|
||||||
.align 4
|
.align 4
|
||||||
.word 1b, __retl_efault, 2b, __retl_efault
|
.word 1b, __retl_efault, 2b, __retl_efault
|
||||||
|
|
|
@ -84,7 +84,7 @@ sys_call_table32:
|
||||||
.word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1
|
.word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1
|
||||||
/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv
|
/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv
|
||||||
.word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_event_open, compat_sys_recvmmsg, sys_fanotify_init
|
.word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_event_open, compat_sys_recvmmsg, sys_fanotify_init
|
||||||
/*330*/ .word sys32_fanotify_mark, sys_prlimit64, sys_name_to_handle_at, compat_sys_open_by_handle_at, compat_sys_clock_adjtime
|
/*330*/ .word compat_sys_fanotify_mark, sys_prlimit64, sys_name_to_handle_at, compat_sys_open_by_handle_at, compat_sys_clock_adjtime
|
||||||
.word sys_syncfs, compat_sys_sendmmsg, sys_setns, compat_sys_process_vm_readv, compat_sys_process_vm_writev
|
.word sys_syncfs, compat_sys_sendmmsg, sys_setns, compat_sys_process_vm_readv, compat_sys_process_vm_writev
|
||||||
/*340*/ .word sys_kern_features, sys_kcmp, sys_finit_module
|
/*340*/ .word sys_kern_features, sys_kcmp, sys_finit_module
|
||||||
|
|
||||||
|
|
|
@ -243,12 +243,3 @@ asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_lo,
|
||||||
return sys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo,
|
return sys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo,
|
||||||
((u64)len_hi << 32) | len_lo);
|
((u64)len_hi << 32) | len_lo);
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long sys32_fanotify_mark(int fanotify_fd, unsigned int flags,
|
|
||||||
u32 mask_lo, u32 mask_hi,
|
|
||||||
int fd, const char __user *pathname)
|
|
||||||
{
|
|
||||||
return sys_fanotify_mark(fanotify_fd, flags,
|
|
||||||
((u64)mask_hi << 32) | mask_lo,
|
|
||||||
fd, pathname);
|
|
||||||
}
|
|
||||||
|
|
|
@ -50,9 +50,6 @@ asmlinkage long sys32_fallocate(int, int, unsigned,
|
||||||
asmlinkage long sys32_sigreturn(void);
|
asmlinkage long sys32_sigreturn(void);
|
||||||
asmlinkage long sys32_rt_sigreturn(void);
|
asmlinkage long sys32_rt_sigreturn(void);
|
||||||
|
|
||||||
asmlinkage long sys32_fanotify_mark(int, unsigned int, u32, u32, int,
|
|
||||||
const char __user *);
|
|
||||||
|
|
||||||
#endif /* CONFIG_COMPAT */
|
#endif /* CONFIG_COMPAT */
|
||||||
|
|
||||||
#endif /* _ASM_X86_SYS_IA32_H */
|
#endif /* _ASM_X86_SYS_IA32_H */
|
||||||
|
|
|
@ -345,7 +345,7 @@
|
||||||
336 i386 perf_event_open sys_perf_event_open
|
336 i386 perf_event_open sys_perf_event_open
|
||||||
337 i386 recvmmsg sys_recvmmsg compat_sys_recvmmsg
|
337 i386 recvmmsg sys_recvmmsg compat_sys_recvmmsg
|
||||||
338 i386 fanotify_init sys_fanotify_init
|
338 i386 fanotify_init sys_fanotify_init
|
||||||
339 i386 fanotify_mark sys_fanotify_mark sys32_fanotify_mark
|
339 i386 fanotify_mark sys_fanotify_mark compat_sys_fanotify_mark
|
||||||
340 i386 prlimit64 sys_prlimit64
|
340 i386 prlimit64 sys_prlimit64
|
||||||
341 i386 name_to_handle_at sys_name_to_handle_at
|
341 i386 name_to_handle_at sys_name_to_handle_at
|
||||||
342 i386 open_by_handle_at sys_open_by_handle_at compat_sys_open_by_handle_at
|
342 i386 open_by_handle_at sys_open_by_handle_at compat_sys_open_by_handle_at
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
|
|
||||||
#include <asm/ioctls.h>
|
#include <asm/ioctls.h>
|
||||||
|
|
||||||
|
@ -857,6 +858,22 @@ SYSCALL_DEFINE5(fanotify_mark, int, fanotify_fd, unsigned int, flags,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_COMPAT
|
||||||
|
COMPAT_SYSCALL_DEFINE6(fanotify_mark,
|
||||||
|
int, fanotify_fd, unsigned int, flags,
|
||||||
|
__u32, mask0, __u32, mask1, int, dfd,
|
||||||
|
const char __user *, pathname)
|
||||||
|
{
|
||||||
|
return sys_fanotify_mark(fanotify_fd, flags,
|
||||||
|
#ifdef __BIG_ENDIAN
|
||||||
|
((__u64)mask1 << 32) | mask0,
|
||||||
|
#else
|
||||||
|
((__u64)mask0 << 32) | mask1,
|
||||||
|
#endif
|
||||||
|
dfd, pathname);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fanotify_user_setup - Our initialization function. Note that we cannot return
|
* fanotify_user_setup - Our initialization function. Note that we cannot return
|
||||||
* error because we have compiled-in VFS hooks. So an (unlikely) failure here
|
* error because we have compiled-in VFS hooks. So an (unlikely) failure here
|
||||||
|
|
|
@ -673,6 +673,8 @@ int __compat_save_altstack(compat_stack_t __user *, unsigned long);
|
||||||
asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid,
|
asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid,
|
||||||
struct compat_timespec __user *interval);
|
struct compat_timespec __user *interval);
|
||||||
|
|
||||||
|
asmlinkage long compat_sys_fanotify_mark(int, unsigned int, __u32, __u32,
|
||||||
|
int, const char __user *);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define is_compat_task() (0)
|
#define is_compat_task() (0)
|
||||||
|
|
|
@ -200,6 +200,7 @@ cond_syscall(sys_perf_event_open);
|
||||||
/* fanotify! */
|
/* fanotify! */
|
||||||
cond_syscall(sys_fanotify_init);
|
cond_syscall(sys_fanotify_init);
|
||||||
cond_syscall(sys_fanotify_mark);
|
cond_syscall(sys_fanotify_mark);
|
||||||
|
cond_syscall(compat_sys_fanotify_mark);
|
||||||
|
|
||||||
/* open by handle */
|
/* open by handle */
|
||||||
cond_syscall(sys_name_to_handle_at);
|
cond_syscall(sys_name_to_handle_at);
|
||||||
|
|
Loading…
Reference in New Issue