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
					
				
			
		
					 16 changed files with 25 additions and 65 deletions
				
			
		| 
						 | 
				
			
			@ -389,7 +389,7 @@ __SYSCALL(364, sys_perf_event_open)
 | 
			
		|||
__SYSCALL(365, compat_sys_recvmmsg)
 | 
			
		||||
__SYSCALL(366, sys_accept4)
 | 
			
		||||
__SYSCALL(367, sys_fanotify_init)
 | 
			
		||||
__SYSCALL(368, compat_sys_fanotify_mark_wrapper)
 | 
			
		||||
__SYSCALL(368, compat_sys_fanotify_mark)
 | 
			
		||||
__SYSCALL(369, sys_prlimit64)
 | 
			
		||||
__SYSCALL(370, sys_name_to_handle_at)
 | 
			
		||||
__SYSCALL(371, compat_sys_open_by_handle_at)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -104,13 +104,6 @@ compat_sys_fallocate_wrapper:
 | 
			
		|||
	b	sys_fallocate
 | 
			
		||||
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
 | 
			
		||||
#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),
 | 
			
		||||
			     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	compat_sys_recvmmsg		/* 4335 */
 | 
			
		||||
	PTR	sys_fanotify_init
 | 
			
		||||
	PTR	sys_32_fanotify_mark
 | 
			
		||||
	PTR	compat_sys_fanotify_mark
 | 
			
		||||
	PTR	sys_prlimit64
 | 
			
		||||
	PTR	sys_name_to_handle_at
 | 
			
		||||
	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);
 | 
			
		||||
    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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
	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)
 | 
			
		||||
	lgfr	%r2,%r2			# pid_t
 | 
			
		||||
	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_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_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_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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -239,15 +239,6 @@ do_sys_accept4: /* sys_accept4(int, struct sockaddr *, int *, int) */
 | 
			
		|||
	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"
 | 
			
		||||
	.align		4
 | 
			
		||||
	.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
 | 
			
		||||
/*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
 | 
			
		||||
/*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
 | 
			
		||||
/*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,
 | 
			
		||||
			     ((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_rt_sigreturn(void);
 | 
			
		||||
 | 
			
		||||
asmlinkage long sys32_fanotify_mark(int, unsigned int, u32, u32, int,
 | 
			
		||||
				    const char __user *);
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_COMPAT */
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_X86_SYS_IA32_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -345,7 +345,7 @@
 | 
			
		|||
336	i386	perf_event_open		sys_perf_event_open
 | 
			
		||||
337	i386	recvmmsg		sys_recvmmsg			compat_sys_recvmmsg
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,7 @@
 | 
			
		|||
#include <linux/slab.h>
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/uaccess.h>
 | 
			
		||||
#include <linux/compat.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/ioctls.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -857,6 +858,22 @@ fput_and_out:
 | 
			
		|||
	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
 | 
			
		||||
 * 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,
 | 
			
		||||
						 struct compat_timespec __user *interval);
 | 
			
		||||
 | 
			
		||||
asmlinkage long compat_sys_fanotify_mark(int, unsigned int, __u32, __u32,
 | 
			
		||||
					    int, const char __user *);
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define is_compat_task() (0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -200,6 +200,7 @@ cond_syscall(sys_perf_event_open);
 | 
			
		|||
/* fanotify! */
 | 
			
		||||
cond_syscall(sys_fanotify_init);
 | 
			
		||||
cond_syscall(sys_fanotify_mark);
 | 
			
		||||
cond_syscall(compat_sys_fanotify_mark);
 | 
			
		||||
 | 
			
		||||
/* open by handle */
 | 
			
		||||
cond_syscall(sys_name_to_handle_at);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue