diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-14 19:58:40 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-14 19:58:40 -0800 | 
| commit | bca268565fd18f0b36ab8fff6e1623d8dffae2b1 (patch) | |
| tree | 11abda03d7a7764cfa6a49a6ec2da1576b3058ee | |
| parent | 74d96f018673759d04d032c137d132f6447bfb1e (diff) | |
| parent | 26689452f5ca201add63b1b1ff0dbcf82d6885e7 (diff) | |
Merge branch 'syscalls' of git://git390.osdl.marist.edu/pub/scm/linux-2.6
* 'syscalls' of git://git390.osdl.marist.edu/pub/scm/linux-2.6: (44 commits)
  [CVE-2009-0029] s390 specific system call wrappers
  [CVE-2009-0029] System call wrappers part 33
  [CVE-2009-0029] System call wrappers part 32
  [CVE-2009-0029] System call wrappers part 31
  [CVE-2009-0029] System call wrappers part 30
  [CVE-2009-0029] System call wrappers part 29
  [CVE-2009-0029] System call wrappers part 28
  [CVE-2009-0029] System call wrappers part 27
  [CVE-2009-0029] System call wrappers part 26
  [CVE-2009-0029] System call wrappers part 25
  [CVE-2009-0029] System call wrappers part 24
  [CVE-2009-0029] System call wrappers part 23
  [CVE-2009-0029] System call wrappers part 22
  [CVE-2009-0029] System call wrappers part 21
  [CVE-2009-0029] System call wrappers part 20
  [CVE-2009-0029] System call wrappers part 19
  [CVE-2009-0029] System call wrappers part 18
  [CVE-2009-0029] System call wrappers part 17
  [CVE-2009-0029] System call wrappers part 16
  [CVE-2009-0029] System call wrappers part 15
  ...
108 files changed, 810 insertions, 659 deletions
diff --git a/arch/Kconfig b/arch/Kconfig index 2e13aa261929..550dab22daa1 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -62,6 +62,9 @@ config HAVE_EFFICIENT_UNALIGNED_ACCESS  	  See Documentation/unaligned-memory-access.txt for more  	  information on the topic of unaligned memory accesses. +config HAVE_SYSCALL_WRAPPERS +	bool +  config KRETPROBES  	def_bool y  	depends on KPROBES && HAVE_KRETPROBES diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index f77345bc66a9..aa2e50cf9857 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S @@ -896,9 +896,9 @@ sys_getxpid:  .end sys_getxpid  	.align	4 -	.globl	sys_pipe -	.ent	sys_pipe -sys_pipe: +	.globl	sys_alpha_pipe +	.ent	sys_alpha_pipe +sys_alpha_pipe:  	lda	$sp, -16($sp)  	stq	$26, 0($sp)  	.prologue 0 @@ -916,7 +916,7 @@ sys_pipe:  	stq	$1, 80+16($sp)  1:	lda	$sp, 16($sp)  	ret -.end sys_pipe +.end sys_alpha_pipe  	.align	4  	.globl	sys_execve diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S index ba914af18c4f..9d9e3a98bb95 100644 --- a/arch/alpha/kernel/systbls.S +++ b/arch/alpha/kernel/systbls.S @@ -52,7 +52,7 @@ sys_call_table:  	.quad sys_setpgid  	.quad alpha_ni_syscall			/* 40 */  	.quad sys_dup -	.quad sys_pipe +	.quad sys_alpha_pipe  	.quad osf_set_program_attributes  	.quad alpha_ni_syscall  	.quad sys_open				/* 45 */ diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 09a061cb7838..9ca8d13f05f7 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S @@ -98,7 +98,7 @@  		CALL(sys_uselib)  		CALL(sys_swapon)  		CALL(sys_reboot) -		CALL(OBSOLETE(old_readdir))	/* used by libc4 */ +		CALL(OBSOLETE(sys_old_readdir))	/* used by libc4 */  /* 90 */	CALL(OBSOLETE(old_mmap))	/* used by libc4 */  		CALL(sys_munmap)  		CALL(sys_truncate) diff --git a/arch/cris/arch-v10/kernel/entry.S b/arch/cris/arch-v10/kernel/entry.S index ed171d389e65..72f5cd319b97 100644 --- a/arch/cris/arch-v10/kernel/entry.S +++ b/arch/cris/arch-v10/kernel/entry.S @@ -691,7 +691,7 @@ sys_call_table:  	.long sys_uselib  	.long sys_swapon  	.long sys_reboot -	.long old_readdir +	.long sys_old_readdir  	.long old_mmap		/* 90 */  	.long sys_munmap  	.long sys_truncate diff --git a/arch/cris/arch-v32/kernel/entry.S b/arch/cris/arch-v32/kernel/entry.S index 7f6f93e6b70e..5e674c8f7c51 100644 --- a/arch/cris/arch-v32/kernel/entry.S +++ b/arch/cris/arch-v32/kernel/entry.S @@ -614,7 +614,7 @@ sys_call_table:  	.long sys_uselib  	.long sys_swapon  	.long sys_reboot -	.long old_readdir +	.long sys_old_readdir  	.long old_mmap		/* 90 */  	.long sys_munmap  	.long sys_truncate diff --git a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S index 54e21c3f2057..4eb67faac633 100644 --- a/arch/h8300/kernel/syscalls.S +++ b/arch/h8300/kernel/syscalls.S @@ -103,7 +103,7 @@ SYMBOL_NAME_LABEL(sys_call_table)  	.long SYMBOL_NAME(sys_uselib)  	.long SYMBOL_NAME(sys_swapon)  	.long SYMBOL_NAME(sys_reboot) -	.long SYMBOL_NAME(old_readdir) +	.long SYMBOL_NAME(sys_old_readdir)  	.long SYMBOL_NAME(old_mmap)		/* 90 */  	.long SYMBOL_NAME(sys_munmap)  	.long SYMBOL_NAME(sys_truncate) diff --git a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S index a8cf19958850..a46f8395e9a5 100644 --- a/arch/ia64/ia32/ia32_entry.S +++ b/arch/ia64/ia32/ia32_entry.S @@ -220,7 +220,7 @@ ia32_syscall_table:  	data8 sys_mkdir  	data8 sys_rmdir		  /* 40 */  	data8 sys_dup -	data8 sys_pipe +	data8 sys_ia64_pipe  	data8 compat_sys_times  	data8 sys_ni_syscall	  /* old prof syscall holder */  	data8 sys32_brk		  /* 45 */ diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h index f791576355ad..9015979ebe0f 100644 --- a/arch/ia64/include/asm/unistd.h +++ b/arch/ia64/include/asm/unistd.h @@ -364,7 +364,7 @@ struct pt_regs;  struct sigaction;  long sys_execve(char __user *filename, char __user * __user *argv,  			   char __user * __user *envp, struct pt_regs *regs); -asmlinkage long sys_pipe(void); +asmlinkage long sys_ia64_pipe(void);  asmlinkage long sys_rt_sigaction(int sig,  				 const struct sigaction __user *act,  				 struct sigaction __user *oact, diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S index d435f4a7a96c..e5341e2c1175 100644 --- a/arch/ia64/kernel/entry.S +++ b/arch/ia64/kernel/entry.S @@ -1442,7 +1442,7 @@ sys_call_table:  	data8 sys_mkdir				// 1055  	data8 sys_rmdir  	data8 sys_dup -	data8 sys_pipe +	data8 sys_ia64_pipe  	data8 sys_times  	data8 ia64_brk				// 1060  	data8 sys_setgid diff --git a/arch/ia64/kernel/sys_ia64.c b/arch/ia64/kernel/sys_ia64.c index bcbb6d8792d3..92ed83f34036 100644 --- a/arch/ia64/kernel/sys_ia64.c +++ b/arch/ia64/kernel/sys_ia64.c @@ -154,7 +154,7 @@ out:   * and r9) as this is faster than doing a copy_to_user().   */  asmlinkage long -sys_pipe (void) +sys_ia64_pipe (void)  {  	struct pt_regs *regs = task_pt_regs(current);  	int fd[2]; diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S index 5b780826647c..5c332f2b9b83 100644 --- a/arch/m68k/kernel/entry.S +++ b/arch/m68k/kernel/entry.S @@ -513,7 +513,7 @@ sys_call_table:  	.long sys_uselib  	.long sys_swapon  	.long sys_reboot -	.long old_readdir +	.long sys_old_readdir  	.long old_mmap		/* 90 */  	.long sys_munmap  	.long sys_truncate diff --git a/arch/m68knommu/kernel/syscalltable.S b/arch/m68knommu/kernel/syscalltable.S index 812f8d8b7a85..5c3e3f62194a 100644 --- a/arch/m68knommu/kernel/syscalltable.S +++ b/arch/m68knommu/kernel/syscalltable.S @@ -107,7 +107,7 @@ ENTRY(sys_call_table)  	.long sys_uselib  	.long sys_ni_syscall	/* sys_swapon */  	.long sys_reboot -	.long old_readdir +	.long sys_old_readdir  	.long old_mmap		/* 90 */  	.long sys_munmap  	.long sys_truncate diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index d0916a55cd77..51d1ba415b90 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S @@ -398,7 +398,7 @@ einval:	li	v0, -ENOSYS  	sys	sys_uselib		1  	sys	sys_swapon		2  	sys	sys_reboot		3 -	sys	old_readdir		3 +	sys	sys_old_readdir		3  	sys	old_mmap		6	/* 4090 */  	sys	sys_munmap		2  	sys	sys_truncate		2 diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S index 62fba8aa9b6e..ceeaaaa359e2 100644 --- a/arch/mn10300/kernel/entry.S +++ b/arch/mn10300/kernel/entry.S @@ -478,7 +478,7 @@ ENTRY(sys_call_table)  	.long sys_uselib  	.long sys_swapon  	.long sys_reboot -	.long old_readdir +	.long sys_old_readdir  	.long old_mmap		/* 90 */  	.long sys_munmap  	.long sys_truncate diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 84b861316ce7..e39b73bc0ff8 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -123,6 +123,7 @@ config PPC  	select HAVE_DMA_ATTRS if PPC64  	select USE_GENERIC_SMP_HELPERS if SMP  	select HAVE_OPROFILE +	select HAVE_SYSCALL_WRAPPERS if PPC64  config EARLY_PRINTK  	bool diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h index 803def236654..72353f6070a4 100644 --- a/arch/powerpc/include/asm/systbl.h +++ b/arch/powerpc/include/asm/systbl.h @@ -92,7 +92,7 @@ COMPAT_SYS_SPU(readlink)  SYSCALL(uselib)  SYSCALL(swapon)  SYSCALL(reboot) -SYSX(sys_ni_syscall,compat_sys_old_readdir,old_readdir) +SYSX(sys_ni_syscall,compat_sys_old_readdir,sys_old_readdir)  SYSCALL_SPU(mmap)  SYSCALL_SPU(munmap)  SYSCALL_SPU(truncate) diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index a94a3c3ae932..6b0a3538dc63 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -77,6 +77,7 @@ mainmenu "Linux Kernel Configuration"  config S390  	def_bool y  	select USE_GENERIC_SMP_HELPERS if SMP +	select HAVE_SYSCALL_WRAPPERS  	select HAVE_FUNCTION_TRACER  	select HAVE_OPROFILE  	select HAVE_KPROBES diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S index fc2c97197a53..6035cd20c7a7 100644 --- a/arch/s390/kernel/compat_wrapper.S +++ b/arch/s390/kernel/compat_wrapper.S @@ -547,7 +547,7 @@ sys32_setdomainname_wrapper:  	.globl	sys32_newuname_wrapper  sys32_newuname_wrapper:  	llgtr	%r2,%r2			# struct new_utsname * -	jg	s390x_newuname		# branch to system call +	jg	sys_s390_newuname	# branch to system call  	.globl	compat_sys_adjtimex_wrapper  compat_sys_adjtimex_wrapper: @@ -615,7 +615,7 @@ sys32_sysfs_wrapper:  	.globl	sys32_personality_wrapper  sys32_personality_wrapper:  	llgfr	%r2,%r2			# unsigned long -	jg	s390x_personality	# branch to system call +	jg	sys_s390_personality	# branch to system call  	.globl	sys32_setfsuid16_wrapper  sys32_setfsuid16_wrapper: diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h index a65afc91e8aa..950c59c6688b 100644 --- a/arch/s390/kernel/entry.h +++ b/arch/s390/kernel/entry.h @@ -30,23 +30,23 @@ struct fadvise64_64_args;  struct old_sigaction;  struct sel_arg_struct; -long sys_pipe(unsigned long __user *fildes);  long sys_mmap2(struct mmap_arg_struct __user  *arg); -long old_mmap(struct mmap_arg_struct __user *arg); +long sys_s390_old_mmap(struct mmap_arg_struct __user *arg);  long sys_ipc(uint call, int first, unsigned long second,  	     unsigned long third, void __user *ptr); -long s390x_newuname(struct new_utsname __user *name); -long s390x_personality(unsigned long personality); -long s390_fadvise64(int fd, u32 offset_high, u32 offset_low, +long sys_s390_newuname(struct new_utsname __user *name); +long sys_s390_personality(unsigned long personality); +long sys_s390_fadvise64(int fd, u32 offset_high, u32 offset_low,  		    size_t len, int advice); -long s390_fadvise64_64(struct fadvise64_64_args __user *args); -long s390_fallocate(int fd, int mode, loff_t offset, u32 len_high, u32 len_low); +long sys_s390_fadvise64_64(struct fadvise64_64_args __user *args); +long sys_s390_fallocate(int fd, int mode, loff_t offset, u32 len_high, +			u32 len_low);  long sys_fork(void);  long sys_clone(void);  long sys_vfork(void);  void execve_tail(void);  long sys_execve(void); -int sys_sigsuspend(int history0, int history1, old_sigset_t mask); +long sys_sigsuspend(int history0, int history1, old_sigset_t mask);  long sys_sigaction(int sig, const struct old_sigaction __user *act,  		   struct old_sigaction __user *oact);  long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss); diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index b6110bdf8dc2..5cd38a90e64d 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c @@ -39,6 +39,7 @@  #include <linux/tick.h>  #include <linux/elfcore.h>  #include <linux/kernel_stat.h> +#include <linux/syscalls.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h>  #include <asm/system.h> @@ -225,13 +226,13 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long new_stackp,          return 0;  } -asmlinkage long sys_fork(void) +SYSCALL_DEFINE0(fork)  {  	struct pt_regs *regs = task_pt_regs(current);  	return do_fork(SIGCHLD, regs->gprs[15], regs, 0, NULL, NULL);  } -asmlinkage long sys_clone(void) +SYSCALL_DEFINE0(clone)  {  	struct pt_regs *regs = task_pt_regs(current);  	unsigned long clone_flags; @@ -258,7 +259,7 @@ asmlinkage long sys_clone(void)   * do not have enough call-clobbered registers to hold all   * the information you need.   */ -asmlinkage long sys_vfork(void) +SYSCALL_DEFINE0(vfork)  {  	struct pt_regs *regs = task_pt_regs(current);  	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, @@ -278,7 +279,7 @@ asmlinkage void execve_tail(void)  /*   * sys_execve() executes a new program.   */ -asmlinkage long sys_execve(void) +SYSCALL_DEFINE0(execve)  {  	struct pt_regs *regs = task_pt_regs(current);  	char *filename; diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index 8e6812a22670..3cf74c3ccb69 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c @@ -25,6 +25,7 @@  #include <linux/personality.h>  #include <linux/binfmts.h>  #include <linux/tracehook.h> +#include <linux/syscalls.h>  #include <asm/ucontext.h>  #include <asm/uaccess.h>  #include <asm/lowcore.h> @@ -53,8 +54,7 @@ typedef struct  /*   * Atomically swap in the new signal mask, and wait for a signal.   */ -asmlinkage int -sys_sigsuspend(int history0, int history1, old_sigset_t mask) +SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask)  {  	mask &= _BLOCKABLE;  	spin_lock_irq(¤t->sighand->siglock); @@ -70,9 +70,8 @@ sys_sigsuspend(int history0, int history1, old_sigset_t mask)  	return -ERESTARTNOHAND;  } -asmlinkage long -sys_sigaction(int sig, const struct old_sigaction __user *act, -	      struct old_sigaction __user *oact) +SYSCALL_DEFINE3(sigaction, int, sig, const struct old_sigaction __user *, act, +		struct old_sigaction __user *, oact)  {  	struct k_sigaction new_ka, old_ka;  	int ret; @@ -102,15 +101,13 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,  	return ret;  } -asmlinkage long -sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) +SYSCALL_DEFINE2(sigaltstack, const stack_t __user *, uss, +		stack_t __user *, uoss)  {  	struct pt_regs *regs = task_pt_regs(current);  	return do_sigaltstack(uss, uoss, regs->gprs[15]);  } - -  /* Returns non-zero on fault. */  static int save_sigregs(struct pt_regs *regs, _sigregs __user *sregs)  { @@ -164,7 +161,7 @@ static int restore_sigregs(struct pt_regs *regs, _sigregs __user *sregs)  	return 0;  } -asmlinkage long sys_sigreturn(void) +SYSCALL_DEFINE0(sigreturn)  {  	struct pt_regs *regs = task_pt_regs(current);  	sigframe __user *frame = (sigframe __user *)regs->gprs[15]; @@ -191,7 +188,7 @@ badframe:  	return 0;  } -asmlinkage long sys_rt_sigreturn(void) +SYSCALL_DEFINE0(rt_sigreturn)  {  	struct pt_regs *regs = task_pt_regs(current);  	rt_sigframe __user *frame = (rt_sigframe __user *)regs->gprs[15]; diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c index c34be4568b80..c7ae4b17e0e3 100644 --- a/arch/s390/kernel/sys_s390.c +++ b/arch/s390/kernel/sys_s390.c @@ -29,6 +29,7 @@  #include <linux/personality.h>  #include <linux/unistd.h>  #include <linux/ipc.h> +#include <linux/syscalls.h>  #include <asm/uaccess.h>  #include "entry.h" @@ -74,7 +75,7 @@ struct mmap_arg_struct {  	unsigned long offset;  }; -asmlinkage long sys_mmap2(struct mmap_arg_struct __user  *arg) +SYSCALL_DEFINE1(mmap2, struct mmap_arg_struct __user *, arg)  {  	struct mmap_arg_struct a;  	int error = -EFAULT; @@ -86,7 +87,7 @@ out:  	return error;  } -asmlinkage long old_mmap(struct mmap_arg_struct __user *arg) +SYSCALL_DEFINE1(s390_old_mmap, struct mmap_arg_struct __user *, arg)  {  	struct mmap_arg_struct a;  	long error = -EFAULT; @@ -108,8 +109,8 @@ out:   *   * This is really horribly ugly.   */ -asmlinkage long sys_ipc(uint call, int first, unsigned long second, -				  unsigned long third, void __user *ptr) +SYSCALL_DEFINE5(ipc, uint, call, int, first, unsigned long, second, +		unsigned long, third, void __user *, ptr)  {          struct ipc_kludge tmp;  	int ret; @@ -175,7 +176,7 @@ asmlinkage long sys_ipc(uint call, int first, unsigned long second,  }  #ifdef CONFIG_64BIT -asmlinkage long s390x_newuname(struct new_utsname __user *name) +SYSCALL_DEFINE1(s390_newuname, struct new_utsname __user *, name)  {  	int ret = sys_newuname(name); @@ -186,7 +187,7 @@ asmlinkage long s390x_newuname(struct new_utsname __user *name)  	return ret;  } -asmlinkage long s390x_personality(unsigned long personality) +SYSCALL_DEFINE1(s390_personality, unsigned long, personality)  {  	int ret; @@ -205,15 +206,13 @@ asmlinkage long s390x_personality(unsigned long personality)   */  #ifndef CONFIG_64BIT -asmlinkage long -s390_fadvise64(int fd, u32 offset_high, u32 offset_low, size_t len, int advice) +SYSCALL_DEFINE5(s390_fadvise64, int, fd, u32, offset_high, u32, offset_low, +		size_t, len, int, advice)  {  	return sys_fadvise64(fd, (u64) offset_high << 32 | offset_low,  			len, advice);  } -#endif -  struct fadvise64_64_args {  	int fd;  	long long offset; @@ -221,8 +220,7 @@ struct fadvise64_64_args {  	int advice;  }; -asmlinkage long -s390_fadvise64_64(struct fadvise64_64_args __user *args) +SYSCALL_DEFINE1(s390_fadvise64_64, struct fadvise64_64_args __user *, args)  {  	struct fadvise64_64_args a; @@ -231,7 +229,6 @@ s390_fadvise64_64(struct fadvise64_64_args __user *args)  	return sys_fadvise64_64(a.fd, a.offset, a.len, a.advice);  } -#ifndef CONFIG_64BIT  /*   * This is a wrapper to call sys_fallocate(). For 31 bit s390 the last   * 64 bit argument "len" is split into the upper and lower 32 bits. The @@ -244,9 +241,19 @@ s390_fadvise64_64(struct fadvise64_64_args __user *args)   * to   *   %r2: fd, %r3: mode, %r4/%r5: offset, 96(%r15)-103(%r15): len   */ -asmlinkage long s390_fallocate(int fd, int mode, loff_t offset, +SYSCALL_DEFINE(s390_fallocate)(int fd, int mode, loff_t offset,  			       u32 len_high, u32 len_low)  {  	return sys_fallocate(fd, mode, offset, ((u64)len_high << 32) | len_low);  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_s390_fallocate(long fd, long mode, loff_t offset, +				   long len_high, long len_low) +{ +	return SYSC_s390_fallocate((int) fd, (int) mode, offset, +				   (u32) len_high, (u32) len_low); +} +SYSCALL_ALIAS(sys_s390_fallocate, SyS_s390_fallocate); +#endif +  #endif diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index 2d61787949d5..76d16e0140bb 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S @@ -98,7 +98,7 @@ SYSCALL(sys_uselib,sys_uselib,sys32_uselib_wrapper)  SYSCALL(sys_swapon,sys_swapon,sys32_swapon_wrapper)  SYSCALL(sys_reboot,sys_reboot,sys32_reboot_wrapper)  SYSCALL(sys_ni_syscall,sys_ni_syscall,old32_readdir_wrapper)	/* old readdir syscall */ -SYSCALL(old_mmap,old_mmap,old32_mmap_wrapper)			/* 90 */ +SYSCALL(sys_s390_old_mmap,sys_s390_old_mmap,old32_mmap_wrapper)	/* 90 */  SYSCALL(sys_munmap,sys_munmap,sys32_munmap_wrapper)  SYSCALL(sys_truncate,sys_truncate,sys32_truncate_wrapper)  SYSCALL(sys_ftruncate,sys_ftruncate,sys32_ftruncate_wrapper) @@ -130,7 +130,7 @@ SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper)  SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn)  SYSCALL(sys_clone,sys_clone,sys32_clone)			/* 120 */  SYSCALL(sys_setdomainname,sys_setdomainname,sys32_setdomainname_wrapper) -SYSCALL(sys_newuname,s390x_newuname,sys32_newuname_wrapper) +SYSCALL(sys_newuname,sys_s390_newuname,sys32_newuname_wrapper)  NI_SYSCALL							/* modify_ldt for i386 */  SYSCALL(sys_adjtimex,sys_adjtimex,compat_sys_adjtimex_wrapper)  SYSCALL(sys_mprotect,sys_mprotect,sys32_mprotect_wrapper)	/* 125 */ @@ -144,7 +144,7 @@ SYSCALL(sys_getpgid,sys_getpgid,sys32_getpgid_wrapper)  SYSCALL(sys_fchdir,sys_fchdir,sys32_fchdir_wrapper)  SYSCALL(sys_bdflush,sys_bdflush,sys32_bdflush_wrapper)  SYSCALL(sys_sysfs,sys_sysfs,sys32_sysfs_wrapper)		/* 135 */ -SYSCALL(sys_personality,s390x_personality,sys32_personality_wrapper) +SYSCALL(sys_personality,sys_s390_personality,sys32_personality_wrapper)  NI_SYSCALL							/* for afs_syscall */  SYSCALL(sys_setfsuid16,sys_ni_syscall,sys32_setfsuid16_wrapper)	/* old setfsuid16 syscall */  SYSCALL(sys_setfsgid16,sys_ni_syscall,sys32_setfsgid16_wrapper)	/* old setfsgid16 syscall */ @@ -261,7 +261,7 @@ SYSCALL(sys_epoll_create,sys_epoll_create,sys_epoll_create_wrapper)  SYSCALL(sys_epoll_ctl,sys_epoll_ctl,sys_epoll_ctl_wrapper)	/* 250 */  SYSCALL(sys_epoll_wait,sys_epoll_wait,sys_epoll_wait_wrapper)  SYSCALL(sys_set_tid_address,sys_set_tid_address,sys32_set_tid_address_wrapper) -SYSCALL(s390_fadvise64,sys_fadvise64_64,sys32_fadvise64_wrapper) +SYSCALL(sys_s390_fadvise64,sys_fadvise64_64,sys32_fadvise64_wrapper)  SYSCALL(sys_timer_create,sys_timer_create,sys32_timer_create_wrapper)  SYSCALL(sys_timer_settime,sys_timer_settime,sys32_timer_settime_wrapper)	/* 255 */  SYSCALL(sys_timer_gettime,sys_timer_gettime,sys32_timer_gettime_wrapper) @@ -272,7 +272,7 @@ SYSCALL(sys_clock_gettime,sys_clock_gettime,sys32_clock_gettime_wrapper)	/* 260  SYSCALL(sys_clock_getres,sys_clock_getres,sys32_clock_getres_wrapper)  SYSCALL(sys_clock_nanosleep,sys_clock_nanosleep,sys32_clock_nanosleep_wrapper)  NI_SYSCALL							/* reserved for vserver */ -SYSCALL(s390_fadvise64_64,sys_ni_syscall,sys32_fadvise64_64_wrapper) +SYSCALL(sys_s390_fadvise64_64,sys_ni_syscall,sys32_fadvise64_64_wrapper)  SYSCALL(sys_statfs64,sys_statfs64,compat_sys_statfs64_wrapper)  SYSCALL(sys_fstatfs64,sys_fstatfs64,compat_sys_fstatfs64_wrapper)  SYSCALL(sys_remap_file_pages,sys_remap_file_pages,sys32_remap_file_pages_wrapper) @@ -322,7 +322,7 @@ NI_SYSCALL							/* 310 sys_move_pages */  SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper)  SYSCALL(sys_epoll_pwait,sys_epoll_pwait,compat_sys_epoll_pwait_wrapper)  SYSCALL(sys_utimes,sys_utimes,compat_sys_utimes_wrapper) -SYSCALL(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_signalfd,sys_signalfd,compat_sys_signalfd_wrapper)  NI_SYSCALL						/* 317 old sys_timer_fd */ diff --git a/arch/sh/include/asm/syscalls_32.h b/arch/sh/include/asm/syscalls_32.h index 104c5e686106..8b30200305c3 100644 --- a/arch/sh/include/asm/syscalls_32.h +++ b/arch/sh/include/asm/syscalls_32.h @@ -36,9 +36,9 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5,  asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,  				unsigned long r6, unsigned long r7,  				struct pt_regs __regs); -asmlinkage int sys_pipe(unsigned long r4, unsigned long r5, -			unsigned long r6, unsigned long r7, -			struct pt_regs __regs); +asmlinkage int sys_sh_pipe(unsigned long r4, unsigned long r5, +			   unsigned long r6, unsigned long r7, +			   struct pt_regs __regs);  asmlinkage ssize_t sys_pread_wrapper(unsigned int fd, char __user *buf,  				     size_t count, long dummy, loff_t pos);  asmlinkage ssize_t sys_pwrite_wrapper(unsigned int fd, const char __user *buf, diff --git a/arch/sh/kernel/sys_sh32.c b/arch/sh/kernel/sys_sh32.c index dbba1e1833d4..63ba12836eae 100644 --- a/arch/sh/kernel/sys_sh32.c +++ b/arch/sh/kernel/sys_sh32.c @@ -22,7 +22,7 @@   * sys_pipe() is the normal C calling standard for creating   * a pipe. It's not the way Unix traditionally does this, though.   */ -asmlinkage int sys_pipe(unsigned long r4, unsigned long r5, +asmlinkage int sys_sh_pipe(unsigned long r4, unsigned long r5,  	unsigned long r6, unsigned long r7,  	struct pt_regs __regs)  { diff --git a/arch/sh/kernel/syscalls_32.S b/arch/sh/kernel/syscalls_32.S index 0af693e65764..e67c1733e1b9 100644 --- a/arch/sh/kernel/syscalls_32.S +++ b/arch/sh/kernel/syscalls_32.S @@ -58,7 +58,7 @@ ENTRY(sys_call_table)  	.long sys_mkdir  	.long sys_rmdir		/* 40 */  	.long sys_dup -	.long sys_pipe +	.long sys_sh_pipe  	.long sys_times  	.long sys_ni_syscall	/* old prof syscall holder */  	.long sys_brk		/* 45 */ @@ -105,7 +105,7 @@ ENTRY(sys_call_table)  	.long sys_uselib  	.long sys_swapon  	.long sys_reboot -	.long old_readdir +	.long sys_old_readdir  	.long old_mmap		/* 90 */  	.long sys_munmap  	.long sys_truncate diff --git a/arch/sh/kernel/syscalls_64.S b/arch/sh/kernel/syscalls_64.S index 0b436aa3cad7..557cb91f5caf 100644 --- a/arch/sh/kernel/syscalls_64.S +++ b/arch/sh/kernel/syscalls_64.S @@ -109,7 +109,7 @@ sys_call_table:  	.long sys_uselib  	.long sys_swapon  	.long sys_reboot -	.long old_readdir +	.long sys_old_readdir  	.long old_mmap			/* 90 */  	.long sys_munmap  	.long sys_truncate diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index faf9ccd9ef5d..f41ecc5ac0b4 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S @@ -1088,8 +1088,8 @@ sunos_execv:  	 ld	[%sp + STACKFRAME_SZ + PT_I0], %o0  	.align	4 -	.globl	sys_pipe -sys_pipe: +	.globl	sys_sparc_pipe +sys_sparc_pipe:  	mov	%o7, %l5  	add	%sp, STACKFRAME_SZ, %o0		! pt_regs *regs arg  	call	sparc_pipe diff --git a/arch/sparc/kernel/syscalls.S b/arch/sparc/kernel/syscalls.S index 7a6786a71363..87f5a3b8a253 100644 --- a/arch/sparc/kernel/syscalls.S +++ b/arch/sparc/kernel/syscalls.S @@ -20,7 +20,7 @@ execve_merge:  	 add	%sp, PTREGS_OFF, %o0  	.align	32 -sys_pipe: +sys_sparc_pipe:  	ba,pt	%xcc, sparc_pipe  	 add	%sp, PTREGS_OFF, %o0  sys_nis_syscall: diff --git a/arch/sparc/kernel/systbls_32.S b/arch/sparc/kernel/systbls_32.S index 7d0807586442..dccc95df0c7f 100644 --- a/arch/sparc/kernel/systbls_32.S +++ b/arch/sparc/kernel/systbls_32.S @@ -24,7 +24,7 @@ sys_call_table:  /*25*/	.long sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_pause  /*30*/	.long sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice  /*35*/	.long sys_chown, sys_sync, sys_kill, sys_newstat, sys_sendfile -/*40*/	.long sys_newlstat, sys_dup, sys_pipe, sys_times, sys_getuid +/*40*/	.long sys_newlstat, sys_dup, sys_sparc_pipe, sys_times, sys_getuid  /*45*/	.long sys_umount, sys_setgid16, sys_getgid16, sys_signal, sys_geteuid16  /*50*/	.long sys_getegid16, sys_acct, sys_nis_syscall, sys_getgid, sys_ioctl  /*55*/	.long sys_reboot, sys_mmap2, sys_symlink, sys_readlink, sys_execve @@ -56,7 +56,7 @@ sys_call_table:  /*185*/	.long sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sys_newuname  /*190*/	.long sys_init_module, sys_personality, sparc_remap_file_pages, sys_epoll_create, sys_epoll_ctl  /*195*/	.long sys_epoll_wait, sys_ioprio_set, sys_getppid, sparc_sigaction, sys_sgetmask -/*200*/	.long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, old_readdir +/*200*/	.long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, sys_old_readdir  /*205*/	.long sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64  /*210*/	.long sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo  /*215*/	.long sys_ipc, sys_sigreturn, sys_clone, sys_ioprio_get, sys_adjtimex diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S index 9fc78cf354bd..e6007bb37046 100644 --- a/arch/sparc/kernel/systbls_64.S +++ b/arch/sparc/kernel/systbls_64.S @@ -26,7 +26,7 @@ sys_call_table32:  /*25*/	.word sys32_vmsplice, compat_sys_ptrace, sys_alarm, sys32_sigaltstack, sys_pause  /*30*/	.word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice  	.word sys_chown, sys_sync, sys32_kill, compat_sys_newstat, sys32_sendfile -/*40*/	.word compat_sys_newlstat, sys_dup, sys_pipe, compat_sys_times, sys_getuid +/*40*/	.word compat_sys_newlstat, sys_dup, sys_sparc_pipe, compat_sys_times, sys_getuid  	.word sys32_umount, sys_setgid16, sys_getgid16, sys32_signal, sys_geteuid16  /*50*/	.word sys_getegid16, sys_acct, sys_nis_syscall, sys_getgid, compat_sys_ioctl  	.word sys32_reboot, sys32_mmap2, sys_symlink, sys32_readlink, sys32_execve @@ -100,7 +100,7 @@ sys_call_table:  /*25*/	.word sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall  /*30*/	.word sys_utime, sys_nis_syscall, sys_nis_syscall, sys_access, sys_nice  	.word sys_nis_syscall, sys_sync, sys_kill, sys_newstat, sys_sendfile64 -/*40*/	.word sys_newlstat, sys_dup, sys_pipe, sys_times, sys_nis_syscall +/*40*/	.word sys_newlstat, sys_dup, sys_sparc_pipe, sys_times, sys_nis_syscall  	.word sys_umount, sys_setgid, sys_getgid, sys_signal, sys_geteuid  /*50*/	.word sys_getegid, sys_acct, sys_memory_ordering, sys_nis_syscall, sys_ioctl  	.word sys_reboot, sys_nis_syscall, sys_symlink, sys_readlink, sys_execve diff --git a/arch/x86/kernel/syscall_table_32.S b/arch/x86/kernel/syscall_table_32.S index d44395ff34c3..e2e86a08f31d 100644 --- a/arch/x86/kernel/syscall_table_32.S +++ b/arch/x86/kernel/syscall_table_32.S @@ -88,7 +88,7 @@ ENTRY(sys_call_table)  	.long sys_uselib  	.long sys_swapon  	.long sys_reboot -	.long old_readdir +	.long sys_old_readdir  	.long old_mmap		/* 90 */  	.long sys_munmap  	.long sys_truncate diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c index 645d7a60e412..ec22284eed30 100644 --- a/drivers/pci/syscall.c +++ b/drivers/pci/syscall.c @@ -14,10 +14,8 @@  #include <asm/uaccess.h>  #include "pci.h" -asmlinkage long -sys_pciconfig_read(unsigned long bus, unsigned long dfn, -		   unsigned long off, unsigned long len, -		   void __user *buf) +SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn, +		unsigned long, off, unsigned long, len, void __user *, buf)  {  	struct pci_dev *dev;  	u8 byte; @@ -86,10 +84,8 @@ error:  	return err;  } -asmlinkage long -sys_pciconfig_write(unsigned long bus, unsigned long dfn, -		    unsigned long off, unsigned long len, -		    void __user *buf) +SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn, +		unsigned long, off, unsigned long, len, void __user *, buf)  {  	struct pci_dev *dev;  	u8 byte; @@ -1270,7 +1270,7 @@ static void io_destroy(struct kioctx *ioctx)   *	pointer is passed for ctxp.  Will fail with -ENOSYS if not   *	implemented.   */ -asmlinkage long sys_io_setup(unsigned nr_events, aio_context_t __user *ctxp) +SYSCALL_DEFINE2(io_setup, unsigned, nr_events, aio_context_t __user *, ctxp)  {  	struct kioctx *ioctx = NULL;  	unsigned long ctx; @@ -1308,7 +1308,7 @@ out:   *	implemented.  May fail with -EFAULT if the context pointed to   *	is invalid.   */ -asmlinkage long sys_io_destroy(aio_context_t ctx) +SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx)  {  	struct kioctx *ioctx = lookup_ioctx(ctx);  	if (likely(NULL != ioctx)) { @@ -1662,8 +1662,8 @@ out_put_req:   *	are available to queue any iocbs.  Will return 0 if nr is 0.  Will   *	fail with -ENOSYS if not implemented.   */ -asmlinkage long sys_io_submit(aio_context_t ctx_id, long nr, -			      struct iocb __user * __user *iocbpp) +SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr, +		struct iocb __user * __user *, iocbpp)  {  	struct kioctx *ctx;  	long ret = 0; @@ -1737,8 +1737,8 @@ static struct kiocb *lookup_kiocb(struct kioctx *ctx, struct iocb __user *iocb,   *	invalid.  May fail with -EAGAIN if the iocb specified was not   *	cancelled.  Will fail with -ENOSYS if not implemented.   */ -asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, -			      struct io_event __user *result) +SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, +		struct io_event __user *, result)  {  	int (*cancel)(struct kiocb *iocb, struct io_event *res);  	struct kioctx *ctx; @@ -1799,11 +1799,11 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,   *	will be updated if not NULL and the operation blocks.  Will fail   *	with -ENOSYS if not implemented.   */ -asmlinkage long sys_io_getevents(aio_context_t ctx_id, -				 long min_nr, -				 long nr, -				 struct io_event __user *events, -				 struct timespec __user *timeout) +SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id, +		long, min_nr, +		long, nr, +		struct io_event __user *, events, +		struct timespec __user *, timeout)  {  	struct kioctx *ioctx = lookup_ioctx(ctx_id);  	long ret = -EINVAL; diff --git a/fs/buffer.c b/fs/buffer.c index b6e8b8632e2f..b58208f1640a 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -3243,7 +3243,7 @@ void block_sync_page(struct page *page)   * Use of bdflush() is deprecated and will be removed in a future kernel.   * The `pdflush' kernel threads fully replace bdflush daemons and this call.   */ -asmlinkage long sys_bdflush(int func, long data) +SYSCALL_DEFINE2(bdflush, int, func, long, data)  {  	static int msg_count; diff --git a/fs/compat.c b/fs/compat.c index 30f2faa22f5c..65a070e705ab 100644 --- a/fs/compat.c +++ b/fs/compat.c @@ -1709,7 +1709,7 @@ asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,  }  #ifdef HAVE_SET_RESTORE_SIGMASK -asmlinkage long compat_sys_pselect7(int n, compat_ulong_t __user *inp, +static long do_compat_pselect(int n, compat_ulong_t __user *inp,  	compat_ulong_t __user *outp, compat_ulong_t __user *exp,  	struct compat_timespec __user *tsp, compat_sigset_t __user *sigmask,  	compat_size_t sigsetsize) @@ -1775,8 +1775,8 @@ asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp,  				(compat_size_t __user *)(sig+sizeof(up))))  			return -EFAULT;  	} -	return compat_sys_pselect7(n, inp, outp, exp, tsp, compat_ptr(up), -					sigsetsize); +	return do_compat_pselect(n, inp, outp, exp, tsp, compat_ptr(up), +				 sigsetsize);  }  asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, diff --git a/fs/dcache.c b/fs/dcache.c index 4547f66884a0..937df0fb0da5 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -2092,7 +2092,7 @@ Elong:   *		return NULL;   *	}   */ -asmlinkage long sys_getcwd(char __user *buf, unsigned long size) +SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size)  {  	int error;  	struct path pwd, root; diff --git a/fs/dcookies.c b/fs/dcookies.c index 180e9fec4ad8..a21cabdbd87b 100644 --- a/fs/dcookies.c +++ b/fs/dcookies.c @@ -145,7 +145,7 @@ out:  /* And here is where the userspace process can look up the cookie value   * to retrieve the path.   */ -asmlinkage long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len) +SYSCALL_DEFINE(lookup_dcookie)(u64 cookie64, char __user * buf, size_t len)  {  	unsigned long cookie = (unsigned long)cookie64;  	int err = -EINVAL; @@ -198,7 +198,13 @@ out:  	mutex_unlock(&dcookie_mutex);  	return err;  } - +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_lookup_dcookie(u64 cookie64, long buf, long len) +{ +	return SYSC_lookup_dcookie(cookie64, (char __user *) buf, (size_t) len); +} +SYSCALL_ALIAS(sys_lookup_dcookie, SyS_lookup_dcookie); +#endif  static int dcookie_init(void)  { diff --git a/fs/eventfd.c b/fs/eventfd.c index 08bf558d0408..5de2c2db3aa2 100644 --- a/fs/eventfd.c +++ b/fs/eventfd.c @@ -198,7 +198,7 @@ struct file *eventfd_fget(int fd)  	return file;  } -asmlinkage long sys_eventfd2(unsigned int count, int flags) +SYSCALL_DEFINE2(eventfd2, unsigned int, count, int, flags)  {  	int fd;  	struct eventfd_ctx *ctx; @@ -228,8 +228,7 @@ asmlinkage long sys_eventfd2(unsigned int count, int flags)  	return fd;  } -asmlinkage long sys_eventfd(unsigned int count) +SYSCALL_DEFINE1(eventfd, unsigned int, count)  {  	return sys_eventfd2(count, 0);  } - diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 96355d505347..ba2f9ec71192 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -1110,7 +1110,7 @@ retry:  /*   * Open an eventpoll file descriptor.   */ -asmlinkage long sys_epoll_create1(int flags) +SYSCALL_DEFINE1(epoll_create1, int, flags)  {  	int error, fd = -1;  	struct eventpoll *ep; @@ -1150,7 +1150,7 @@ error_return:  	return fd;  } -asmlinkage long sys_epoll_create(int size) +SYSCALL_DEFINE1(epoll_create, int, size)  {  	if (size < 0)  		return -EINVAL; @@ -1163,8 +1163,8 @@ asmlinkage long sys_epoll_create(int size)   * the eventpoll file that enables the insertion/removal/change of   * file descriptors inside the interest set.   */ -asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, -			      struct epoll_event __user *event) +SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd, +		struct epoll_event __user *, event)  {  	int error;  	struct file *file, *tfile; @@ -1261,8 +1261,8 @@ error_return:   * Implement the event wait interface for the eventpoll file. It is the kernel   * part of the user space epoll_wait(2).   */ -asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, -			       int maxevents, int timeout) +SYSCALL_DEFINE4(epoll_wait, int, epfd, struct epoll_event __user *, events, +		int, maxevents, int, timeout)  {  	int error;  	struct file *file; @@ -1319,9 +1319,9 @@ error_return:   * Implement the event wait interface for the eventpoll file. It is the kernel   * part of the user space epoll_pwait(2).   */ -asmlinkage long sys_epoll_pwait(int epfd, struct epoll_event __user *events, -		int maxevents, int timeout, const sigset_t __user *sigmask, -		size_t sigsetsize) +SYSCALL_DEFINE6(epoll_pwait, int, epfd, struct epoll_event __user *, events, +		int, maxevents, int, timeout, const sigset_t __user *, sigmask, +		size_t, sigsetsize)  {  	int error;  	sigset_t ksigmask, sigsaved; diff --git a/fs/exec.c b/fs/exec.c index 71a6efe5d8bd..0dd60a01f1b4 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -99,7 +99,7 @@ static inline void put_binfmt(struct linux_binfmt * fmt)   *   * Also note that we take the address to load from from the file itself.   */ -asmlinkage long sys_uselib(const char __user * library) +SYSCALL_DEFINE1(uselib, const char __user *, library)  {  	struct file *file;  	struct nameidata nd; diff --git a/fs/fcntl.c b/fs/fcntl.c index cdc141946724..bd215cc791da 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -50,7 +50,7 @@ static int get_close_on_exec(unsigned int fd)  	return res;  } -asmlinkage long sys_dup3(unsigned int oldfd, unsigned int newfd, int flags) +SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)  {  	int err = -EBADF;  	struct file * file, *tofree; @@ -113,7 +113,7 @@ out_unlock:  	return err;  } -asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd) +SYSCALL_DEFINE2(dup2, unsigned int, oldfd, unsigned int, newfd)  {  	if (unlikely(newfd == oldfd)) { /* corner case */  		struct files_struct *files = current->files; @@ -126,7 +126,7 @@ asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd)  	return sys_dup3(oldfd, newfd, 0);  } -asmlinkage long sys_dup(unsigned int fildes) +SYSCALL_DEFINE1(dup, unsigned int, fildes)  {  	int ret = -EBADF;  	struct file *file = fget(fildes); @@ -335,7 +335,7 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,  	return err;  } -asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) +SYSCALL_DEFINE3(fcntl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)  {	  	struct file *filp;  	long err = -EBADF; @@ -358,7 +358,8 @@ out:  }  #if BITS_PER_LONG == 32 -asmlinkage long sys_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg) +SYSCALL_DEFINE3(fcntl64, unsigned int, fd, unsigned int, cmd, +		unsigned long, arg)  {	  	struct file * filp;  	long err; diff --git a/fs/filesystems.c b/fs/filesystems.c index d488dcd7f2bb..1aa70260e6d1 100644 --- a/fs/filesystems.c +++ b/fs/filesystems.c @@ -179,7 +179,7 @@ static int fs_maxindex(void)  /*   * Whee.. Weird sysv syscall.    */ -asmlinkage long sys_sysfs(int option, unsigned long arg1, unsigned long arg2) +SYSCALL_DEFINE3(sysfs, int, option, unsigned long, arg1, unsigned long, arg2)  {  	int retval = -EINVAL; diff --git a/fs/ioctl.c b/fs/ioctl.c index 20b0a8a24c6b..240ec63984cb 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c @@ -542,7 +542,7 @@ int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,  	return error;  } -asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) +SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)  {  	struct file *filp;  	int error = -EBADF; diff --git a/fs/ioprio.c b/fs/ioprio.c index 1a39ac370942..c7c0b28d7d21 100644 --- a/fs/ioprio.c +++ b/fs/ioprio.c @@ -72,7 +72,7 @@ int set_task_ioprio(struct task_struct *task, int ioprio)  }  EXPORT_SYMBOL_GPL(set_task_ioprio); -asmlinkage long sys_ioprio_set(int which, int who, int ioprio) +SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)  {  	int class = IOPRIO_PRIO_CLASS(ioprio);  	int data = IOPRIO_PRIO_DATA(ioprio); @@ -188,7 +188,7 @@ int ioprio_best(unsigned short aprio, unsigned short bprio)  		return aprio;  } -asmlinkage long sys_ioprio_get(int which, int who) +SYSCALL_DEFINE2(ioprio_get, int, which, int, who)  {  	struct task_struct *g, *p;  	struct user_struct *user; @@ -252,4 +252,3 @@ asmlinkage long sys_ioprio_get(int which, int who)  	read_unlock(&tasklist_lock);  	return ret;  } - diff --git a/fs/locks.c b/fs/locks.c index 46a2e12f7d42..ec3deea29e37 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1564,7 +1564,7 @@ EXPORT_SYMBOL(flock_lock_file_wait);   *	%LOCK_MAND can be combined with %LOCK_READ or %LOCK_WRITE to allow other   *	processes read and write access respectively.   */ -asmlinkage long sys_flock(unsigned int fd, unsigned int cmd) +SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd)  {  	struct file *filp;  	struct file_lock *lock; diff --git a/fs/namei.c b/fs/namei.c index f05bed242422..bbc15c237558 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1962,8 +1962,8 @@ static int may_mknod(mode_t mode)  	}  } -asmlinkage long sys_mknodat(int dfd, const char __user *filename, int mode, -				unsigned dev) +SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, int, mode, +		unsigned, dev)  {  	int error;  	char *tmp; @@ -2017,7 +2017,7 @@ out_unlock:  	return error;  } -asmlinkage long sys_mknod(const char __user *filename, int mode, unsigned dev) +SYSCALL_DEFINE3(mknod, const char __user *, filename, int, mode, unsigned, dev)  {  	return sys_mknodat(AT_FDCWD, filename, mode, dev);  } @@ -2044,7 +2044,7 @@ int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)  	return error;  } -asmlinkage long sys_mkdirat(int dfd, const char __user *pathname, int mode) +SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, int, mode)  {  	int error = 0;  	char * tmp; @@ -2081,7 +2081,7 @@ out_err:  	return error;  } -asmlinkage long sys_mkdir(const char __user *pathname, int mode) +SYSCALL_DEFINE2(mkdir, const char __user *, pathname, int, mode)  {  	return sys_mkdirat(AT_FDCWD, pathname, mode);  } @@ -2195,7 +2195,7 @@ exit1:  	return error;  } -asmlinkage long sys_rmdir(const char __user *pathname) +SYSCALL_DEFINE1(rmdir, const char __user *, pathname)  {  	return do_rmdir(AT_FDCWD, pathname);  } @@ -2291,7 +2291,7 @@ slashes:  	goto exit2;  } -asmlinkage long sys_unlinkat(int dfd, const char __user *pathname, int flag) +SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)  {  	if ((flag & ~AT_REMOVEDIR) != 0)  		return -EINVAL; @@ -2302,7 +2302,7 @@ asmlinkage long sys_unlinkat(int dfd, const char __user *pathname, int flag)  	return do_unlinkat(dfd, pathname);  } -asmlinkage long sys_unlink(const char __user *pathname) +SYSCALL_DEFINE1(unlink, const char __user *, pathname)  {  	return do_unlinkat(AT_FDCWD, pathname);  } @@ -2328,8 +2328,8 @@ int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)  	return error;  } -asmlinkage long sys_symlinkat(const char __user *oldname, -			      int newdfd, const char __user *newname) +SYSCALL_DEFINE3(symlinkat, const char __user *, oldname, +		int, newdfd, const char __user *, newname)  {  	int error;  	char *from; @@ -2370,7 +2370,7 @@ out_putname:  	return error;  } -asmlinkage long sys_symlink(const char __user *oldname, const char __user *newname) +SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)  {  	return sys_symlinkat(oldname, AT_FDCWD, newname);  } @@ -2422,9 +2422,8 @@ int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_de   * with linux 2.0, and to avoid hard-linking to directories   * and other special files.  --ADM   */ -asmlinkage long sys_linkat(int olddfd, const char __user *oldname, -			   int newdfd, const char __user *newname, -			   int flags) +SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, +		int, newdfd, const char __user *, newname, int, flags)  {  	struct dentry *new_dentry;  	struct nameidata nd; @@ -2473,7 +2472,7 @@ out:  	return error;  } -asmlinkage long sys_link(const char __user *oldname, const char __user *newname) +SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)  {  	return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);  } @@ -2624,8 +2623,8 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,  	return error;  } -asmlinkage long sys_renameat(int olddfd, const char __user *oldname, -			     int newdfd, const char __user *newname) +SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname, +		int, newdfd, const char __user *, newname)  {  	struct dentry *old_dir, *new_dir;  	struct dentry *old_dentry, *new_dentry; @@ -2718,7 +2717,7 @@ exit:  	return error;  } -asmlinkage long sys_rename(const char __user *oldname, const char __user *newname) +SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)  {  	return sys_renameat(AT_FDCWD, oldname, AT_FDCWD, newname);  } diff --git a/fs/namespace.c b/fs/namespace.c index a40685d800a8..228d8c4bfd18 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -1128,7 +1128,7 @@ static int do_umount(struct vfsmount *mnt, int flags)   * unixes. Our API is identical to OSF/1 to avoid making a mess of AMD   */ -asmlinkage long sys_umount(char __user * name, int flags) +SYSCALL_DEFINE2(umount, char __user *, name, int, flags)  {  	struct path path;  	int retval; @@ -1160,7 +1160,7 @@ out:  /*   *	The 2.0 compatible umount. No flags.   */ -asmlinkage long sys_oldumount(char __user * name) +SYSCALL_DEFINE1(oldumount, char __user *, name)  {  	return sys_umount(name, 0);  } @@ -2045,9 +2045,8 @@ struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns,  	return new_ns;  } -asmlinkage long sys_mount(char __user * dev_name, char __user * dir_name, -			  char __user * type, unsigned long flags, -			  void __user * data) +SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, +		char __user *, type, unsigned long, flags, void __user *, data)  {  	int retval;  	unsigned long data_page; @@ -2172,8 +2171,8 @@ static void chroot_fs_refs(struct path *old_root, struct path *new_root)   *    though, so you may need to say mount --bind /nfs/my_root /nfs/my_root   *    first.   */ -asmlinkage long sys_pivot_root(const char __user * new_root, -			       const char __user * put_old) +SYSCALL_DEFINE2(pivot_root, const char __user *, new_root, +		const char __user *, put_old)  {  	struct vfsmount *tmp;  	struct path new, old, parent_path, root_parent, root; diff --git a/fs/nfsctl.c b/fs/nfsctl.c index b27451909dff..8f9a20556f79 100644 --- a/fs/nfsctl.c +++ b/fs/nfsctl.c @@ -86,8 +86,8 @@ static struct {  	},  }; -long -asmlinkage sys_nfsservctl(int cmd, struct nfsctl_arg __user *arg, void __user *res) +SYSCALL_DEFINE3(nfsservctl, int, cmd, struct nfsctl_arg __user *, arg, +		void __user *, res)  {  	struct file *file;  	void __user *p = &arg->u; diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c index 81b8644b0136..d53a1838d6e8 100644 --- a/fs/notify/inotify/inotify_user.c +++ b/fs/notify/inotify/inotify_user.c @@ -576,7 +576,7 @@ static const struct inotify_operations inotify_user_ops = {  	.destroy_watch	= free_inotify_user_watch,  }; -asmlinkage long sys_inotify_init1(int flags) +SYSCALL_DEFINE1(inotify_init1, int, flags)  {  	struct inotify_device *dev;  	struct inotify_handle *ih; @@ -655,12 +655,13 @@ out_put_fd:  	return ret;  } -asmlinkage long sys_inotify_init(void) +SYSCALL_DEFINE0(inotify_init)  {  	return sys_inotify_init1(0);  } -asmlinkage long sys_inotify_add_watch(int fd, const char __user *pathname, u32 mask) +SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname, +		u32, mask)  {  	struct inode *inode;  	struct inotify_device *dev; @@ -704,7 +705,7 @@ fput_and_out:  	return ret;  } -asmlinkage long sys_inotify_rm_watch(int fd, __s32 wd) +SYSCALL_DEFINE2(inotify_rm_watch, int, fd, __s32, wd)  {  	struct file *filp;  	struct inotify_device *dev; diff --git a/fs/open.c b/fs/open.c index d882fd2351d6..a3a78ceb2a2b 100644 --- a/fs/open.c +++ b/fs/open.c @@ -122,7 +122,7 @@ static int vfs_statfs64(struct dentry *dentry, struct statfs64 *buf)  	return 0;  } -asmlinkage long sys_statfs(const char __user *pathname, struct statfs __user * buf) +SYSCALL_DEFINE2(statfs, const char __user *, pathname, struct statfs __user *, buf)  {  	struct path path;  	int error; @@ -138,8 +138,7 @@ asmlinkage long sys_statfs(const char __user *pathname, struct statfs __user * b  	return error;  } - -asmlinkage long sys_statfs64(const char __user *pathname, size_t sz, struct statfs64 __user *buf) +SYSCALL_DEFINE3(statfs64, const char __user *, pathname, size_t, sz, struct statfs64 __user *, buf)  {  	struct path path;  	long error; @@ -157,8 +156,7 @@ asmlinkage long sys_statfs64(const char __user *pathname, size_t sz, struct stat  	return error;  } - -asmlinkage long sys_fstatfs(unsigned int fd, struct statfs __user * buf) +SYSCALL_DEFINE2(fstatfs, unsigned int, fd, struct statfs __user *, buf)  {  	struct file * file;  	struct statfs tmp; @@ -176,7 +174,7 @@ out:  	return error;  } -asmlinkage long sys_fstatfs64(unsigned int fd, size_t sz, struct statfs64 __user *buf) +SYSCALL_DEFINE3(fstatfs64, unsigned int, fd, size_t, sz, struct statfs64 __user *, buf)  {  	struct file * file;  	struct statfs64 tmp; @@ -289,7 +287,7 @@ out:  	return error;  } -asmlinkage long sys_truncate(const char __user * path, unsigned long length) +SYSCALL_DEFINE2(truncate, const char __user *, path, unsigned long, length)  {  	/* on 32-bit boxen it will cut the range 2^31--2^32-1 off */  	return do_sys_truncate(path, (long)length); @@ -341,7 +339,7 @@ out:  	return error;  } -asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length) +SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length)  {  	long ret = do_sys_ftruncate(fd, length, 1);  	/* avoid REGPARM breakage on x86: */ @@ -351,21 +349,35 @@ asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length)  /* LFS versions of truncate are only needed on 32 bit machines */  #if BITS_PER_LONG == 32 -asmlinkage long sys_truncate64(const char __user * path, loff_t length) +SYSCALL_DEFINE(truncate64)(const char __user * path, loff_t length)  {  	return do_sys_truncate(path, length);  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_truncate64(long path, loff_t length) +{ +	return SYSC_truncate64((const char __user *) path, length); +} +SYSCALL_ALIAS(sys_truncate64, SyS_truncate64); +#endif -asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length) +SYSCALL_DEFINE(ftruncate64)(unsigned int fd, loff_t length)  {  	long ret = do_sys_ftruncate(fd, length, 0);  	/* avoid REGPARM breakage on x86: */  	asmlinkage_protect(2, ret, fd, length);  	return ret;  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_ftruncate64(long fd, loff_t length) +{ +	return SYSC_ftruncate64((unsigned int) fd, length); +} +SYSCALL_ALIAS(sys_ftruncate64, SyS_ftruncate64);  #endif +#endif /* BITS_PER_LONG == 32 */ -asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len) +SYSCALL_DEFINE(fallocate)(int fd, int mode, loff_t offset, loff_t len)  {  	struct file *file;  	struct inode *inode; @@ -422,13 +434,20 @@ out_fput:  out:  	return ret;  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_fallocate(long fd, long mode, loff_t offset, loff_t len) +{ +	return SYSC_fallocate((int)fd, (int)mode, offset, len); +} +SYSCALL_ALIAS(sys_fallocate, SyS_fallocate); +#endif  /*   * access() needs to use the real uid/gid, not the effective uid/gid.   * We do this by temporarily clearing all FS-related capabilities and   * switching the fsuid/fsgid around to the real ones.   */ -asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode) +SYSCALL_DEFINE3(faccessat, int, dfd, const char __user *, filename, int, mode)  {  	const struct cred *old_cred;  	struct cred *override_cred; @@ -498,12 +517,12 @@ out:  	return res;  } -asmlinkage long sys_access(const char __user *filename, int mode) +SYSCALL_DEFINE2(access, const char __user *, filename, int, mode)  {  	return sys_faccessat(AT_FDCWD, filename, mode);  } -asmlinkage long sys_chdir(const char __user * filename) +SYSCALL_DEFINE1(chdir, const char __user *, filename)  {  	struct path path;  	int error; @@ -524,7 +543,7 @@ out:  	return error;  } -asmlinkage long sys_fchdir(unsigned int fd) +SYSCALL_DEFINE1(fchdir, unsigned int, fd)  {  	struct file *file;  	struct inode *inode; @@ -550,7 +569,7 @@ out:  	return error;  } -asmlinkage long sys_chroot(const char __user * filename) +SYSCALL_DEFINE1(chroot, const char __user *, filename)  {  	struct path path;  	int error; @@ -575,7 +594,7 @@ out:  	return error;  } -asmlinkage long sys_fchmod(unsigned int fd, mode_t mode) +SYSCALL_DEFINE2(fchmod, unsigned int, fd, mode_t, mode)  {  	struct inode * inode;  	struct dentry * dentry; @@ -609,8 +628,7 @@ out:  	return err;  } -asmlinkage long sys_fchmodat(int dfd, const char __user *filename, -			     mode_t mode) +SYSCALL_DEFINE3(fchmodat, int, dfd, const char __user *, filename, mode_t, mode)  {  	struct path path;  	struct inode *inode; @@ -639,7 +657,7 @@ out:  	return error;  } -asmlinkage long sys_chmod(const char __user *filename, mode_t mode) +SYSCALL_DEFINE2(chmod, const char __user *, filename, mode_t, mode)  {  	return sys_fchmodat(AT_FDCWD, filename, mode);  } @@ -669,7 +687,7 @@ static int chown_common(struct dentry * dentry, uid_t user, gid_t group)  	return error;  } -asmlinkage long sys_chown(const char __user * filename, uid_t user, gid_t group) +SYSCALL_DEFINE3(chown, const char __user *, filename, uid_t, user, gid_t, group)  {  	struct path path;  	int error; @@ -688,8 +706,8 @@ out:  	return error;  } -asmlinkage long sys_fchownat(int dfd, const char __user *filename, uid_t user, -			     gid_t group, int flag) +SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user, +		gid_t, group, int, flag)  {  	struct path path;  	int error = -EINVAL; @@ -713,7 +731,7 @@ out:  	return error;  } -asmlinkage long sys_lchown(const char __user * filename, uid_t user, gid_t group) +SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group)  {  	struct path path;  	int error; @@ -732,8 +750,7 @@ out:  	return error;  } - -asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group) +SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)  {  	struct file * file;  	int error = -EBADF; @@ -1029,7 +1046,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, int mode)  	return fd;  } -asmlinkage long sys_open(const char __user *filename, int flags, int mode) +SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)  {  	long ret; @@ -1042,8 +1059,8 @@ asmlinkage long sys_open(const char __user *filename, int flags, int mode)  	return ret;  } -asmlinkage long sys_openat(int dfd, const char __user *filename, int flags, -			   int mode) +SYSCALL_DEFINE4(openat, int, dfd, const char __user *, filename, int, flags, +		int, mode)  {  	long ret; @@ -1062,7 +1079,7 @@ asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,   * For backward compatibility?  Maybe this should be moved   * into arch/i386 instead?   */ -asmlinkage long sys_creat(const char __user * pathname, int mode) +SYSCALL_DEFINE2(creat, const char __user *, pathname, int, mode)  {  	return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);  } @@ -1098,7 +1115,7 @@ EXPORT_SYMBOL(filp_close);   * releasing the fd. This ensures that one clone task can't release   * an fd while another clone is opening it.   */ -asmlinkage long sys_close(unsigned int fd) +SYSCALL_DEFINE1(close, unsigned int, fd)  {  	struct file * filp;  	struct files_struct *files = current->files; @@ -1131,14 +1148,13 @@ out_unlock:  	spin_unlock(&files->file_lock);  	return -EBADF;  } -  EXPORT_SYMBOL(sys_close);  /*   * This routine simulates a hangup on the tty, to arrange that users   * are given clean terminals at login time.   */ -asmlinkage long sys_vhangup(void) +SYSCALL_DEFINE0(vhangup)  {  	if (capable(CAP_SYS_TTY_CONFIG)) {  		tty_vhangup_self(); diff --git a/fs/pipe.c b/fs/pipe.c index 891697112f66..3a48ba5179d5 100644 --- a/fs/pipe.c +++ b/fs/pipe.c @@ -1043,7 +1043,7 @@ int do_pipe(int *fd)   * sys_pipe() is the normal C calling standard for creating   * a pipe. It's not the way Unix traditionally does this, though.   */ -asmlinkage long __weak sys_pipe2(int __user *fildes, int flags) +SYSCALL_DEFINE2(pipe2, int __user *, fildes, int, flags)  {  	int fd[2];  	int error; @@ -1059,7 +1059,7 @@ asmlinkage long __weak sys_pipe2(int __user *fildes, int flags)  	return error;  } -asmlinkage long __weak sys_pipe(int __user *fildes) +SYSCALL_DEFINE1(pipe, int __user *, fildes)  {  	return sys_pipe2(fildes, 0);  } diff --git a/fs/quota.c b/fs/quota.c index 4a8c94f05f76..d76ada914f98 100644 --- a/fs/quota.c +++ b/fs/quota.c @@ -371,7 +371,8 @@ static inline struct super_block *quotactl_block(const char __user *special)   * calls. Maybe we need to add the process quotas etc. in the future,   * but we probably should use rlimits for that.   */ -asmlinkage long sys_quotactl(unsigned int cmd, const char __user *special, qid_t id, void __user *addr) +SYSCALL_DEFINE4(quotactl, unsigned int, cmd, const char __user *, special, +		qid_t, id, void __user *, addr)  {  	uint cmds, type;  	struct super_block *sb = NULL; diff --git a/fs/read_write.c b/fs/read_write.c index 5cc6924eb158..400fe81c973e 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -147,7 +147,7 @@ loff_t vfs_llseek(struct file *file, loff_t offset, int origin)  }  EXPORT_SYMBOL(vfs_llseek); -asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin) +SYSCALL_DEFINE3(lseek, unsigned int, fd, off_t, offset, unsigned int, origin)  {  	off_t retval;  	struct file * file; @@ -171,9 +171,9 @@ bad:  }  #ifdef __ARCH_WANT_SYS_LLSEEK -asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high, -			   unsigned long offset_low, loff_t __user * result, -			   unsigned int origin) +SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned long, offset_high, +		unsigned long, offset_low, loff_t __user *, result, +		unsigned int, origin)  {  	int retval;  	struct file * file; @@ -369,7 +369,7 @@ static inline void file_pos_write(struct file *file, loff_t pos)  	file->f_pos = pos;  } -asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) +SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)  {  	struct file *file;  	ssize_t ret = -EBADF; @@ -386,7 +386,8 @@ asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count)  	return ret;  } -asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count) +SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, +		size_t, count)  {  	struct file *file;  	ssize_t ret = -EBADF; @@ -403,8 +404,8 @@ asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t co  	return ret;  } -asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, -			     size_t count, loff_t pos) +SYSCALL_DEFINE(pread64)(unsigned int fd, char __user *buf, +			size_t count, loff_t pos)  {  	struct file *file;  	ssize_t ret = -EBADF; @@ -423,9 +424,17 @@ asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf,  	return ret;  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_pread64(long fd, long buf, long count, loff_t pos) +{ +	return SYSC_pread64((unsigned int) fd, (char __user *) buf, +			    (size_t) count, pos); +} +SYSCALL_ALIAS(sys_pread64, SyS_pread64); +#endif -asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, -			      size_t count, loff_t pos) +SYSCALL_DEFINE(pwrite64)(unsigned int fd, const char __user *buf, +			 size_t count, loff_t pos)  {  	struct file *file;  	ssize_t ret = -EBADF; @@ -444,6 +453,14 @@ asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf,  	return ret;  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_pwrite64(long fd, long buf, long count, loff_t pos) +{ +	return SYSC_pwrite64((unsigned int) fd, (const char __user *) buf, +			     (size_t) count, pos); +} +SYSCALL_ALIAS(sys_pwrite64, SyS_pwrite64); +#endif  /*   * Reduce an iovec's length in-place.  Return the resulting number of segments @@ -672,8 +689,8 @@ ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,  EXPORT_SYMBOL(vfs_writev); -asmlinkage ssize_t -sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) +SYSCALL_DEFINE3(readv, unsigned long, fd, const struct iovec __user *, vec, +		unsigned long, vlen)  {  	struct file *file;  	ssize_t ret = -EBADF; @@ -693,8 +710,8 @@ sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen)  	return ret;  } -asmlinkage ssize_t -sys_writev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) +SYSCALL_DEFINE3(writev, unsigned long, fd, const struct iovec __user *, vec, +		unsigned long, vlen)  {  	struct file *file;  	ssize_t ret = -EBADF; @@ -812,7 +829,7 @@ out:  	return retval;  } -asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, size_t count) +SYSCALL_DEFINE4(sendfile, int, out_fd, int, in_fd, off_t __user *, offset, size_t, count)  {  	loff_t pos;  	off_t off; @@ -831,7 +848,7 @@ asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, siz  	return do_sendfile(out_fd, in_fd, NULL, count, 0);  } -asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count) +SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd, loff_t __user *, offset, size_t, count)  {  	loff_t pos;  	ssize_t ret; diff --git a/fs/readdir.c b/fs/readdir.c index b318d9b5af2e..7723401f8d8b 100644 --- a/fs/readdir.c +++ b/fs/readdir.c @@ -102,7 +102,8 @@ efault:  	return -EFAULT;  } -asmlinkage long old_readdir(unsigned int fd, struct old_linux_dirent __user * dirent, unsigned int count) +SYSCALL_DEFINE3(old_readdir, unsigned int, fd, +		struct old_linux_dirent __user *, dirent, unsigned int, count)  {  	int error;  	struct file * file; @@ -187,7 +188,8 @@ efault:  	return -EFAULT;  } -asmlinkage long sys_getdents(unsigned int fd, struct linux_dirent __user * dirent, unsigned int count) +SYSCALL_DEFINE3(getdents, unsigned int, fd, +		struct linux_dirent __user *, dirent, unsigned int, count)  {  	struct file * file;  	struct linux_dirent __user * lastdirent; @@ -268,7 +270,8 @@ efault:  	return -EFAULT;  } -asmlinkage long sys_getdents64(unsigned int fd, struct linux_dirent64 __user * dirent, unsigned int count) +SYSCALL_DEFINE3(getdents64, unsigned int, fd, +		struct linux_dirent64 __user *, dirent, unsigned int, count)  {  	struct file * file;  	struct linux_dirent64 __user * lastdirent; diff --git a/fs/select.c b/fs/select.c index b0cf1f0896d9..0fe0e1469df3 100644 --- a/fs/select.c +++ b/fs/select.c @@ -557,8 +557,8 @@ out_nofds:  	return ret;  } -asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp, -			fd_set __user *exp, struct timeval __user *tvp) +SYSCALL_DEFINE5(select, int, n, fd_set __user *, inp, fd_set __user *, outp, +		fd_set __user *, exp, struct timeval __user *, tvp)  {  	struct timespec end_time, *to = NULL;  	struct timeval tv; @@ -582,9 +582,9 @@ asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,  }  #ifdef HAVE_SET_RESTORE_SIGMASK -asmlinkage long sys_pselect7(int n, fd_set __user *inp, fd_set __user *outp, -		fd_set __user *exp, struct timespec __user *tsp, -		const sigset_t __user *sigmask, size_t sigsetsize) +static long do_pselect(int n, fd_set __user *inp, fd_set __user *outp, +		       fd_set __user *exp, struct timespec __user *tsp, +		       const sigset_t __user *sigmask, size_t sigsetsize)  {  	sigset_t ksigmask, sigsaved;  	struct timespec ts, end_time, *to = NULL; @@ -636,8 +636,9 @@ asmlinkage long sys_pselect7(int n, fd_set __user *inp, fd_set __user *outp,   * which has a pointer to the sigset_t itself followed by a size_t containing   * the sigset size.   */ -asmlinkage long sys_pselect6(int n, fd_set __user *inp, fd_set __user *outp, -	fd_set __user *exp, struct timespec __user *tsp, void __user *sig) +SYSCALL_DEFINE6(pselect6, int, n, fd_set __user *, inp, fd_set __user *, outp, +		fd_set __user *, exp, struct timespec __user *, tsp, +		void __user *, sig)  {  	size_t sigsetsize = 0;  	sigset_t __user *up = NULL; @@ -650,7 +651,7 @@ asmlinkage long sys_pselect6(int n, fd_set __user *inp, fd_set __user *outp,  			return -EFAULT;  	} -	return sys_pselect7(n, inp, outp, exp, tsp, up, sigsetsize); +	return do_pselect(n, inp, outp, exp, tsp, up, sigsetsize);  }  #endif /* HAVE_SET_RESTORE_SIGMASK */ @@ -854,8 +855,8 @@ static long do_restart_poll(struct restart_block *restart_block)  	return ret;  } -asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds, -			long timeout_msecs) +SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds, +		long, timeout_msecs)  {  	struct timespec end_time, *to = NULL;  	int ret; @@ -889,9 +890,9 @@ asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,  }  #ifdef HAVE_SET_RESTORE_SIGMASK -asmlinkage long sys_ppoll(struct pollfd __user *ufds, unsigned int nfds, -	struct timespec __user *tsp, const sigset_t __user *sigmask, -	size_t sigsetsize) +SYSCALL_DEFINE5(ppoll, struct pollfd __user *, ufds, unsigned int, nfds, +		struct timespec __user *, tsp, const sigset_t __user *, sigmask, +		size_t, sigsetsize)  {  	sigset_t ksigmask, sigsaved;  	struct timespec ts, end_time, *to = NULL; diff --git a/fs/signalfd.c b/fs/signalfd.c index 9c39bc7f8431..b07565c94386 100644 --- a/fs/signalfd.c +++ b/fs/signalfd.c @@ -205,8 +205,8 @@ static const struct file_operations signalfd_fops = {  	.read		= signalfd_read,  }; -asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask, -			      size_t sizemask, int flags) +SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask, +		size_t, sizemask, int, flags)  {  	sigset_t sigmask;  	struct signalfd_ctx *ctx; @@ -259,8 +259,8 @@ asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask,  	return ufd;  } -asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, -			     size_t sizemask) +SYSCALL_DEFINE3(signalfd, int, ufd, sigset_t __user *, user_mask, +		size_t, sizemask)  {  	return sys_signalfd4(ufd, user_mask, sizemask, 0);  } diff --git a/fs/splice.c b/fs/splice.c index a54b3e3f10a7..4ed0ba44a966 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -1435,8 +1435,8 @@ static long vmsplice_to_pipe(struct file *file, const struct iovec __user *iov,   * Currently we punt and implement it as a normal copy, see pipe_to_user().   *   */ -asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov, -			     unsigned long nr_segs, unsigned int flags) +SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, iov, +		unsigned long, nr_segs, unsigned int, flags)  {  	struct file *file;  	long error; @@ -1461,9 +1461,9 @@ asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov,  	return error;  } -asmlinkage long sys_splice(int fd_in, loff_t __user *off_in, -			   int fd_out, loff_t __user *off_out, -			   size_t len, unsigned int flags) +SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in, +		int, fd_out, loff_t __user *, off_out, +		size_t, len, unsigned int, flags)  {  	long error;  	struct file *in, *out; @@ -1685,7 +1685,7 @@ static long do_tee(struct file *in, struct file *out, size_t len,  	return ret;  } -asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags) +SYSCALL_DEFINE4(tee, int, fdin, int, fdout, size_t, len, unsigned int, flags)  {  	struct file *in;  	int error, fput_in; diff --git a/fs/stat.c b/fs/stat.c index 7e12a6f82795..2db740a0cfb5 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -152,7 +152,7 @@ static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * sta  	return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;  } -asmlinkage long sys_stat(char __user * filename, struct __old_kernel_stat __user * statbuf) +SYSCALL_DEFINE2(stat, char __user *, filename, struct __old_kernel_stat __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_stat_fd(AT_FDCWD, filename, &stat); @@ -162,7 +162,8 @@ asmlinkage long sys_stat(char __user * filename, struct __old_kernel_stat __user  	return error;  } -asmlinkage long sys_lstat(char __user * filename, struct __old_kernel_stat __user * statbuf) + +SYSCALL_DEFINE2(lstat, char __user *, filename, struct __old_kernel_stat __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_lstat_fd(AT_FDCWD, filename, &stat); @@ -172,7 +173,8 @@ asmlinkage long sys_lstat(char __user * filename, struct __old_kernel_stat __use  	return error;  } -asmlinkage long sys_fstat(unsigned int fd, struct __old_kernel_stat __user * statbuf) + +SYSCALL_DEFINE2(fstat, unsigned int, fd, struct __old_kernel_stat __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_fstat(fd, &stat); @@ -235,7 +237,7 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)  	return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;  } -asmlinkage long sys_newstat(char __user *filename, struct stat __user *statbuf) +SYSCALL_DEFINE2(newstat, char __user *, filename, struct stat __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_stat_fd(AT_FDCWD, filename, &stat); @@ -246,7 +248,7 @@ asmlinkage long sys_newstat(char __user *filename, struct stat __user *statbuf)  	return error;  } -asmlinkage long sys_newlstat(char __user *filename, struct stat __user *statbuf) +SYSCALL_DEFINE2(newlstat, char __user *, filename, struct stat __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_lstat_fd(AT_FDCWD, filename, &stat); @@ -258,8 +260,8 @@ asmlinkage long sys_newlstat(char __user *filename, struct stat __user *statbuf)  }  #if !defined(__ARCH_WANT_STAT64) || defined(__ARCH_WANT_SYS_NEWFSTATAT) -asmlinkage long sys_newfstatat(int dfd, char __user *filename, -				struct stat __user *statbuf, int flag) +SYSCALL_DEFINE4(newfstatat, int, dfd, char __user *, filename, +		struct stat __user *, statbuf, int, flag)  {  	struct kstat stat;  	int error = -EINVAL; @@ -280,7 +282,7 @@ out:  }  #endif -asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf) +SYSCALL_DEFINE2(newfstat, unsigned int, fd, struct stat __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_fstat(fd, &stat); @@ -291,8 +293,8 @@ asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf)  	return error;  } -asmlinkage long sys_readlinkat(int dfd, const char __user *pathname, -				char __user *buf, int bufsiz) +SYSCALL_DEFINE4(readlinkat, int, dfd, const char __user *, pathname, +		char __user *, buf, int, bufsiz)  {  	struct path path;  	int error; @@ -318,8 +320,8 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *pathname,  	return error;  } -asmlinkage long sys_readlink(const char __user *path, char __user *buf, -				int bufsiz) +SYSCALL_DEFINE3(readlink, const char __user *, path, char __user *, buf, +		int, bufsiz)  {  	return sys_readlinkat(AT_FDCWD, path, buf, bufsiz);  } @@ -365,7 +367,7 @@ static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf)  	return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;  } -asmlinkage long sys_stat64(char __user * filename, struct stat64 __user * statbuf) +SYSCALL_DEFINE2(stat64, char __user *, filename, struct stat64 __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_stat(filename, &stat); @@ -375,7 +377,8 @@ asmlinkage long sys_stat64(char __user * filename, struct stat64 __user * statbu  	return error;  } -asmlinkage long sys_lstat64(char __user * filename, struct stat64 __user * statbuf) + +SYSCALL_DEFINE2(lstat64, char __user *, filename, struct stat64 __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_lstat(filename, &stat); @@ -385,7 +388,8 @@ asmlinkage long sys_lstat64(char __user * filename, struct stat64 __user * statb  	return error;  } -asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf) + +SYSCALL_DEFINE2(fstat64, unsigned long, fd, struct stat64 __user *, statbuf)  {  	struct kstat stat;  	int error = vfs_fstat(fd, &stat); @@ -396,8 +400,8 @@ asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf)  	return error;  } -asmlinkage long sys_fstatat64(int dfd, char __user *filename, -			       struct stat64 __user *statbuf, int flag) +SYSCALL_DEFINE4(fstatat64, int, dfd, char __user *, filename, +		struct stat64 __user *, statbuf, int, flag)  {  	struct kstat stat;  	int error = -EINVAL; diff --git a/fs/super.c b/fs/super.c index ed080c417167..645e5403f2a0 100644 --- a/fs/super.c +++ b/fs/super.c @@ -544,7 +544,7 @@ rescan:  	return NULL;  } -asmlinkage long sys_ustat(unsigned dev, struct ustat __user * ubuf) +SYSCALL_DEFINE2(ustat, unsigned, dev, struct ustat __user *, ubuf)  {          struct super_block *s;          struct ustat tmp; diff --git a/fs/sync.c b/fs/sync.c index ac02b56548bc..a16d53e5fe9d 100644 --- a/fs/sync.c +++ b/fs/sync.c @@ -36,7 +36,7 @@ static void do_sync(unsigned long wait)  		laptop_sync_completion();  } -asmlinkage long sys_sync(void) +SYSCALL_DEFINE0(sync)  {  	do_sync(1);  	return 0; @@ -144,12 +144,12 @@ static int do_fsync(unsigned int fd, int datasync)  	return ret;  } -asmlinkage long sys_fsync(unsigned int fd) +SYSCALL_DEFINE1(fsync, unsigned int, fd)  {  	return do_fsync(fd, 0);  } -asmlinkage long sys_fdatasync(unsigned int fd) +SYSCALL_DEFINE1(fdatasync, unsigned int, fd)  {  	return do_fsync(fd, 1);  } @@ -201,8 +201,8 @@ asmlinkage long sys_fdatasync(unsigned int fd)   * already-instantiated disk blocks, there are no guarantees here that the data   * will be available after a crash.   */ -asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes, -					unsigned int flags) +SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes, +				unsigned int flags)  {  	int ret;  	struct file *file; @@ -262,14 +262,32 @@ out_put:  out:  	return ret;  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_sync_file_range(long fd, loff_t offset, loff_t nbytes, +				    long flags) +{ +	return SYSC_sync_file_range((int) fd, offset, nbytes, +				    (unsigned int) flags); +} +SYSCALL_ALIAS(sys_sync_file_range, SyS_sync_file_range); +#endif  /* It would be nice if people remember that not all the world's an i386     when they introduce new system calls */ -asmlinkage long sys_sync_file_range2(int fd, unsigned int flags, -				     loff_t offset, loff_t nbytes) +SYSCALL_DEFINE(sync_file_range2)(int fd, unsigned int flags, +				 loff_t offset, loff_t nbytes)  {  	return sys_sync_file_range(fd, offset, nbytes, flags);  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_sync_file_range2(long fd, long flags, +				     loff_t offset, loff_t nbytes) +{ +	return SYSC_sync_file_range2((int) fd, (unsigned int) flags, +				     offset, nbytes); +} +SYSCALL_ALIAS(sys_sync_file_range2, SyS_sync_file_range2); +#endif  /*   * `endbyte' is inclusive diff --git a/fs/timerfd.c b/fs/timerfd.c index 0862f0e49d0c..6a123b8ff3f5 100644 --- a/fs/timerfd.c +++ b/fs/timerfd.c @@ -177,7 +177,7 @@ static struct file *timerfd_fget(int fd)  	return file;  } -asmlinkage long sys_timerfd_create(int clockid, int flags) +SYSCALL_DEFINE2(timerfd_create, int, clockid, int, flags)  {  	int ufd;  	struct timerfd_ctx *ctx; @@ -208,9 +208,9 @@ asmlinkage long sys_timerfd_create(int clockid, int flags)  	return ufd;  } -asmlinkage long sys_timerfd_settime(int ufd, int flags, -				    const struct itimerspec __user *utmr, -				    struct itimerspec __user *otmr) +SYSCALL_DEFINE4(timerfd_settime, int, ufd, int, flags, +		const struct itimerspec __user *, utmr, +		struct itimerspec __user *, otmr)  {  	struct file *file;  	struct timerfd_ctx *ctx; @@ -265,7 +265,7 @@ asmlinkage long sys_timerfd_settime(int ufd, int flags,  	return 0;  } -asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr) +SYSCALL_DEFINE2(timerfd_gettime, int, ufd, struct itimerspec __user *, otmr)  {  	struct file *file;  	struct timerfd_ctx *ctx; diff --git a/fs/utimes.c b/fs/utimes.c index 6929e3e91d05..e4c75db5d373 100644 --- a/fs/utimes.c +++ b/fs/utimes.c @@ -24,7 +24,7 @@   * must be owner or have write permission.   * Else, update from *times, must be owner or super user.   */ -asmlinkage long sys_utime(char __user *filename, struct utimbuf __user *times) +SYSCALL_DEFINE2(utime, char __user *, filename, struct utimbuf __user *, times)  {  	struct timespec tv[2]; @@ -170,7 +170,8 @@ out:  	return error;  } -asmlinkage long sys_utimensat(int dfd, char __user *filename, struct timespec __user *utimes, int flags) +SYSCALL_DEFINE4(utimensat, int, dfd, char __user *, filename, +		struct timespec __user *, utimes, int, flags)  {  	struct timespec tstimes[2]; @@ -187,7 +188,8 @@ asmlinkage long sys_utimensat(int dfd, char __user *filename, struct timespec __  	return do_utimes(dfd, filename, utimes ? tstimes : NULL, flags);  } -asmlinkage long sys_futimesat(int dfd, char __user *filename, struct timeval __user *utimes) +SYSCALL_DEFINE3(futimesat, int, dfd, char __user *, filename, +		struct timeval __user *, utimes)  {  	struct timeval times[2];  	struct timespec tstimes[2]; @@ -214,7 +216,8 @@ asmlinkage long sys_futimesat(int dfd, char __user *filename, struct timeval __u  	return do_utimes(dfd, filename, utimes ? tstimes : NULL, 0);  } -asmlinkage long sys_utimes(char __user *filename, struct timeval __user *utimes) +SYSCALL_DEFINE2(utimes, char __user *, filename, +		struct timeval __user *, utimes)  {  	return sys_futimesat(AT_FDCWD, filename, utimes);  } diff --git a/fs/xattr.c b/fs/xattr.c index 237804cd6b56..197c4fcac032 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -251,9 +251,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,  	return error;  } -asmlinkage long -sys_setxattr(const char __user *pathname, const char __user *name, -	     const void __user *value, size_t size, int flags) +SYSCALL_DEFINE5(setxattr, const char __user *, pathname, +		const char __user *, name, const void __user *, value, +		size_t, size, int, flags)  {  	struct path path;  	int error; @@ -270,9 +270,9 @@ sys_setxattr(const char __user *pathname, const char __user *name,  	return error;  } -asmlinkage long -sys_lsetxattr(const char __user *pathname, const char __user *name, -	      const void __user *value, size_t size, int flags) +SYSCALL_DEFINE5(lsetxattr, const char __user *, pathname, +		const char __user *, name, const void __user *, value, +		size_t, size, int, flags)  {  	struct path path;  	int error; @@ -289,9 +289,8 @@ sys_lsetxattr(const char __user *pathname, const char __user *name,  	return error;  } -asmlinkage long -sys_fsetxattr(int fd, const char __user *name, const void __user *value, -	      size_t size, int flags) +SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name, +		const void __user *,value, size_t, size, int, flags)  {  	struct file *f;  	struct dentry *dentry; @@ -349,9 +348,8 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,  	return error;  } -asmlinkage ssize_t -sys_getxattr(const char __user *pathname, const char __user *name, -	     void __user *value, size_t size) +SYSCALL_DEFINE4(getxattr, const char __user *, pathname, +		const char __user *, name, void __user *, value, size_t, size)  {  	struct path path;  	ssize_t error; @@ -364,9 +362,8 @@ sys_getxattr(const char __user *pathname, const char __user *name,  	return error;  } -asmlinkage ssize_t -sys_lgetxattr(const char __user *pathname, const char __user *name, void __user *value, -	      size_t size) +SYSCALL_DEFINE4(lgetxattr, const char __user *, pathname, +		const char __user *, name, void __user *, value, size_t, size)  {  	struct path path;  	ssize_t error; @@ -379,8 +376,8 @@ sys_lgetxattr(const char __user *pathname, const char __user *name, void __user  	return error;  } -asmlinkage ssize_t -sys_fgetxattr(int fd, const char __user *name, void __user *value, size_t size) +SYSCALL_DEFINE4(fgetxattr, int, fd, const char __user *, name, +		void __user *, value, size_t, size)  {  	struct file *f;  	ssize_t error = -EBADF; @@ -424,8 +421,8 @@ listxattr(struct dentry *d, char __user *list, size_t size)  	return error;  } -asmlinkage ssize_t -sys_listxattr(const char __user *pathname, char __user *list, size_t size) +SYSCALL_DEFINE3(listxattr, const char __user *, pathname, char __user *, list, +		size_t, size)  {  	struct path path;  	ssize_t error; @@ -438,8 +435,8 @@ sys_listxattr(const char __user *pathname, char __user *list, size_t size)  	return error;  } -asmlinkage ssize_t -sys_llistxattr(const char __user *pathname, char __user *list, size_t size) +SYSCALL_DEFINE3(llistxattr, const char __user *, pathname, char __user *, list, +		size_t, size)  {  	struct path path;  	ssize_t error; @@ -452,8 +449,7 @@ sys_llistxattr(const char __user *pathname, char __user *list, size_t size)  	return error;  } -asmlinkage ssize_t -sys_flistxattr(int fd, char __user *list, size_t size) +SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)  {  	struct file *f;  	ssize_t error = -EBADF; @@ -485,8 +481,8 @@ removexattr(struct dentry *d, const char __user *name)  	return vfs_removexattr(d, kname);  } -asmlinkage long -sys_removexattr(const char __user *pathname, const char __user *name) +SYSCALL_DEFINE2(removexattr, const char __user *, pathname, +		const char __user *, name)  {  	struct path path;  	int error; @@ -503,8 +499,8 @@ sys_removexattr(const char __user *pathname, const char __user *name)  	return error;  } -asmlinkage long -sys_lremovexattr(const char __user *pathname, const char __user *name) +SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname, +		const char __user *, name)  {  	struct path path;  	int error; @@ -521,8 +517,7 @@ sys_lremovexattr(const char __user *pathname, const char __user *name)  	return error;  } -asmlinkage long -sys_fremovexattr(int fd, const char __user *name) +SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)  {  	struct file *f;  	struct dentry *dentry; diff --git a/include/linux/compat.h b/include/linux/compat.h index e88f3ecf38b4..3fd2194ff573 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -280,5 +280,18 @@ asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,  asmlinkage long compat_sys_timerfd_gettime(int ufd,  				   struct compat_itimerspec __user *otmr); +asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page, +				      __u32 __user *pages, +				      const int __user *nodes, +				      int __user *status, +				      int flags); +asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename, +				     struct compat_timeval __user *t); +asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, +				      struct compat_stat __user *statbuf, +				      int flag); +asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, +				  int flags, int mode); +  #endif /* CONFIG_COMPAT */  #endif /* _LINUX_COMPAT_H */ diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 18d0a243a7b3..16875f89e6a7 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -54,6 +54,7 @@ struct compat_stat;  struct compat_timeval;  struct robust_list_head;  struct getcpu_cache; +struct old_linux_dirent;  #include <linux/types.h>  #include <linux/aio_abi.h> @@ -65,6 +66,74 @@ struct getcpu_cache;  #include <linux/quota.h>  #include <linux/key.h> +#define __SC_DECL1(t1, a1)	t1 a1 +#define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__) +#define __SC_DECL3(t3, a3, ...) t3 a3, __SC_DECL2(__VA_ARGS__) +#define __SC_DECL4(t4, a4, ...) t4 a4, __SC_DECL3(__VA_ARGS__) +#define __SC_DECL5(t5, a5, ...) t5 a5, __SC_DECL4(__VA_ARGS__) +#define __SC_DECL6(t6, a6, ...) t6 a6, __SC_DECL5(__VA_ARGS__) + +#define __SC_LONG1(t1, a1) 	long a1 +#define __SC_LONG2(t2, a2, ...) long a2, __SC_LONG1(__VA_ARGS__) +#define __SC_LONG3(t3, a3, ...) long a3, __SC_LONG2(__VA_ARGS__) +#define __SC_LONG4(t4, a4, ...) long a4, __SC_LONG3(__VA_ARGS__) +#define __SC_LONG5(t5, a5, ...) long a5, __SC_LONG4(__VA_ARGS__) +#define __SC_LONG6(t6, a6, ...) long a6, __SC_LONG5(__VA_ARGS__) + +#define __SC_CAST1(t1, a1)	(t1) a1 +#define __SC_CAST2(t2, a2, ...) (t2) a2, __SC_CAST1(__VA_ARGS__) +#define __SC_CAST3(t3, a3, ...) (t3) a3, __SC_CAST2(__VA_ARGS__) +#define __SC_CAST4(t4, a4, ...) (t4) a4, __SC_CAST3(__VA_ARGS__) +#define __SC_CAST5(t5, a5, ...) (t5) a5, __SC_CAST4(__VA_ARGS__) +#define __SC_CAST6(t6, a6, ...) (t6) a6, __SC_CAST5(__VA_ARGS__) + +#define __SC_TEST(type)		BUILD_BUG_ON(sizeof(type) > sizeof(long)) +#define __SC_TEST1(t1, a1)	__SC_TEST(t1) +#define __SC_TEST2(t2, a2, ...)	__SC_TEST(t2); __SC_TEST1(__VA_ARGS__) +#define __SC_TEST3(t3, a3, ...)	__SC_TEST(t3); __SC_TEST2(__VA_ARGS__) +#define __SC_TEST4(t4, a4, ...)	__SC_TEST(t4); __SC_TEST3(__VA_ARGS__) +#define __SC_TEST5(t5, a5, ...)	__SC_TEST(t5); __SC_TEST4(__VA_ARGS__) +#define __SC_TEST6(t6, a6, ...)	__SC_TEST(t6); __SC_TEST5(__VA_ARGS__) + +#define SYSCALL_DEFINE0(name)   asmlinkage long sys_##name(void) +#define SYSCALL_DEFINE1(...)    SYSCALL_DEFINEx(1, __VA_ARGS__) +#define SYSCALL_DEFINE2(...)    SYSCALL_DEFINEx(2, __VA_ARGS__) +#define SYSCALL_DEFINE3(...)    SYSCALL_DEFINEx(3, __VA_ARGS__) +#define SYSCALL_DEFINE4(...)    SYSCALL_DEFINEx(4, __VA_ARGS__) +#define SYSCALL_DEFINE5(...)    SYSCALL_DEFINEx(5, __VA_ARGS__) +#define SYSCALL_DEFINE6(...)    SYSCALL_DEFINEx(6, __VA_ARGS__) + +#ifdef CONFIG_PPC64 +#define SYSCALL_ALIAS(alias, name)					\ +	asm ("\t.globl " #alias "\n\t.set " #alias ", " #name "\n"	\ +	     "\t.globl ." #alias "\n\t.set ." #alias ", ." #name) +#else +#define SYSCALL_ALIAS(alias, name)					\ +	asm ("\t.globl " #alias "\n\t.set " #alias ", " #name) +#endif + +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS + +#define SYSCALL_DEFINE(name) static inline long SYSC_##name +#define SYSCALL_DEFINEx(x, name, ...)					\ +	asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__));		\ +	static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__));	\ +	asmlinkage long SyS_##name(__SC_LONG##x(__VA_ARGS__))		\ +	{								\ +		__SC_TEST##x(__VA_ARGS__);				\ +		return (long) SYSC_##name(__SC_CAST##x(__VA_ARGS__));	\ +	}								\ +	SYSCALL_ALIAS(sys_##name, SyS_##name);				\ +	static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)) + +#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */ + +#define SYSCALL_DEFINE(name) asmlinkage long sys_##name +#define SYSCALL_DEFINEx(x, name, ...)					\ +	asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)) + +#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */ +  asmlinkage long sys_time(time_t __user *tloc);  asmlinkage long sys_stime(time_t __user *tptr);  asmlinkage long sys_gettimeofday(struct timeval __user *tv, @@ -77,7 +146,7 @@ asmlinkage long sys_times(struct tms __user *tbuf);  asmlinkage long sys_gettid(void);  asmlinkage long sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp); -asmlinkage unsigned long sys_alarm(unsigned int seconds); +asmlinkage long sys_alarm(unsigned int seconds);  asmlinkage long sys_getpid(void);  asmlinkage long sys_getppid(void);  asmlinkage long sys_getuid(void); @@ -166,7 +235,7 @@ asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments,  				unsigned long flags);  asmlinkage long sys_exit(int error_code); -asmlinkage void sys_exit_group(int error_code); +asmlinkage long sys_exit_group(int error_code);  asmlinkage long sys_wait4(pid_t pid, int __user *stat_addr,  				int options, struct rusage __user *ru);  asmlinkage long sys_waitid(int which, pid_t pid, @@ -196,7 +265,7 @@ asmlinkage long sys_tkill(int pid, int sig);  asmlinkage long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo);  asmlinkage long sys_sgetmask(void);  asmlinkage long sys_ssetmask(int newmask); -asmlinkage unsigned long sys_signal(int sig, __sighandler_t handler); +asmlinkage long sys_signal(int sig, __sighandler_t handler);  asmlinkage long sys_pause(void);  asmlinkage long sys_sync(void); @@ -246,29 +315,29 @@ asmlinkage long sys_lsetxattr(const char __user *path, const char __user *name,  			      const void __user *value, size_t size, int flags);  asmlinkage long sys_fsetxattr(int fd, const char __user *name,  			      const void __user *value, size_t size, int flags); -asmlinkage ssize_t sys_getxattr(const char __user *path, const char __user *name, -				void __user *value, size_t size); -asmlinkage ssize_t sys_lgetxattr(const char __user *path, const char __user *name, -				void __user *value, size_t size); -asmlinkage ssize_t sys_fgetxattr(int fd, const char __user *name, -				void __user *value, size_t size); -asmlinkage ssize_t sys_listxattr(const char __user *path, char __user *list, -				size_t size); -asmlinkage ssize_t sys_llistxattr(const char __user *path, char __user *list, -				size_t size); -asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size); +asmlinkage long sys_getxattr(const char __user *path, const char __user *name, +			     void __user *value, size_t size); +asmlinkage long sys_lgetxattr(const char __user *path, const char __user *name, +			      void __user *value, size_t size); +asmlinkage long sys_fgetxattr(int fd, const char __user *name, +			      void __user *value, size_t size); +asmlinkage long sys_listxattr(const char __user *path, char __user *list, +			      size_t size); +asmlinkage long sys_llistxattr(const char __user *path, char __user *list, +			       size_t size); +asmlinkage long sys_flistxattr(int fd, char __user *list, size_t size);  asmlinkage long sys_removexattr(const char __user *path,  				const char __user *name);  asmlinkage long sys_lremovexattr(const char __user *path,  				 const char __user *name);  asmlinkage long sys_fremovexattr(int fd, const char __user *name); -asmlinkage unsigned long sys_brk(unsigned long brk); +asmlinkage long sys_brk(unsigned long brk);  asmlinkage long sys_mprotect(unsigned long start, size_t len,  				unsigned long prot); -asmlinkage unsigned long sys_mremap(unsigned long addr, -				unsigned long old_len, unsigned long new_len, -				unsigned long flags, unsigned long new_addr); +asmlinkage long sys_mremap(unsigned long addr, +			   unsigned long old_len, unsigned long new_len, +			   unsigned long flags, unsigned long new_addr);  asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,  			unsigned long prot, unsigned long pgoff,  			unsigned long flags); @@ -321,10 +390,10 @@ asmlinkage long sys_io_submit(aio_context_t, long,  				struct iocb __user * __user *);  asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,  			      struct io_event __user *result); -asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, -				off_t __user *offset, size_t count); -asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, -				loff_t __user *offset, size_t count); +asmlinkage long sys_sendfile(int out_fd, int in_fd, +			     off_t __user *offset, size_t count); +asmlinkage long sys_sendfile64(int out_fd, int in_fd, +			       loff_t __user *offset, size_t count);  asmlinkage long sys_readlink(const char __user *path,  				char __user *buf, int bufsiz);  asmlinkage long sys_creat(const char __user *pathname, int mode); @@ -368,26 +437,25 @@ asmlinkage long sys_utime(char __user *filename,  				struct utimbuf __user *times);  asmlinkage long sys_utimes(char __user *filename,  				struct timeval __user *utimes); -asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, -				unsigned int origin); +asmlinkage long sys_lseek(unsigned int fd, off_t offset, +			  unsigned int origin);  asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high,  			unsigned long offset_low, loff_t __user *result,  			unsigned int origin); -asmlinkage ssize_t sys_read(unsigned int fd, char __user *buf, -				size_t count); -asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count); -asmlinkage ssize_t sys_readv(unsigned long fd, -				const struct iovec __user *vec, -				unsigned long vlen); -asmlinkage ssize_t sys_write(unsigned int fd, const char __user *buf, -				size_t count); -asmlinkage ssize_t sys_writev(unsigned long fd, -				const struct iovec __user *vec, -				unsigned long vlen); -asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, -				size_t count, loff_t pos); -asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, -				size_t count, loff_t pos); +asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count); +asmlinkage long sys_readahead(int fd, loff_t offset, size_t count); +asmlinkage long sys_readv(unsigned long fd, +			  const struct iovec __user *vec, +			  unsigned long vlen); +asmlinkage long sys_write(unsigned int fd, const char __user *buf, +			  size_t count); +asmlinkage long sys_writev(unsigned long fd, +			   const struct iovec __user *vec, +			   unsigned long vlen); +asmlinkage long sys_pread64(unsigned int fd, char __user *buf, +			    size_t count, loff_t pos); +asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf, +			     size_t count, loff_t pos);  asmlinkage long sys_getcwd(char __user *buf, unsigned long size);  asmlinkage long sys_mkdir(const char __user *pathname, int mode);  asmlinkage long sys_chdir(const char __user *filename); @@ -476,7 +544,7 @@ asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);  asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr);  asmlinkage long sys_mq_unlink(const char __user *name);  asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec __user *abs_timeout); -asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout); +asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout);  asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification);  asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat); @@ -530,11 +598,6 @@ asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages,  				const int __user *nodes,  				int __user *status,  				int flags); -asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page, -				__u32 __user *pages, -				const int __user *nodes, -				int __user *status, -				int flags);  asmlinkage long sys_mbind(unsigned long start, unsigned long len,  				unsigned long mode,  				unsigned long __user *nmask, @@ -583,13 +646,6 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *path, char __user *bu  			       int bufsiz);  asmlinkage long sys_utimensat(int dfd, char __user *filename,  				struct timespec __user *utimes, int flags); -asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename, -				     struct compat_timeval __user *t); -asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, -				      struct compat_stat __user *statbuf, -				      int flag); -asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, -				   int flags, int mode);  asmlinkage long sys_unshare(unsigned long unshare_flags);  asmlinkage long sys_splice(int fd_in, loff_t __user *off_in, @@ -621,6 +677,15 @@ asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr);  asmlinkage long sys_eventfd(unsigned int count);  asmlinkage long sys_eventfd2(unsigned int count, int flags);  asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len); +asmlinkage long sys_old_readdir(unsigned int, struct old_linux_dirent __user *, unsigned int); +asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *, +			     fd_set __user *, struct timespec __user *, +			     void __user *); +asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int, +			  struct timespec __user *, const sigset_t __user *, +			  size_t); +asmlinkage long sys_pipe2(int __user *, int); +asmlinkage long sys_pipe(int __user *);  int kernel_execve(const char *filename, char *const argv[], char *const envp[]); diff --git a/ipc/mqueue.c b/ipc/mqueue.c index 23fdb8492b8e..54b4077fed79 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -650,8 +650,8 @@ static struct file *do_open(struct dentry *dentry, int oflag)  	return dentry_open(dentry, mqueue_mnt, oflag, cred);  } -asmlinkage long sys_mq_open(const char __user *u_name, int oflag, mode_t mode, -				struct mq_attr __user *u_attr) +SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode, +		struct mq_attr __user *, u_attr)  {  	struct dentry *dentry;  	struct file *filp; @@ -721,7 +721,7 @@ out_putname:  	return fd;  } -asmlinkage long sys_mq_unlink(const char __user *u_name) +SYSCALL_DEFINE1(mq_unlink, const char __user *, u_name)  {  	int err;  	char *name; @@ -814,9 +814,9 @@ static inline void pipelined_receive(struct mqueue_inode_info *info)  	sender->state = STATE_READY;  } -asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr, -	size_t msg_len, unsigned int msg_prio, -	const struct timespec __user *u_abs_timeout) +SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr, +		size_t, msg_len, unsigned int, msg_prio, +		const struct timespec __user *, u_abs_timeout)  {  	struct file *filp;  	struct inode *inode; @@ -907,9 +907,9 @@ out:  	return ret;  } -asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr, -	size_t msg_len, unsigned int __user *u_msg_prio, -	const struct timespec __user *u_abs_timeout) +SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr, +		size_t, msg_len, unsigned int __user *, u_msg_prio, +		const struct timespec __user *, u_abs_timeout)  {  	long timeout;  	ssize_t ret; @@ -997,8 +997,8 @@ out:   * and he isn't currently owner of notification, will be silently discarded.   * It isn't explicitly defined in the POSIX.   */ -asmlinkage long sys_mq_notify(mqd_t mqdes, -				const struct sigevent __user *u_notification) +SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes, +		const struct sigevent __user *, u_notification)  {  	int ret;  	struct file *filp; @@ -1123,9 +1123,9 @@ out:  	return ret;  } -asmlinkage long sys_mq_getsetattr(mqd_t mqdes, -			const struct mq_attr __user *u_mqstat, -			struct mq_attr __user *u_omqstat) +SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes, +		const struct mq_attr __user *, u_mqstat, +		struct mq_attr __user *, u_omqstat)  {  	int ret;  	struct mq_attr mqstat, omqstat; diff --git a/ipc/msg.c b/ipc/msg.c index b4eee1c6101d..2ceab7f12fcb 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -309,7 +309,7 @@ static inline int msg_security(struct kern_ipc_perm *ipcp, int msgflg)  	return security_msg_queue_associate(msq, msgflg);  } -asmlinkage long sys_msgget(key_t key, int msgflg) +SYSCALL_DEFINE2(msgget, key_t, key, int, msgflg)  {  	struct ipc_namespace *ns;  	struct ipc_ops msg_ops; @@ -466,7 +466,7 @@ out_up:  	return err;  } -asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf) +SYSCALL_DEFINE3(msgctl, int, msqid, int, cmd, struct msqid_ds __user *, buf)  {  	struct msg_queue *msq;  	int err, version; @@ -723,8 +723,8 @@ out_free:  	return err;  } -asmlinkage long -sys_msgsnd(int msqid, struct msgbuf __user *msgp, size_t msgsz, int msgflg) +SYSCALL_DEFINE4(msgsnd, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz, +		int, msgflg)  {  	long mtype; @@ -904,8 +904,8 @@ out_unlock:  	return msgsz;  } -asmlinkage long sys_msgrcv(int msqid, struct msgbuf __user *msgp, size_t msgsz, -			   long msgtyp, int msgflg) +SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz, +		long, msgtyp, int, msgflg)  {  	long err, mtype; diff --git a/ipc/sem.c b/ipc/sem.c index c68cd3f8f0c9..16a2189e96f9 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -308,7 +308,7 @@ static inline int sem_more_checks(struct kern_ipc_perm *ipcp,  	return 0;  } -asmlinkage long sys_semget(key_t key, int nsems, int semflg) +SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg)  {  	struct ipc_namespace *ns;  	struct ipc_ops sem_ops; @@ -887,7 +887,7 @@ out_up:  	return err;  } -asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg) +SYSCALL_DEFINE(semctl)(int semid, int semnum, int cmd, union semun arg)  {  	int err = -EINVAL;  	int version; @@ -923,6 +923,13 @@ asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg)  		return -EINVAL;  	}  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_semctl(int semid, int semnum, int cmd, union semun arg) +{ +	return SYSC_semctl((int) semid, (int) semnum, (int) cmd, arg); +} +SYSCALL_ALIAS(sys_semctl, SyS_semctl); +#endif  /* If the task doesn't already have a undo_list, then allocate one   * here.  We guarantee there is only one thread using this undo list, @@ -1048,8 +1055,8 @@ out:  	return un;  } -asmlinkage long sys_semtimedop(int semid, struct sembuf __user *tsops, -			unsigned nsops, const struct timespec __user *timeout) +SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, +		unsigned, nsops, const struct timespec __user *, timeout)  {  	int error = -EINVAL;  	struct sem_array *sma; @@ -1225,7 +1232,8 @@ out_free:  	return error;  } -asmlinkage long sys_semop (int semid, struct sembuf __user *tsops, unsigned nsops) +SYSCALL_DEFINE3(semop, int, semid, struct sembuf __user *, tsops, +		unsigned, nsops)  {  	return sys_semtimedop(semid, tsops, nsops, NULL);  } diff --git a/ipc/shm.c b/ipc/shm.c index d0ab5527bf45..a9e09ad2263e 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -440,7 +440,7 @@ static inline int shm_more_checks(struct kern_ipc_perm *ipcp,  	return 0;  } -asmlinkage long sys_shmget (key_t key, size_t size, int shmflg) +SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg)  {  	struct ipc_namespace *ns;  	struct ipc_ops shm_ops; @@ -621,7 +621,7 @@ out_up:  	return err;  } -asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf) +SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf)  {  	struct shmid_kernel *shp;  	int err, version; @@ -939,7 +939,7 @@ out_put_dentry:  	goto out_nattch;  } -asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg) +SYSCALL_DEFINE3(shmat, int, shmid, char __user *, shmaddr, int, shmflg)  {  	unsigned long ret;  	long err; @@ -955,7 +955,7 @@ asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg)   * detach and kill segment if marked destroyed.   * The work is done in shm_close.   */ -asmlinkage long sys_shmdt(char __user *shmaddr) +SYSCALL_DEFINE1(shmdt, char __user *, shmaddr)  {  	struct mm_struct *mm = current->mm;  	struct vm_area_struct *vma, *next; diff --git a/kernel/acct.c b/kernel/acct.c index d57b7cbb98b6..7afa31564162 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -277,7 +277,7 @@ static int acct_on(char *name)   * should be written. If the filename is NULL, accounting will be   * shutdown.   */ -asmlinkage long sys_acct(const char __user *name) +SYSCALL_DEFINE1(acct, const char __user *, name)  {  	int error; diff --git a/kernel/capability.c b/kernel/capability.c index 688926e496be..4e17041963f5 100644 --- a/kernel/capability.c +++ b/kernel/capability.c @@ -161,7 +161,7 @@ static inline int cap_get_target_pid(pid_t pid, kernel_cap_t *pEp,   *   * Returns 0 on success and < 0 on error.   */ -asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr) +SYSCALL_DEFINE2(capget, cap_user_header_t, header, cap_user_data_t, dataptr)  {  	int ret = 0;  	pid_t pid; @@ -235,7 +235,7 @@ asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr)   *   * Returns 0 on success and < 0 on error.   */ -asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data) +SYSCALL_DEFINE2(capset, cap_user_header_t, header, const cap_user_data_t, data)  {  	struct __user_cap_data_struct kdata[_KERNEL_CAPABILITY_U32S];  	unsigned i, tocopy; diff --git a/kernel/exec_domain.c b/kernel/exec_domain.c index 0511716e9424..667c841c2952 100644 --- a/kernel/exec_domain.c +++ b/kernel/exec_domain.c @@ -209,8 +209,7 @@ static int __init proc_execdomains_init(void)  module_init(proc_execdomains_init);  #endif -asmlinkage long -sys_personality(u_long personality) +SYSCALL_DEFINE1(personality, u_long, personality)  {  	u_long old = current->personality; diff --git a/kernel/exit.c b/kernel/exit.c index c7740fa3252c..f80dec3f1875 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -1141,7 +1141,7 @@ NORET_TYPE void complete_and_exit(struct completion *comp, long code)  EXPORT_SYMBOL(complete_and_exit); -asmlinkage long sys_exit(int error_code) +SYSCALL_DEFINE1(exit, int, error_code)  {  	do_exit((error_code&0xff)<<8);  } @@ -1182,9 +1182,11 @@ do_group_exit(int exit_code)   * wait4()-ing process will get the correct exit code - even if this   * thread is not the thread group leader.   */ -asmlinkage void sys_exit_group(int error_code) +SYSCALL_DEFINE1(exit_group, int, error_code)  {  	do_group_exit((error_code & 0xff) << 8); +	/* NOTREACHED */ +	return 0;  }  static struct pid *task_pid_type(struct task_struct *task, enum pid_type type) @@ -1752,9 +1754,8 @@ end:  	return retval;  } -asmlinkage long sys_waitid(int which, pid_t upid, -			   struct siginfo __user *infop, int options, -			   struct rusage __user *ru) +SYSCALL_DEFINE5(waitid, int, which, pid_t, upid, struct siginfo __user *, +		infop, int, options, struct rusage __user *, ru)  {  	struct pid *pid = NULL;  	enum pid_type type; @@ -1793,8 +1794,8 @@ asmlinkage long sys_waitid(int which, pid_t upid,  	return ret;  } -asmlinkage long sys_wait4(pid_t upid, int __user *stat_addr, -			  int options, struct rusage __user *ru) +SYSCALL_DEFINE4(wait4, pid_t, upid, int __user *, stat_addr, +		int, options, struct rusage __user *, ru)  {  	struct pid *pid = NULL;  	enum pid_type type; @@ -1831,7 +1832,7 @@ asmlinkage long sys_wait4(pid_t upid, int __user *stat_addr,   * sys_waitpid() remains for compatibility. waitpid() should be   * implemented by calling sys_wait4() from libc.a.   */ -asmlinkage long sys_waitpid(pid_t pid, int __user *stat_addr, int options) +SYSCALL_DEFINE3(waitpid, pid_t, pid, int __user *, stat_addr, int, options)  {  	return sys_wait4(pid, stat_addr, options, NULL);  } diff --git a/kernel/fork.c b/kernel/fork.c index 1d68f1255dd8..bf0cef8bbdf2 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -901,7 +901,7 @@ static void copy_flags(unsigned long clone_flags, struct task_struct *p)  	clear_freeze_flag(p);  } -asmlinkage long sys_set_tid_address(int __user *tidptr) +SYSCALL_DEFINE1(set_tid_address, int __user *, tidptr)  {  	current->clear_child_tid = tidptr; @@ -1603,7 +1603,7 @@ static int unshare_fd(unsigned long unshare_flags, struct files_struct **new_fdp   * constructed. Here we are modifying the current, active,   * task_struct.   */ -asmlinkage long sys_unshare(unsigned long unshare_flags) +SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)  {  	int err = 0;  	struct fs_struct *fs, *new_fs = NULL; diff --git a/kernel/futex.c b/kernel/futex.c index 002aa189eb09..f89d373a9c6d 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -1733,9 +1733,8 @@ pi_faulted:   * @head: pointer to the list-head   * @len: length of the list-head, as userspace expects   */ -asmlinkage long -sys_set_robust_list(struct robust_list_head __user *head, -		    size_t len) +SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head, +		size_t, len)  {  	if (!futex_cmpxchg_enabled)  		return -ENOSYS; @@ -1756,9 +1755,9 @@ sys_set_robust_list(struct robust_list_head __user *head,   * @head_ptr: pointer to a list-head pointer, the kernel fills it in   * @len_ptr: pointer to a length field, the kernel fills in the header size   */ -asmlinkage long -sys_get_robust_list(int pid, struct robust_list_head __user * __user *head_ptr, -		    size_t __user *len_ptr) +SYSCALL_DEFINE3(get_robust_list, int, pid, +		struct robust_list_head __user * __user *, head_ptr, +		size_t __user *, len_ptr)  {  	struct robust_list_head __user *head;  	unsigned long ret; @@ -1978,9 +1977,9 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,  } -asmlinkage long sys_futex(u32 __user *uaddr, int op, u32 val, -			  struct timespec __user *utime, u32 __user *uaddr2, -			  u32 val3) +SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val, +		struct timespec __user *, utime, u32 __user *, uaddr2, +		u32, val3)  {  	struct timespec ts;  	ktime_t t, *tp = NULL; diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 1455b7651b6b..2dc30c59c5fd 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -1467,8 +1467,8 @@ out:  	return ret;  } -asmlinkage long -sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp) +SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp, +		struct timespec __user *, rmtp)  {  	struct timespec tu; diff --git a/kernel/itimer.c b/kernel/itimer.c index db7c358b9a02..6a5fe93dd8bd 100644 --- a/kernel/itimer.c +++ b/kernel/itimer.c @@ -100,7 +100,7 @@ int do_getitimer(int which, struct itimerval *value)  	return 0;  } -asmlinkage long sys_getitimer(int which, struct itimerval __user *value) +SYSCALL_DEFINE2(getitimer, int, which, struct itimerval __user *, value)  {  	int error = -EFAULT;  	struct itimerval get_buffer; @@ -260,9 +260,8 @@ unsigned int alarm_setitimer(unsigned int seconds)  	return it_old.it_value.tv_sec;  } -asmlinkage long sys_setitimer(int which, -			      struct itimerval __user *value, -			      struct itimerval __user *ovalue) +SYSCALL_DEFINE3(setitimer, int, which, struct itimerval __user *, value, +		struct itimerval __user *, ovalue)  {  	struct itimerval set_buffer, get_buffer;  	int error; diff --git a/kernel/kexec.c b/kernel/kexec.c index 3fb855ad6aa0..8a6d7b08864e 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -934,9 +934,8 @@ struct kimage *kexec_crash_image;  static DEFINE_MUTEX(kexec_mutex); -asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, -				struct kexec_segment __user *segments, -				unsigned long flags) +SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments, +		struct kexec_segment __user *, segments, unsigned long, flags)  {  	struct kimage **dest_image, *image;  	int result; diff --git a/kernel/module.c b/kernel/module.c index c9332c90d5a0..e8b51d41dd72 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -743,8 +743,8 @@ static void wait_for_zero_refcount(struct module *mod)  	mutex_lock(&module_mutex);  } -asmlinkage long -sys_delete_module(const char __user *name_user, unsigned int flags) +SYSCALL_DEFINE2(delete_module, const char __user *, name_user, +		unsigned int, flags)  {  	struct module *mod;  	char name[MODULE_NAME_LEN]; @@ -2296,10 +2296,8 @@ static noinline struct module *load_module(void __user *umod,  }  /* This is where the real work happens */ -asmlinkage long -sys_init_module(void __user *umod, -		unsigned long len, -		const char __user *uargs) +SYSCALL_DEFINE3(init_module, void __user *, umod, +		unsigned long, len, const char __user *, uargs)  {  	struct module *mod;  	int ret = 0; diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index 887c63787de6..052ec4d195c7 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c @@ -477,10 +477,9 @@ static void release_posix_timer(struct k_itimer *tmr, int it_id_set)  /* Create a POSIX.1b interval timer. */ -asmlinkage long -sys_timer_create(const clockid_t which_clock, -		 struct sigevent __user *timer_event_spec, -		 timer_t __user * created_timer_id) +SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock, +		struct sigevent __user *, timer_event_spec, +		timer_t __user *, created_timer_id)  {  	struct k_itimer *new_timer;  	int error, new_timer_id; @@ -661,8 +660,8 @@ common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting)  }  /* Get the time remaining on a POSIX.1b interval timer. */ -asmlinkage long -sys_timer_gettime(timer_t timer_id, struct itimerspec __user *setting) +SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id, +		struct itimerspec __user *, setting)  {  	struct k_itimer *timr;  	struct itimerspec cur_setting; @@ -691,8 +690,7 @@ sys_timer_gettime(timer_t timer_id, struct itimerspec __user *setting)   * the call back to do_schedule_next_timer().  So all we need to do is   * to pick up the frozen overrun.   */ -asmlinkage long -sys_timer_getoverrun(timer_t timer_id) +SYSCALL_DEFINE1(timer_getoverrun, timer_t, timer_id)  {  	struct k_itimer *timr;  	int overrun; @@ -760,10 +758,9 @@ common_timer_set(struct k_itimer *timr, int flags,  }  /* Set a POSIX.1b interval timer */ -asmlinkage long -sys_timer_settime(timer_t timer_id, int flags, -		  const struct itimerspec __user *new_setting, -		  struct itimerspec __user *old_setting) +SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags, +		const struct itimerspec __user *, new_setting, +		struct itimerspec __user *, old_setting)  {  	struct k_itimer *timr;  	struct itimerspec new_spec, old_spec; @@ -816,8 +813,7 @@ static inline int timer_delete_hook(struct k_itimer *timer)  }  /* Delete a POSIX.1b interval timer. */ -asmlinkage long -sys_timer_delete(timer_t timer_id) +SYSCALL_DEFINE1(timer_delete, timer_t, timer_id)  {  	struct k_itimer *timer;  	unsigned long flags; @@ -903,8 +899,8 @@ int do_posix_clock_nonanosleep(const clockid_t clock, int flags,  }  EXPORT_SYMBOL_GPL(do_posix_clock_nonanosleep); -asmlinkage long sys_clock_settime(const clockid_t which_clock, -				  const struct timespec __user *tp) +SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock, +		const struct timespec __user *, tp)  {  	struct timespec new_tp; @@ -916,8 +912,8 @@ asmlinkage long sys_clock_settime(const clockid_t which_clock,  	return CLOCK_DISPATCH(which_clock, clock_set, (which_clock, &new_tp));  } -asmlinkage long -sys_clock_gettime(const clockid_t which_clock, struct timespec __user *tp) +SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock, +		struct timespec __user *,tp)  {  	struct timespec kernel_tp;  	int error; @@ -933,8 +929,8 @@ sys_clock_gettime(const clockid_t which_clock, struct timespec __user *tp)  } -asmlinkage long -sys_clock_getres(const clockid_t which_clock, struct timespec __user *tp) +SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock, +		struct timespec __user *, tp)  {  	struct timespec rtn_tp;  	int error; @@ -963,10 +959,9 @@ static int common_nsleep(const clockid_t which_clock, int flags,  				 which_clock);  } -asmlinkage long -sys_clock_nanosleep(const clockid_t which_clock, int flags, -		    const struct timespec __user *rqtp, -		    struct timespec __user *rmtp) +SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags, +		const struct timespec __user *, rqtp, +		struct timespec __user *, rmtp)  {  	struct timespec t; diff --git a/kernel/printk.c b/kernel/printk.c index 7015733793e8..69188f226a93 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -382,7 +382,7 @@ out:  	return error;  } -asmlinkage long sys_syslog(int type, char __user *buf, int len) +SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len)  {  	return do_syslog(type, buf, len);  } @@ -742,11 +742,6 @@ EXPORT_SYMBOL(vprintk);  #else -asmlinkage long sys_syslog(int type, char __user *buf, int len) -{ -	return -ENOSYS; -} -  static void call_console_drivers(unsigned start, unsigned end)  {  } diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 29dc700e198c..c9cf48b21f05 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -574,7 +574,7 @@ struct task_struct *ptrace_get_task_struct(pid_t pid)  #define arch_ptrace_attach(child)	do { } while (0)  #endif -asmlinkage long sys_ptrace(long request, long pid, long addr, long data) +SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)  {  	struct task_struct *child;  	long ret; diff --git a/kernel/sched.c b/kernel/sched.c index 8be2c13b50d0..eb1931eef587 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -5126,7 +5126,7 @@ int can_nice(const struct task_struct *p, const int nice)   * sys_setpriority is a more generic, but much slower function that   * does similar things.   */ -asmlinkage long sys_nice(int increment) +SYSCALL_DEFINE1(nice, int, increment)  {  	long nice, retval; @@ -5433,8 +5433,8 @@ do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)   * @policy: new policy.   * @param: structure containing the new RT priority.   */ -asmlinkage long -sys_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param) +SYSCALL_DEFINE3(sched_setscheduler, pid_t, pid, int, policy, +		struct sched_param __user *, param)  {  	/* negative values for policy are not valid */  	if (policy < 0) @@ -5448,7 +5448,7 @@ sys_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)   * @pid: the pid in question.   * @param: structure containing the new RT priority.   */ -asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param) +SYSCALL_DEFINE2(sched_setparam, pid_t, pid, struct sched_param __user *, param)  {  	return do_sched_setscheduler(pid, -1, param);  } @@ -5457,7 +5457,7 @@ asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param)   * sys_sched_getscheduler - get the policy (scheduling class) of a thread   * @pid: the pid in question.   */ -asmlinkage long sys_sched_getscheduler(pid_t pid) +SYSCALL_DEFINE1(sched_getscheduler, pid_t, pid)  {  	struct task_struct *p;  	int retval; @@ -5482,7 +5482,7 @@ asmlinkage long sys_sched_getscheduler(pid_t pid)   * @pid: the pid in question.   * @param: structure containing the RT priority.   */ -asmlinkage long sys_sched_getparam(pid_t pid, struct sched_param __user *param) +SYSCALL_DEFINE2(sched_getparam, pid_t, pid, struct sched_param __user *, param)  {  	struct sched_param lp;  	struct task_struct *p; @@ -5600,8 +5600,8 @@ static int get_user_cpu_mask(unsigned long __user *user_mask_ptr, unsigned len,   * @len: length in bytes of the bitmask pointed to by user_mask_ptr   * @user_mask_ptr: user-space pointer to the new cpu mask   */ -asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len, -				      unsigned long __user *user_mask_ptr) +SYSCALL_DEFINE3(sched_setaffinity, pid_t, pid, unsigned int, len, +		unsigned long __user *, user_mask_ptr)  {  	cpumask_var_t new_mask;  	int retval; @@ -5648,8 +5648,8 @@ out_unlock:   * @len: length in bytes of the bitmask pointed to by user_mask_ptr   * @user_mask_ptr: user-space pointer to hold the current cpu mask   */ -asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, -				      unsigned long __user *user_mask_ptr) +SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len, +		unsigned long __user *, user_mask_ptr)  {  	int ret;  	cpumask_var_t mask; @@ -5678,7 +5678,7 @@ asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len,   * This function yields the current CPU to other tasks. If there are no   * other threads running on this CPU then this function will return.   */ -asmlinkage long sys_sched_yield(void) +SYSCALL_DEFINE0(sched_yield)  {  	struct rq *rq = this_rq_lock(); @@ -5819,7 +5819,7 @@ long __sched io_schedule_timeout(long timeout)   * this syscall returns the maximum rt_priority that can be used   * by a given scheduling class.   */ -asmlinkage long sys_sched_get_priority_max(int policy) +SYSCALL_DEFINE1(sched_get_priority_max, int, policy)  {  	int ret = -EINVAL; @@ -5844,7 +5844,7 @@ asmlinkage long sys_sched_get_priority_max(int policy)   * this syscall returns the minimum rt_priority that can be used   * by a given scheduling class.   */ -asmlinkage long sys_sched_get_priority_min(int policy) +SYSCALL_DEFINE1(sched_get_priority_min, int, policy)  {  	int ret = -EINVAL; @@ -5869,8 +5869,8 @@ asmlinkage long sys_sched_get_priority_min(int policy)   * this syscall writes the default timeslice value of a given process   * into the user-space timespec buffer. A value of '0' means infinity.   */ -asmlinkage -long sys_sched_rr_get_interval(pid_t pid, struct timespec __user *interval) +SYSCALL_DEFINE2(sched_rr_get_interval, pid_t, pid, +		struct timespec __user *, interval)  {  	struct task_struct *p;  	unsigned int time_slice; diff --git a/kernel/signal.c b/kernel/signal.c index 3152ac3b62e2..e73759783dc8 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -1961,7 +1961,7 @@ EXPORT_SYMBOL(unblock_all_signals);   * System call entry points.   */ -asmlinkage long sys_restart_syscall(void) +SYSCALL_DEFINE0(restart_syscall)  {  	struct restart_block *restart = ¤t_thread_info()->restart_block;  	return restart->fn(restart); @@ -2014,8 +2014,8 @@ int sigprocmask(int how, sigset_t *set, sigset_t *oldset)  	return error;  } -asmlinkage long -sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset, size_t sigsetsize) +SYSCALL_DEFINE4(rt_sigprocmask, int, how, sigset_t __user *, set, +		sigset_t __user *, oset, size_t, sigsetsize)  {  	int error = -EINVAL;  	sigset_t old_set, new_set; @@ -2074,8 +2074,7 @@ out:  	return error;  }	 -asmlinkage long -sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize) +SYSCALL_DEFINE2(rt_sigpending, sigset_t __user *, set, size_t, sigsetsize)  {  	return do_sigpending(set, sigsetsize);  } @@ -2146,11 +2145,9 @@ int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from)  #endif -asmlinkage long -sys_rt_sigtimedwait(const sigset_t __user *uthese, -		    siginfo_t __user *uinfo, -		    const struct timespec __user *uts, -		    size_t sigsetsize) +SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese, +		siginfo_t __user *, uinfo, const struct timespec __user *, uts, +		size_t, sigsetsize)  {  	int ret, sig;  	sigset_t these; @@ -2223,8 +2220,7 @@ sys_rt_sigtimedwait(const sigset_t __user *uthese,  	return ret;  } -asmlinkage long -sys_kill(pid_t pid, int sig) +SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)  {  	struct siginfo info; @@ -2283,7 +2279,7 @@ static int do_tkill(pid_t tgid, pid_t pid, int sig)   *  exists but it's not belonging to the target process anymore. This   *  method solves the problem of threads exiting and PIDs getting reused.   */ -asmlinkage long sys_tgkill(pid_t tgid, pid_t pid, int sig) +SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig)  {  	/* This is only valid for single tasks */  	if (pid <= 0 || tgid <= 0) @@ -2295,8 +2291,7 @@ asmlinkage long sys_tgkill(pid_t tgid, pid_t pid, int sig)  /*   *  Send a signal to only one task, even if it's a CLONE_THREAD task.   */ -asmlinkage long -sys_tkill(pid_t pid, int sig) +SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig)  {  	/* This is only valid for single tasks */  	if (pid <= 0) @@ -2305,8 +2300,8 @@ sys_tkill(pid_t pid, int sig)  	return do_tkill(0, pid, sig);  } -asmlinkage long -sys_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t __user *uinfo) +SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig, +		siginfo_t __user *, uinfo)  {  	siginfo_t info; @@ -2434,8 +2429,7 @@ out:  #ifdef __ARCH_WANT_SYS_SIGPENDING -asmlinkage long -sys_sigpending(old_sigset_t __user *set) +SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, set)  {  	return do_sigpending(set, sizeof(*set));  } @@ -2446,8 +2440,8 @@ sys_sigpending(old_sigset_t __user *set)  /* Some platforms have their own version with special arguments others     support only sys_rt_sigprocmask.  */ -asmlinkage long -sys_sigprocmask(int how, old_sigset_t __user *set, old_sigset_t __user *oset) +SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, set, +		old_sigset_t __user *, oset)  {  	int error;  	old_sigset_t old_set, new_set; @@ -2497,11 +2491,10 @@ out:  #endif /* __ARCH_WANT_SYS_SIGPROCMASK */  #ifdef __ARCH_WANT_SYS_RT_SIGACTION -asmlinkage long -sys_rt_sigaction(int sig, -		 const struct sigaction __user *act, -		 struct sigaction __user *oact, -		 size_t sigsetsize) +SYSCALL_DEFINE4(rt_sigaction, int, sig, +		const struct sigaction __user *, act, +		struct sigaction __user *, oact, +		size_t, sigsetsize)  {  	struct k_sigaction new_sa, old_sa;  	int ret = -EINVAL; @@ -2531,15 +2524,13 @@ out:  /*   * For backwards compatibility.  Functionality superseded by sigprocmask.   */ -asmlinkage long -sys_sgetmask(void) +SYSCALL_DEFINE0(sgetmask)  {  	/* SMP safe */  	return current->blocked.sig[0];  } -asmlinkage long -sys_ssetmask(int newmask) +SYSCALL_DEFINE1(ssetmask, int, newmask)  {  	int old; @@ -2559,8 +2550,7 @@ sys_ssetmask(int newmask)  /*   * For backwards compatibility.  Functionality superseded by sigaction.   */ -asmlinkage unsigned long -sys_signal(int sig, __sighandler_t handler) +SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)  {  	struct k_sigaction new_sa, old_sa;  	int ret; @@ -2577,8 +2567,7 @@ sys_signal(int sig, __sighandler_t handler)  #ifdef __ARCH_WANT_SYS_PAUSE -asmlinkage long -sys_pause(void) +SYSCALL_DEFINE0(pause)  {  	current->state = TASK_INTERRUPTIBLE;  	schedule(); @@ -2588,7 +2577,7 @@ sys_pause(void)  #endif  #ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND -asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize) +SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize)  {  	sigset_t newset; diff --git a/kernel/sys.c b/kernel/sys.c index 763c3c17ded3..e7dc0e10a485 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -143,7 +143,7 @@ out:  	return error;  } -asmlinkage long sys_setpriority(int which, int who, int niceval) +SYSCALL_DEFINE3(setpriority, int, which, int, who, int, niceval)  {  	struct task_struct *g, *p;  	struct user_struct *user; @@ -208,7 +208,7 @@ out:   * has been offset by 20 (ie it returns 40..1 instead of -20..19)   * to stay compatible.   */ -asmlinkage long sys_getpriority(int which, int who) +SYSCALL_DEFINE2(getpriority, int, which, int, who)  {  	struct task_struct *g, *p;  	struct user_struct *user; @@ -355,7 +355,8 @@ EXPORT_SYMBOL_GPL(kernel_power_off);   *   * reboot doesn't sync: do that yourself before calling this.   */ -asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user * arg) +SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, +		void __user *, arg)  {  	char buffer[256]; @@ -478,7 +479,7 @@ void ctrl_alt_del(void)   * SMP: There are not races, the GIDs are checked only by filesystem   *      operations (as far as semantic preservation is concerned).   */ -asmlinkage long sys_setregid(gid_t rgid, gid_t egid) +SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid)  {  	const struct cred *old;  	struct cred *new; @@ -529,7 +530,7 @@ error:   *   * SMP: Same implicit races as above.   */ -asmlinkage long sys_setgid(gid_t gid) +SYSCALL_DEFINE1(setgid, gid_t, gid)  {  	const struct cred *old;  	struct cred *new; @@ -597,7 +598,7 @@ static int set_user(struct cred *new)   * 100% compatible with BSD.  A program which uses just setuid() will be   * 100% compatible with POSIX with saved IDs.    */ -asmlinkage long sys_setreuid(uid_t ruid, uid_t euid) +SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid)  {  	const struct cred *old;  	struct cred *new; @@ -661,7 +662,7 @@ error:   * will allow a root program to temporarily drop privileges and be able to   * regain them by swapping the real and effective uid.     */ -asmlinkage long sys_setuid(uid_t uid) +SYSCALL_DEFINE1(setuid, uid_t, uid)  {  	const struct cred *old;  	struct cred *new; @@ -705,7 +706,7 @@ error:   * This function implements a generic ability to update ruid, euid,   * and suid.  This allows you to implement the 4.4 compatible seteuid().   */ -asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid) +SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)  {  	const struct cred *old;  	struct cred *new; @@ -756,7 +757,7 @@ error:  	return retval;  } -asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __user *suid) +SYSCALL_DEFINE3(getresuid, uid_t __user *, ruid, uid_t __user *, euid, uid_t __user *, suid)  {  	const struct cred *cred = current_cred();  	int retval; @@ -771,7 +772,7 @@ asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __us  /*   * Same as above, but for rgid, egid, sgid.   */ -asmlinkage long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid) +SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)  {  	const struct cred *old;  	struct cred *new; @@ -814,7 +815,7 @@ error:  	return retval;  } -asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __user *sgid) +SYSCALL_DEFINE3(getresgid, gid_t __user *, rgid, gid_t __user *, egid, gid_t __user *, sgid)  {  	const struct cred *cred = current_cred();  	int retval; @@ -833,7 +834,7 @@ asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __us   * whatever uid it wants to). It normally shadows "euid", except when   * explicitly set by setfsuid() or for access..   */ -asmlinkage long sys_setfsuid(uid_t uid) +SYSCALL_DEFINE1(setfsuid, uid_t, uid)  {  	const struct cred *old;  	struct cred *new; @@ -870,7 +871,7 @@ change_okay:  /*   * Samma på svenska..   */ -asmlinkage long sys_setfsgid(gid_t gid) +SYSCALL_DEFINE1(setfsgid, gid_t, gid)  {  	const struct cred *old;  	struct cred *new; @@ -919,7 +920,7 @@ void do_sys_times(struct tms *tms)  	tms->tms_cstime = cputime_to_clock_t(cstime);  } -asmlinkage long sys_times(struct tms __user * tbuf) +SYSCALL_DEFINE1(times, struct tms __user *, tbuf)  {  	if (tbuf) {  		struct tms tmp; @@ -944,7 +945,7 @@ asmlinkage long sys_times(struct tms __user * tbuf)   * Auch. Had to add the 'did_exec' flag to conform completely to POSIX.   * LBT 04.03.94   */ -asmlinkage long sys_setpgid(pid_t pid, pid_t pgid) +SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid)  {  	struct task_struct *p;  	struct task_struct *group_leader = current->group_leader; @@ -1015,7 +1016,7 @@ out:  	return err;  } -asmlinkage long sys_getpgid(pid_t pid) +SYSCALL_DEFINE1(getpgid, pid_t, pid)  {  	struct task_struct *p;  	struct pid *grp; @@ -1045,14 +1046,14 @@ out:  #ifdef __ARCH_WANT_SYS_GETPGRP -asmlinkage long sys_getpgrp(void) +SYSCALL_DEFINE0(getpgrp)  {  	return sys_getpgid(0);  }  #endif -asmlinkage long sys_getsid(pid_t pid) +SYSCALL_DEFINE1(getsid, pid_t, pid)  {  	struct task_struct *p;  	struct pid *sid; @@ -1080,7 +1081,7 @@ out:  	return retval;  } -asmlinkage long sys_setsid(void) +SYSCALL_DEFINE0(setsid)  {  	struct task_struct *group_leader = current->group_leader;  	struct pid *sid = task_pid(group_leader); @@ -1311,7 +1312,7 @@ int set_current_groups(struct group_info *group_info)  EXPORT_SYMBOL(set_current_groups); -asmlinkage long sys_getgroups(int gidsetsize, gid_t __user *grouplist) +SYSCALL_DEFINE2(getgroups, int, gidsetsize, gid_t __user *, grouplist)  {  	const struct cred *cred = current_cred();  	int i; @@ -1340,7 +1341,7 @@ out:   *	without another task interfering.   */ -asmlinkage long sys_setgroups(int gidsetsize, gid_t __user *grouplist) +SYSCALL_DEFINE2(setgroups, int, gidsetsize, gid_t __user *, grouplist)  {  	struct group_info *group_info;  	int retval; @@ -1394,7 +1395,7 @@ EXPORT_SYMBOL(in_egroup_p);  DECLARE_RWSEM(uts_sem); -asmlinkage long sys_newuname(struct new_utsname __user * name) +SYSCALL_DEFINE1(newuname, struct new_utsname __user *, name)  {  	int errno = 0; @@ -1405,7 +1406,7 @@ asmlinkage long sys_newuname(struct new_utsname __user * name)  	return errno;  } -asmlinkage long sys_sethostname(char __user *name, int len) +SYSCALL_DEFINE2(sethostname, char __user *, name, int, len)  {  	int errno;  	char tmp[__NEW_UTS_LEN]; @@ -1429,7 +1430,7 @@ asmlinkage long sys_sethostname(char __user *name, int len)  #ifdef __ARCH_WANT_SYS_GETHOSTNAME -asmlinkage long sys_gethostname(char __user *name, int len) +SYSCALL_DEFINE2(gethostname, char __user *, name, int, len)  {  	int i, errno;  	struct new_utsname *u; @@ -1454,7 +1455,7 @@ asmlinkage long sys_gethostname(char __user *name, int len)   * Only setdomainname; getdomainname can be implemented by calling   * uname()   */ -asmlinkage long sys_setdomainname(char __user *name, int len) +SYSCALL_DEFINE2(setdomainname, char __user *, name, int, len)  {  	int errno;  	char tmp[__NEW_UTS_LEN]; @@ -1477,7 +1478,7 @@ asmlinkage long sys_setdomainname(char __user *name, int len)  	return errno;  } -asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit __user *rlim) +SYSCALL_DEFINE2(getrlimit, unsigned int, resource, struct rlimit __user *, rlim)  {  	if (resource >= RLIM_NLIMITS)  		return -EINVAL; @@ -1496,7 +1497,8 @@ asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit __user *rlim)   *	Back compatibility for getrlimit. Needed for some apps.   */ -asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit __user *rlim) +SYSCALL_DEFINE2(old_getrlimit, unsigned int, resource, +		struct rlimit __user *, rlim)  {  	struct rlimit x;  	if (resource >= RLIM_NLIMITS) @@ -1514,7 +1516,7 @@ asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit __user *r  #endif -asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit __user *rlim) +SYSCALL_DEFINE2(setrlimit, unsigned int, resource, struct rlimit __user *, rlim)  {  	struct rlimit new_rlim, *old_rlim;  	int retval; @@ -1687,7 +1689,7 @@ int getrusage(struct task_struct *p, int who, struct rusage __user *ru)  	return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;  } -asmlinkage long sys_getrusage(int who, struct rusage __user *ru) +SYSCALL_DEFINE2(getrusage, int, who, struct rusage __user *, ru)  {  	if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN &&  	    who != RUSAGE_THREAD) @@ -1695,14 +1697,14 @@ asmlinkage long sys_getrusage(int who, struct rusage __user *ru)  	return getrusage(current, who, ru);  } -asmlinkage long sys_umask(int mask) +SYSCALL_DEFINE1(umask, int, mask)  {  	mask = xchg(¤t->fs->umask, mask & S_IRWXUGO);  	return mask;  } -asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3, -			  unsigned long arg4, unsigned long arg5) +SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, +		unsigned long, arg4, unsigned long, arg5)  {  	struct task_struct *me = current;  	unsigned char comm[sizeof(me->comm)]; @@ -1815,8 +1817,8 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,  	return error;  } -asmlinkage long sys_getcpu(unsigned __user *cpup, unsigned __user *nodep, -			   struct getcpu_cache __user *unused) +SYSCALL_DEFINE3(getcpu, unsigned __user *, cpup, unsigned __user *, nodep, +		struct getcpu_cache __user *, unused)  {  	int err = 0;  	int cpu = raw_smp_processor_id(); diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c index e14a23281707..27dad2967387 100644 --- a/kernel/sys_ni.c +++ b/kernel/sys_ni.c @@ -131,6 +131,7 @@ cond_syscall(sys_io_destroy);  cond_syscall(sys_io_submit);  cond_syscall(sys_io_cancel);  cond_syscall(sys_io_getevents); +cond_syscall(sys_syslog);  /* arch-specific weak syscall entries */  cond_syscall(sys_pciconfig_read); diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 89d74436318c..3e38b74b6124 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -1688,7 +1688,7 @@ int do_sysctl(int __user *name, int nlen, void __user *oldval, size_t __user *ol  	return error;  } -asmlinkage long sys_sysctl(struct __sysctl_args __user *args) +SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args)  {  	struct __sysctl_args tmp;  	int error; @@ -2989,7 +2989,7 @@ int sysctl_ms_jiffies(struct ctl_table *table,  #else /* CONFIG_SYSCTL_SYSCALL */ -asmlinkage long sys_sysctl(struct __sysctl_args __user *args) +SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args)  {  	struct __sysctl_args tmp;  	int error; diff --git a/kernel/time.c b/kernel/time.c index 4886e3ce83a4..29511943871a 100644 --- a/kernel/time.c +++ b/kernel/time.c @@ -60,7 +60,7 @@ EXPORT_SYMBOL(sys_tz);   * why not move it into the appropriate arch directory (for those   * architectures that need it).   */ -asmlinkage long sys_time(time_t __user * tloc) +SYSCALL_DEFINE1(time, time_t __user *, tloc)  {  	time_t i = get_seconds(); @@ -79,7 +79,7 @@ asmlinkage long sys_time(time_t __user * tloc)   * architectures that need it).   */ -asmlinkage long sys_stime(time_t __user *tptr) +SYSCALL_DEFINE1(stime, time_t __user *, tptr)  {  	struct timespec tv;  	int err; @@ -99,8 +99,8 @@ asmlinkage long sys_stime(time_t __user *tptr)  #endif /* __ARCH_WANT_SYS_TIME */ -asmlinkage long sys_gettimeofday(struct timeval __user *tv, -				 struct timezone __user *tz) +SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv, +		struct timezone __user *, tz)  {  	if (likely(tv != NULL)) {  		struct timeval ktv; @@ -184,8 +184,8 @@ int do_sys_settimeofday(struct timespec *tv, struct timezone *tz)  	return 0;  } -asmlinkage long sys_settimeofday(struct timeval __user *tv, -				struct timezone __user *tz) +SYSCALL_DEFINE2(settimeofday, struct timeval __user *, tv, +		struct timezone __user *, tz)  {  	struct timeval user_tv;  	struct timespec	new_ts; @@ -205,7 +205,7 @@ asmlinkage long sys_settimeofday(struct timeval __user *tv,  	return do_sys_settimeofday(tv ? &new_ts : NULL, tz ? &new_tz : NULL);  } -asmlinkage long sys_adjtimex(struct timex __user *txc_p) +SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p)  {  	struct timex txc;		/* Local copy of parameter */  	int ret; diff --git a/kernel/timer.c b/kernel/timer.c index dee3f641a7a7..13dd64fe143d 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -1129,7 +1129,7 @@ void do_timer(unsigned long ticks)   * For backwards compatibility?  This can be done in libc so Alpha   * and all newer ports shouldn't need it.   */ -asmlinkage unsigned long sys_alarm(unsigned int seconds) +SYSCALL_DEFINE1(alarm, unsigned int, seconds)  {  	return alarm_setitimer(seconds);  } @@ -1152,7 +1152,7 @@ asmlinkage unsigned long sys_alarm(unsigned int seconds)   *   * This is SMP safe as current->tgid does not change.   */ -asmlinkage long sys_getpid(void) +SYSCALL_DEFINE0(getpid)  {  	return task_tgid_vnr(current);  } @@ -1163,7 +1163,7 @@ asmlinkage long sys_getpid(void)   * value of ->real_parent under rcu_read_lock(), see   * release_task()->call_rcu(delayed_put_task_struct).   */ -asmlinkage long sys_getppid(void) +SYSCALL_DEFINE0(getppid)  {  	int pid; @@ -1174,25 +1174,25 @@ asmlinkage long sys_getppid(void)  	return pid;  } -asmlinkage long sys_getuid(void) +SYSCALL_DEFINE0(getuid)  {  	/* Only we change this so SMP safe */  	return current_uid();  } -asmlinkage long sys_geteuid(void) +SYSCALL_DEFINE0(geteuid)  {  	/* Only we change this so SMP safe */  	return current_euid();  } -asmlinkage long sys_getgid(void) +SYSCALL_DEFINE0(getgid)  {  	/* Only we change this so SMP safe */  	return current_gid();  } -asmlinkage long sys_getegid(void) +SYSCALL_DEFINE0(getegid)  {  	/* Only we change this so SMP safe */  	return  current_egid(); @@ -1308,7 +1308,7 @@ signed long __sched schedule_timeout_uninterruptible(signed long timeout)  EXPORT_SYMBOL(schedule_timeout_uninterruptible);  /* Thread ID - the internal kernel "pid" */ -asmlinkage long sys_gettid(void) +SYSCALL_DEFINE0(gettid)  {  	return task_pid_vnr(current);  } @@ -1400,7 +1400,7 @@ out:  	return 0;  } -asmlinkage long sys_sysinfo(struct sysinfo __user *info) +SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info)  {  	struct sysinfo val; diff --git a/kernel/uid16.c b/kernel/uid16.c index 2460c3199b5a..0314501688b9 100644 --- a/kernel/uid16.c +++ b/kernel/uid16.c @@ -17,7 +17,7 @@  #include <asm/uaccess.h> -asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gid_t group) +SYSCALL_DEFINE3(chown16, const char __user *, filename, old_uid_t, user, old_gid_t, group)  {  	long ret = sys_chown(filename, low2highuid(user), low2highgid(group));  	/* avoid REGPARM breakage on x86: */ @@ -25,7 +25,7 @@ asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gi  	return ret;  } -asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_gid_t group) +SYSCALL_DEFINE3(lchown16, const char __user *, filename, old_uid_t, user, old_gid_t, group)  {  	long ret = sys_lchown(filename, low2highuid(user), low2highgid(group));  	/* avoid REGPARM breakage on x86: */ @@ -33,7 +33,7 @@ asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_g  	return ret;  } -asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group) +SYSCALL_DEFINE3(fchown16, unsigned int, fd, old_uid_t, user, old_gid_t, group)  {  	long ret = sys_fchown(fd, low2highuid(user), low2highgid(group));  	/* avoid REGPARM breakage on x86: */ @@ -41,7 +41,7 @@ asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group)  	return ret;  } -asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid) +SYSCALL_DEFINE2(setregid16, old_gid_t, rgid, old_gid_t, egid)  {  	long ret = sys_setregid(low2highgid(rgid), low2highgid(egid));  	/* avoid REGPARM breakage on x86: */ @@ -49,7 +49,7 @@ asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid)  	return ret;  } -asmlinkage long sys_setgid16(old_gid_t gid) +SYSCALL_DEFINE1(setgid16, old_gid_t, gid)  {  	long ret = sys_setgid(low2highgid(gid));  	/* avoid REGPARM breakage on x86: */ @@ -57,7 +57,7 @@ asmlinkage long sys_setgid16(old_gid_t gid)  	return ret;  } -asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid) +SYSCALL_DEFINE2(setreuid16, old_uid_t, ruid, old_uid_t, euid)  {  	long ret = sys_setreuid(low2highuid(ruid), low2highuid(euid));  	/* avoid REGPARM breakage on x86: */ @@ -65,7 +65,7 @@ asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid)  	return ret;  } -asmlinkage long sys_setuid16(old_uid_t uid) +SYSCALL_DEFINE1(setuid16, old_uid_t, uid)  {  	long ret = sys_setuid(low2highuid(uid));  	/* avoid REGPARM breakage on x86: */ @@ -73,7 +73,7 @@ asmlinkage long sys_setuid16(old_uid_t uid)  	return ret;  } -asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid) +SYSCALL_DEFINE3(setresuid16, old_uid_t, ruid, old_uid_t, euid, old_uid_t, suid)  {  	long ret = sys_setresuid(low2highuid(ruid), low2highuid(euid),  				 low2highuid(suid)); @@ -82,7 +82,7 @@ asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid)  	return ret;  } -asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, old_uid_t __user *suid) +SYSCALL_DEFINE3(getresuid16, old_uid_t __user *, ruid, old_uid_t __user *, euid, old_uid_t __user *, suid)  {  	const struct cred *cred = current_cred();  	int retval; @@ -94,7 +94,7 @@ asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid,  	return retval;  } -asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid) +SYSCALL_DEFINE3(setresgid16, old_gid_t, rgid, old_gid_t, egid, old_gid_t, sgid)  {  	long ret = sys_setresgid(low2highgid(rgid), low2highgid(egid),  				 low2highgid(sgid)); @@ -103,7 +103,8 @@ asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid)  	return ret;  } -asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, old_gid_t __user *sgid) + +SYSCALL_DEFINE3(getresgid16, old_gid_t __user *, rgid, old_gid_t __user *, egid, old_gid_t __user *, sgid)  {  	const struct cred *cred = current_cred();  	int retval; @@ -115,7 +116,7 @@ asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid,  	return retval;  } -asmlinkage long sys_setfsuid16(old_uid_t uid) +SYSCALL_DEFINE1(setfsuid16, old_uid_t, uid)  {  	long ret = sys_setfsuid(low2highuid(uid));  	/* avoid REGPARM breakage on x86: */ @@ -123,7 +124,7 @@ asmlinkage long sys_setfsuid16(old_uid_t uid)  	return ret;  } -asmlinkage long sys_setfsgid16(old_gid_t gid) +SYSCALL_DEFINE1(setfsgid16, old_gid_t, gid)  {  	long ret = sys_setfsgid(low2highgid(gid));  	/* avoid REGPARM breakage on x86: */ @@ -161,7 +162,7 @@ static int groups16_from_user(struct group_info *group_info,  	return 0;  } -asmlinkage long sys_getgroups16(int gidsetsize, old_gid_t __user *grouplist) +SYSCALL_DEFINE2(getgroups16, int, gidsetsize, old_gid_t __user *, grouplist)  {  	const struct cred *cred = current_cred();  	int i; @@ -184,7 +185,7 @@ out:  	return i;  } -asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist) +SYSCALL_DEFINE2(setgroups16, int, gidsetsize, old_gid_t __user *, grouplist)  {  	struct group_info *group_info;  	int retval; @@ -209,22 +210,22 @@ asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist)  	return retval;  } -asmlinkage long sys_getuid16(void) +SYSCALL_DEFINE0(getuid16)  {  	return high2lowuid(current_uid());  } -asmlinkage long sys_geteuid16(void) +SYSCALL_DEFINE0(geteuid16)  {  	return high2lowuid(current_euid());  } -asmlinkage long sys_getgid16(void) +SYSCALL_DEFINE0(getgid16)  {  	return high2lowgid(current_gid());  } -asmlinkage long sys_getegid16(void) +SYSCALL_DEFINE0(getegid16)  {  	return high2lowgid(current_egid());  } diff --git a/mm/fadvise.c b/mm/fadvise.c index a1da969bd980..54a0f8040afa 100644 --- a/mm/fadvise.c +++ b/mm/fadvise.c @@ -24,7 +24,7 @@   * POSIX_FADV_WILLNEED could set PG_Referenced, and POSIX_FADV_NOREUSE could   * deactivate the pages and clear PG_Referenced.   */ -asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) +SYSCALL_DEFINE(fadvise64_64)(int fd, loff_t offset, loff_t len, int advice)  {  	struct file *file = fget(fd);  	struct address_space *mapping; @@ -126,12 +126,26 @@ out:  	fput(file);  	return ret;  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_fadvise64_64(long fd, loff_t offset, loff_t len, long advice) +{ +	return SYSC_fadvise64_64((int) fd, offset, len, (int) advice); +} +SYSCALL_ALIAS(sys_fadvise64_64, SyS_fadvise64_64); +#endif  #ifdef __ARCH_WANT_SYS_FADVISE64 -asmlinkage long sys_fadvise64(int fd, loff_t offset, size_t len, int advice) +SYSCALL_DEFINE(fadvise64)(int fd, loff_t offset, size_t len, int advice)  {  	return sys_fadvise64_64(fd, offset, len, advice);  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_fadvise64(long fd, loff_t offset, long len, long advice) +{ +	return SYSC_fadvise64((int) fd, offset, (size_t)len, (int)advice); +} +SYSCALL_ALIAS(sys_fadvise64, SyS_fadvise64); +#endif  #endif diff --git a/mm/filemap.c b/mm/filemap.c index ceba0bd03662..23acefe51808 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1374,7 +1374,7 @@ do_readahead(struct address_space *mapping, struct file *filp,  	return 0;  } -asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count) +SYSCALL_DEFINE(readahead)(int fd, loff_t offset, size_t count)  {  	ssize_t ret;  	struct file *file; @@ -1393,6 +1393,13 @@ asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count)  	}  	return ret;  } +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS +asmlinkage long SyS_readahead(long fd, loff_t offset, long count) +{ +	return SYSC_readahead((int) fd, offset, (size_t) count); +} +SYSCALL_ALIAS(sys_readahead, SyS_readahead); +#endif  #ifdef CONFIG_MMU  /** diff --git a/mm/fremap.c b/mm/fremap.c index 62d5bbda921a..736ba7f3306a 100644 --- a/mm/fremap.c +++ b/mm/fremap.c @@ -120,8 +120,8 @@ static int populate_range(struct mm_struct *mm, struct vm_area_struct *vma,   * and the vma's default protection is used. Arbitrary protections   * might be implemented in the future.   */ -asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size, -	unsigned long prot, unsigned long pgoff, unsigned long flags) +SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, +		unsigned long, prot, unsigned long, pgoff, unsigned long, flags)  {  	struct mm_struct *mm = current->mm;  	struct address_space *mapping; diff --git a/mm/madvise.c b/mm/madvise.c index f9349c18a1b5..b9ce574827c8 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -281,7 +281,7 @@ madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev,   *  -EBADF  - map exists, but area maps something that isn't a file.   *  -EAGAIN - a kernel resource was temporarily unavailable.   */ -asmlinkage long sys_madvise(unsigned long start, size_t len_in, int behavior) +SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)  {  	unsigned long end, tmp;  	struct vm_area_struct * vma, *prev; diff --git a/mm/mempolicy.c b/mm/mempolicy.c index e412ffa8e52e..3eb4a6fdc043 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -1068,10 +1068,9 @@ static int copy_nodes_to_user(unsigned long __user *mask, unsigned long maxnode,  	return copy_to_user(mask, nodes_addr(*nodes), copy) ? -EFAULT : 0;  } -asmlinkage long sys_mbind(unsigned long start, unsigned long len, -			unsigned long mode, -			unsigned long __user *nmask, unsigned long maxnode, -			unsigned flags) +SYSCALL_DEFINE6(mbind, unsigned long, start, unsigned long, len, +		unsigned long, mode, unsigned long __user *, nmask, +		unsigned long, maxnode, unsigned, flags)  {  	nodemask_t nodes;  	int err; @@ -1091,8 +1090,8 @@ asmlinkage long sys_mbind(unsigned long start, unsigned long len,  }  /* Set the process memory policy */ -asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask, -		unsigned long maxnode) +SYSCALL_DEFINE3(set_mempolicy, int, mode, unsigned long __user *, nmask, +		unsigned long, maxnode)  {  	int err;  	nodemask_t nodes; @@ -1110,9 +1109,9 @@ asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask,  	return do_set_mempolicy(mode, flags, &nodes);  } -asmlinkage long sys_migrate_pages(pid_t pid, unsigned long maxnode, -		const unsigned long __user *old_nodes, -		const unsigned long __user *new_nodes) +SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, +		const unsigned long __user *, old_nodes, +		const unsigned long __user *, new_nodes)  {  	const struct cred *cred = current_cred(), *tcred;  	struct mm_struct *mm; @@ -1185,10 +1184,9 @@ out:  /* Retrieve NUMA policy */ -asmlinkage long sys_get_mempolicy(int __user *policy, -				unsigned long __user *nmask, -				unsigned long maxnode, -				unsigned long addr, unsigned long flags) +SYSCALL_DEFINE5(get_mempolicy, int __user *, policy, +		unsigned long __user *, nmask, unsigned long, maxnode, +		unsigned long, addr, unsigned long, flags)  {  	int err;  	int uninitialized_var(pval); diff --git a/mm/migrate.c b/mm/migrate.c index a30ea5fcf9f1..2bb4e1d63520 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1055,10 +1055,10 @@ out:   * Move a list of pages in the address space of the currently executing   * process.   */ -asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages, -			const void __user * __user *pages, -			const int __user *nodes, -			int __user *status, int flags) +SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, +		const void __user * __user *, pages, +		const int __user *, nodes, +		int __user *, status, int, flags)  {  	const struct cred *cred = current_cred(), *tcred;  	struct task_struct *task; diff --git a/mm/mincore.c b/mm/mincore.c index 5178800bc129..8cb508f84ea4 100644 --- a/mm/mincore.c +++ b/mm/mincore.c @@ -177,8 +177,8 @@ none_mapped:   *		mapped   *  -EAGAIN - A kernel resource was temporarily unavailable.   */ -asmlinkage long sys_mincore(unsigned long start, size_t len, -	unsigned char __user * vec) +SYSCALL_DEFINE3(mincore, unsigned long, start, size_t, len, +		unsigned char __user *, vec)  {  	long retval;  	unsigned long pages; diff --git a/mm/mlock.c b/mm/mlock.c index e125156c664e..2904a347e476 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -530,7 +530,7 @@ static int do_mlock(unsigned long start, size_t len, int on)  	return error;  } -asmlinkage long sys_mlock(unsigned long start, size_t len) +SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len)  {  	unsigned long locked;  	unsigned long lock_limit; @@ -558,7 +558,7 @@ asmlinkage long sys_mlock(unsigned long start, size_t len)  	return error;  } -asmlinkage long sys_munlock(unsigned long start, size_t len) +SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len)  {  	int ret; @@ -595,7 +595,7 @@ out:  	return 0;  } -asmlinkage long sys_mlockall(int flags) +SYSCALL_DEFINE1(mlockall, int, flags)  {  	unsigned long lock_limit;  	int ret = -EINVAL; @@ -623,7 +623,7 @@ out:  	return ret;  } -asmlinkage long sys_munlockall(void) +SYSCALL_DEFINE0(munlockall)  {  	int ret; diff --git a/mm/mmap.c b/mm/mmap.c index 749623196cb9..8d95902e9a38 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -245,7 +245,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)  	return next;  } -asmlinkage unsigned long sys_brk(unsigned long brk) +SYSCALL_DEFINE1(brk, unsigned long, brk)  {  	unsigned long rlim, retval;  	unsigned long newbrk, oldbrk; @@ -1948,7 +1948,7 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)  EXPORT_SYMBOL(do_munmap); -asmlinkage long sys_munmap(unsigned long addr, size_t len) +SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)  {  	int ret;  	struct mm_struct *mm = current->mm; diff --git a/mm/mprotect.c b/mm/mprotect.c index d0f6e7ce09f1..abe2694e13f4 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -217,8 +217,8 @@ fail:  	return error;  } -asmlinkage long -sys_mprotect(unsigned long start, size_t len, unsigned long prot) +SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +		unsigned long, prot)  {  	unsigned long vm_flags, nstart, end, tmp, reqprot;  	struct vm_area_struct *vma, *prev; diff --git a/mm/mremap.c b/mm/mremap.c index 646de959aa58..a39b7b91be46 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -420,9 +420,9 @@ out_nc:  	return ret;  } -asmlinkage unsigned long sys_mremap(unsigned long addr, -	unsigned long old_len, unsigned long new_len, -	unsigned long flags, unsigned long new_addr) +SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +		unsigned long, new_len, unsigned long, flags, +		unsigned long, new_addr)  {  	unsigned long ret; diff --git a/mm/msync.c b/mm/msync.c index 07dae08cf31c..4083209b7f02 100644 --- a/mm/msync.c +++ b/mm/msync.c @@ -28,7 +28,7 @@   * So by _not_ starting I/O in MS_ASYNC we provide complete flexibility to   * applications.   */ -asmlinkage long sys_msync(unsigned long start, size_t len, int flags) +SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags)  {  	unsigned long end;  	struct mm_struct *mm = current->mm; diff --git a/mm/nommu.c b/mm/nommu.c index 60ed8375c986..8cee8c8ff0f2 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -416,7 +416,7 @@ EXPORT_SYMBOL(vm_insert_page);   *  to a regular file.  in this case, the unmapping will need   *  to invoke file system routines that need the global lock.   */ -asmlinkage unsigned long sys_brk(unsigned long brk) +SYSCALL_DEFINE1(brk, unsigned long, brk)  {  	struct mm_struct *mm = current->mm; @@ -1573,7 +1573,7 @@ erase_whole_vma:  }  EXPORT_SYMBOL(do_munmap); -asmlinkage long sys_munmap(unsigned long addr, size_t len) +SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)  {  	int ret;  	struct mm_struct *mm = current->mm; @@ -1657,10 +1657,9 @@ unsigned long do_mremap(unsigned long addr,  }  EXPORT_SYMBOL(do_mremap); -asmlinkage -unsigned long sys_mremap(unsigned long addr, -			 unsigned long old_len, unsigned long new_len, -			 unsigned long flags, unsigned long new_addr) +SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +		unsigned long, new_len, unsigned long, flags, +		unsigned long, new_addr)  {  	unsigned long ret; diff --git a/mm/swapfile.c b/mm/swapfile.c index da422c47e2ee..f48b831e5e5c 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1377,7 +1377,7 @@ out:  	return ret;  } -asmlinkage long sys_swapoff(const char __user * specialfile) +SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)  {  	struct swap_info_struct * p = NULL;  	unsigned short *swap_map; @@ -1633,7 +1633,7 @@ late_initcall(max_swapfiles_check);   *   * The swapon system call   */ -asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags) +SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)  {  	struct swap_info_struct * p;  	char *name = NULL; diff --git a/net/socket.c b/net/socket.c index 06603d73c411..35dd7371752a 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1214,7 +1214,7 @@ int sock_create_kern(int family, int type, int protocol, struct socket **res)  	return __sock_create(&init_net, family, type, protocol, res, 1);  } -asmlinkage long sys_socket(int family, int type, int protocol) +SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)  {  	int retval;  	struct socket *sock; @@ -1255,8 +1255,8 @@ out_release:   *	Create a pair of connected sockets.   */ -asmlinkage long sys_socketpair(int family, int type, int protocol, -			       int __user *usockvec) +SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol, +		int __user *, usockvec)  {  	struct socket *sock1, *sock2;  	int fd1, fd2, err; @@ -1356,7 +1356,7 @@ out_fd1:   *	the protocol layer (having also checked the address is ok).   */ -asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) +SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)  {  	struct socket *sock;  	struct sockaddr_storage address; @@ -1385,7 +1385,7 @@ asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen)   *	ready for listening.   */ -asmlinkage long sys_listen(int fd, int backlog) +SYSCALL_DEFINE2(listen, int, fd, int, backlog)  {  	struct socket *sock;  	int err, fput_needed; @@ -1418,8 +1418,8 @@ asmlinkage long sys_listen(int fd, int backlog)   *	clean when we restucture accept also.   */ -asmlinkage long sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, -			    int __user *upeer_addrlen, int flags) +SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, +		int __user *, upeer_addrlen, int, flags)  {  	struct socket *sock, *newsock;  	struct file *newfile; @@ -1502,8 +1502,8 @@ out_fd:  	goto out_put;  } -asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, -			   int __user *upeer_addrlen) +SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr, +		int __user *, upeer_addrlen)  {  	return sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0);  } @@ -1520,8 +1520,8 @@ asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr,   *	include the -EINPROGRESS status for such sockets.   */ -asmlinkage long sys_connect(int fd, struct sockaddr __user *uservaddr, -			    int addrlen) +SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, +		int, addrlen)  {  	struct socket *sock;  	struct sockaddr_storage address; @@ -1552,8 +1552,8 @@ out:   *	name to user space.   */ -asmlinkage long sys_getsockname(int fd, struct sockaddr __user *usockaddr, -				int __user *usockaddr_len) +SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr, +		int __user *, usockaddr_len)  {  	struct socket *sock;  	struct sockaddr_storage address; @@ -1583,8 +1583,8 @@ out:   *	name to user space.   */ -asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr, -				int __user *usockaddr_len) +SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, +		int __user *, usockaddr_len)  {  	struct socket *sock;  	struct sockaddr_storage address; @@ -1615,9 +1615,9 @@ asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr,   *	the protocol.   */ -asmlinkage long sys_sendto(int fd, void __user *buff, size_t len, -			   unsigned flags, struct sockaddr __user *addr, -			   int addr_len) +SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len, +		unsigned, flags, struct sockaddr __user *, addr, +		int, addr_len)  {  	struct socket *sock;  	struct sockaddr_storage address; @@ -1660,7 +1660,8 @@ out:   *	Send a datagram down a socket.   */ -asmlinkage long sys_send(int fd, void __user *buff, size_t len, unsigned flags) +SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len, +		unsigned, flags)  {  	return sys_sendto(fd, buff, len, flags, NULL, 0);  } @@ -1671,9 +1672,9 @@ asmlinkage long sys_send(int fd, void __user *buff, size_t len, unsigned flags)   *	sender address from kernel to user space.   */ -asmlinkage long sys_recvfrom(int fd, void __user *ubuf, size_t size, -			     unsigned flags, struct sockaddr __user *addr, -			     int __user *addr_len) +SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, +		unsigned, flags, struct sockaddr __user *, addr, +		int __user *, addr_len)  {  	struct socket *sock;  	struct iovec iov; @@ -1725,8 +1726,8 @@ asmlinkage long sys_recv(int fd, void __user *ubuf, size_t size,   *	to pass the user mode parameter for the protocols to sort out.   */ -asmlinkage long sys_setsockopt(int fd, int level, int optname, -			       char __user *optval, int optlen) +SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname, +		char __user *, optval, int, optlen)  {  	int err, fput_needed;  	struct socket *sock; @@ -1759,8 +1760,8 @@ out_put:   *	to pass a user mode parameter for the protocols to sort out.   */ -asmlinkage long sys_getsockopt(int fd, int level, int optname, -			       char __user *optval, int __user *optlen) +SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname, +		char __user *, optval, int __user *, optlen)  {  	int err, fput_needed;  	struct socket *sock; @@ -1789,7 +1790,7 @@ out_put:   *	Shutdown a socket.   */ -asmlinkage long sys_shutdown(int fd, int how) +SYSCALL_DEFINE2(shutdown, int, fd, int, how)  {  	int err, fput_needed;  	struct socket *sock; @@ -1815,7 +1816,7 @@ asmlinkage long sys_shutdown(int fd, int how)   *	BSD sendmsg interface   */ -asmlinkage long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags) +SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)  {  	struct compat_msghdr __user *msg_compat =  	    (struct compat_msghdr __user *)msg; @@ -1921,8 +1922,8 @@ out:   *	BSD recvmsg interface   */ -asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, -			    unsigned int flags) +SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg, +		unsigned int, flags)  {  	struct compat_msghdr __user *msg_compat =  	    (struct compat_msghdr __user *)msg; @@ -2045,7 +2046,7 @@ static const unsigned char nargs[19]={   *  it is set by the callees.   */ -asmlinkage long sys_socketcall(int call, unsigned long __user *args) +SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args)  {  	unsigned long a[6];  	unsigned long a0, a1; diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c index 09796797d122..e9335e1c6cf5 100644 --- a/security/keys/keyctl.c +++ b/security/keys/keyctl.c @@ -54,11 +54,11 @@ static int key_get_type_from_user(char *type,   * - returns the new key's serial number   * - implements add_key()   */ -asmlinkage long sys_add_key(const char __user *_type, -			    const char __user *_description, -			    const void __user *_payload, -			    size_t plen, -			    key_serial_t ringid) +SYSCALL_DEFINE5(add_key, const char __user *, _type, +		const char __user *, _description, +		const void __user *, _payload, +		size_t, plen, +		key_serial_t, ringid)  {  	key_ref_t keyring_ref, key_ref;  	char type[32], *description; @@ -146,10 +146,10 @@ asmlinkage long sys_add_key(const char __user *_type,   *   - if the _callout_info string is empty, it will be rendered as "-"   * - implements request_key()   */ -asmlinkage long sys_request_key(const char __user *_type, -				const char __user *_description, -				const char __user *_callout_info, -				key_serial_t destringid) +SYSCALL_DEFINE4(request_key, const char __user *, _type, +		const char __user *, _description, +		const char __user *, _callout_info, +		key_serial_t, destringid)  {  	struct key_type *ktype;  	struct key *key; @@ -1216,8 +1216,8 @@ long keyctl_get_security(key_serial_t keyid,  /*   * the key control system call   */ -asmlinkage long sys_keyctl(int option, unsigned long arg2, unsigned long arg3, -			   unsigned long arg4, unsigned long arg5) +SYSCALL_DEFINE5(keyctl, int, option, unsigned long, arg2, unsigned long, arg3, +		unsigned long, arg4, unsigned long, arg5)  {  	switch (option) {  	case KEYCTL_GET_KEYRING_ID:  | 
