提交 3644bc2e 编写于 作者: L Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal

Pull stray syscall bits from Al Viro:
 "Several syscall-related commits that were missing from the original"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
  switch compat_sys_sysctl to COMPAT_SYSCALL_DEFINE
  unicore32: just use mmap_pgoff()...
  unify compat fanotify_mark(2), switch to COMPAT_SYSCALL_DEFINE
  x86, vm86: fix VM86 syscalls: use SYSCALL_DEFINEx(...)
...@@ -389,7 +389,7 @@ __SYSCALL(364, sys_perf_event_open) ...@@ -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: ...@@ -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, ...@@ -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: ...@@ -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, ...@@ -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, ...@@ -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);
}
...@@ -793,10 +793,6 @@ ENTRY(sys32_stime_wrapper) ...@@ -793,10 +793,6 @@ ENTRY(sys32_stime_wrapper)
llgtr %r2,%r2 # long * llgtr %r2,%r2 # long *
jg compat_sys_stime # branch to system call jg compat_sys_stime # branch to system call
ENTRY(sys32_sysctl_wrapper)
llgtr %r2,%r2 # struct compat_sysctl_args *
jg compat_sys_sysctl
ENTRY(sys32_fstat64_wrapper) ENTRY(sys32_fstat64_wrapper)
llgfr %r2,%r2 # unsigned long llgfr %r2,%r2 # unsigned long
llgtr %r3,%r3 # struct stat64 * llgtr %r3,%r3 # struct stat64 *
...@@ -1349,15 +1345,6 @@ ENTRY(sys_fanotify_init_wrapper) ...@@ -1349,15 +1345,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
......
...@@ -157,7 +157,7 @@ SYSCALL(sys_readv,sys_readv,compat_sys_readv_wrapper) /* 145 */ ...@@ -157,7 +157,7 @@ SYSCALL(sys_readv,sys_readv,compat_sys_readv_wrapper) /* 145 */
SYSCALL(sys_writev,sys_writev,compat_sys_writev_wrapper) SYSCALL(sys_writev,sys_writev,compat_sys_writev_wrapper)
SYSCALL(sys_getsid,sys_getsid,sys32_getsid_wrapper) SYSCALL(sys_getsid,sys_getsid,sys32_getsid_wrapper)
SYSCALL(sys_fdatasync,sys_fdatasync,sys32_fdatasync_wrapper) SYSCALL(sys_fdatasync,sys_fdatasync,sys32_fdatasync_wrapper)
SYSCALL(sys_sysctl,sys_sysctl,sys32_sysctl_wrapper) SYSCALL(sys_sysctl,sys_sysctl,compat_sys_sysctl)
SYSCALL(sys_mlock,sys_mlock,sys32_mlock_wrapper) /* 150 */ SYSCALL(sys_mlock,sys_mlock,sys32_mlock_wrapper) /* 150 */
SYSCALL(sys_munlock,sys_munlock,sys32_munlock_wrapper) SYSCALL(sys_munlock,sys_munlock,sys32_munlock_wrapper)
SYSCALL(sys_mlockall,sys_mlockall,sys32_mlockall_wrapper) SYSCALL(sys_mlockall,sys_mlockall,sys32_mlockall_wrapper)
...@@ -341,7 +341,7 @@ SYSCALL(sys_pwritev,sys_pwritev,compat_sys_pwritev) ...@@ -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) */ ...@@ -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: ...@@ -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
......
...@@ -28,19 +28,11 @@ ...@@ -28,19 +28,11 @@
#include <asm/syscalls.h> #include <asm/syscalls.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
/* Note: used by the compat code even in 64-bit Linux. */
SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len,
unsigned long, prot, unsigned long, flags,
unsigned long, fd, unsigned long, off_4k)
{
return sys_mmap_pgoff(addr, len, prot, flags, fd,
off_4k);
}
/* Provide the actual syscall number to call mapping. */ /* Provide the actual syscall number to call mapping. */
#undef __SYSCALL #undef __SYSCALL
#define __SYSCALL(nr, call) [nr] = (call), #define __SYSCALL(nr, call) [nr] = (call),
#define sys_mmap2 sys_mmap_pgoff
/* Note that we don't include <linux/unistd.h> but <asm/unistd.h> */ /* Note that we don't include <linux/unistd.h> but <asm/unistd.h> */
void *sys_call_table[__NR_syscalls] = { void *sys_call_table[__NR_syscalls] = {
[0 ... __NR_syscalls-1] = sys_ni_syscall, [0 ... __NR_syscalls-1] = sys_ni_syscall,
......
...@@ -243,12 +243,3 @@ asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_lo, ...@@ -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, ...@@ -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 */
...@@ -37,8 +37,8 @@ asmlinkage long sys_get_thread_area(struct user_desc __user *); ...@@ -37,8 +37,8 @@ asmlinkage long sys_get_thread_area(struct user_desc __user *);
unsigned long sys_sigreturn(void); unsigned long sys_sigreturn(void);
/* kernel/vm86_32.c */ /* kernel/vm86_32.c */
int sys_vm86old(struct vm86_struct __user *); asmlinkage long sys_vm86old(struct vm86_struct __user *);
int sys_vm86(unsigned long, unsigned long); asmlinkage long sys_vm86(unsigned long, unsigned long);
#else /* CONFIG_X86_32 */ #else /* CONFIG_X86_32 */
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/capability.h> #include <linux/capability.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/syscalls.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/signal.h> #include <linux/signal.h>
...@@ -48,7 +49,6 @@ ...@@ -48,7 +49,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/syscalls.h>
/* /*
* Known problems: * Known problems:
...@@ -202,36 +202,32 @@ static void mark_screen_rdonly(struct mm_struct *mm) ...@@ -202,36 +202,32 @@ static void mark_screen_rdonly(struct mm_struct *mm)
static int do_vm86_irq_handling(int subfunction, int irqnumber); static int do_vm86_irq_handling(int subfunction, int irqnumber);
static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk); static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk);
int sys_vm86old(struct vm86_struct __user *v86) SYSCALL_DEFINE1(vm86old, struct vm86_struct __user *, v86)
{ {
struct kernel_vm86_struct info; /* declare this _on top_, struct kernel_vm86_struct info; /* declare this _on top_,
* this avoids wasting of stack space. * this avoids wasting of stack space.
* This remains on the stack until we * This remains on the stack until we
* return to 32 bit user space. * return to 32 bit user space.
*/ */
struct task_struct *tsk; struct task_struct *tsk = current;
int tmp, ret = -EPERM; int tmp;
tsk = current;
if (tsk->thread.saved_sp0) if (tsk->thread.saved_sp0)
goto out; return -EPERM;
tmp = copy_vm86_regs_from_user(&info.regs, &v86->regs, tmp = copy_vm86_regs_from_user(&info.regs, &v86->regs,
offsetof(struct kernel_vm86_struct, vm86plus) - offsetof(struct kernel_vm86_struct, vm86plus) -
sizeof(info.regs)); sizeof(info.regs));
ret = -EFAULT;
if (tmp) if (tmp)
goto out; return -EFAULT;
memset(&info.vm86plus, 0, (int)&info.regs32 - (int)&info.vm86plus); memset(&info.vm86plus, 0, (int)&info.regs32 - (int)&info.vm86plus);
info.regs32 = current_pt_regs(); info.regs32 = current_pt_regs();
tsk->thread.vm86_info = v86; tsk->thread.vm86_info = v86;
do_sys_vm86(&info, tsk); do_sys_vm86(&info, tsk);
ret = 0; /* we never return here */ return 0; /* we never return here */
out:
return ret;
} }
int sys_vm86(unsigned long cmd, unsigned long arg) SYSCALL_DEFINE2(vm86, unsigned long, cmd, unsigned long, arg)
{ {
struct kernel_vm86_struct info; /* declare this _on top_, struct kernel_vm86_struct info; /* declare this _on top_,
* this avoids wasting of stack space. * this avoids wasting of stack space.
...@@ -239,7 +235,7 @@ int sys_vm86(unsigned long cmd, unsigned long arg) ...@@ -239,7 +235,7 @@ int sys_vm86(unsigned long cmd, unsigned long arg)
* return to 32 bit user space. * return to 32 bit user space.
*/ */
struct task_struct *tsk; struct task_struct *tsk;
int tmp, ret; int tmp;
struct vm86plus_struct __user *v86; struct vm86plus_struct __user *v86;
tsk = current; tsk = current;
...@@ -248,8 +244,7 @@ int sys_vm86(unsigned long cmd, unsigned long arg) ...@@ -248,8 +244,7 @@ int sys_vm86(unsigned long cmd, unsigned long arg)
case VM86_FREE_IRQ: case VM86_FREE_IRQ:
case VM86_GET_IRQ_BITS: case VM86_GET_IRQ_BITS:
case VM86_GET_AND_RESET_IRQ: case VM86_GET_AND_RESET_IRQ:
ret = do_vm86_irq_handling(cmd, (int)arg); return do_vm86_irq_handling(cmd, (int)arg);
goto out;
case VM86_PLUS_INSTALL_CHECK: case VM86_PLUS_INSTALL_CHECK:
/* /*
* NOTE: on old vm86 stuff this will return the error * NOTE: on old vm86 stuff this will return the error
...@@ -257,28 +252,23 @@ int sys_vm86(unsigned long cmd, unsigned long arg) ...@@ -257,28 +252,23 @@ int sys_vm86(unsigned long cmd, unsigned long arg)
* interpreted as (invalid) address to vm86_struct. * interpreted as (invalid) address to vm86_struct.
* So the installation check works. * So the installation check works.
*/ */
ret = 0; return 0;
goto out;
} }
/* we come here only for functions VM86_ENTER, VM86_ENTER_NO_BYPASS */ /* we come here only for functions VM86_ENTER, VM86_ENTER_NO_BYPASS */
ret = -EPERM;
if (tsk->thread.saved_sp0) if (tsk->thread.saved_sp0)
goto out; return -EPERM;
v86 = (struct vm86plus_struct __user *)arg; v86 = (struct vm86plus_struct __user *)arg;
tmp = copy_vm86_regs_from_user(&info.regs, &v86->regs, tmp = copy_vm86_regs_from_user(&info.regs, &v86->regs,
offsetof(struct kernel_vm86_struct, regs32) - offsetof(struct kernel_vm86_struct, regs32) -
sizeof(info.regs)); sizeof(info.regs));
ret = -EFAULT;
if (tmp) if (tmp)
goto out; return -EFAULT;
info.regs32 = current_pt_regs(); info.regs32 = current_pt_regs();
info.vm86plus.is_vm86pus = 1; info.vm86plus.is_vm86pus = 1;
tsk->thread.vm86_info = (struct vm86_struct __user *)v86; tsk->thread.vm86_info = (struct vm86_struct __user *)v86;
do_sys_vm86(&info, tsk); do_sys_vm86(&info, tsk);
ret = 0; /* we never return here */ return 0; /* we never return here */
out:
return ret;
} }
......
...@@ -345,7 +345,7 @@ ...@@ -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 @@ ...@@ -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, ...@@ -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); ...@@ -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); ...@@ -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);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/compat.h>
#ifdef CONFIG_SYSCTL_SYSCALL #ifdef CONFIG_SYSCTL_SYSCALL
...@@ -1447,7 +1448,6 @@ SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args) ...@@ -1447,7 +1448,6 @@ SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args)
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
#include <asm/compat.h>
struct compat_sysctl_args { struct compat_sysctl_args {
compat_uptr_t name; compat_uptr_t name;
...@@ -1459,7 +1459,7 @@ struct compat_sysctl_args { ...@@ -1459,7 +1459,7 @@ struct compat_sysctl_args {
compat_ulong_t __unused[4]; compat_ulong_t __unused[4];
}; };
asmlinkage long compat_sys_sysctl(struct compat_sysctl_args __user *args) COMPAT_SYSCALL_DEFINE1(sysctl, struct compat_sysctl_args __user *, args)
{ {
struct compat_sysctl_args tmp; struct compat_sysctl_args tmp;
compat_size_t __user *compat_oldlenp; compat_size_t __user *compat_oldlenp;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册