Browse Source

[CVE-2009-0029] Remove __attribute__((weak)) from sys_pipe/sys_pipe2

Remove __attribute__((weak)) from common code sys_pipe implemantation.
IA64, ALPHA, SUPERH (32bit) and SPARC (32bit) have own implemantations
with the same name. Just rename them.
For sys_pipe2 there is no architecture specific implementation.

Cc: Richard Henderson <rth@twiddle.net>
Cc: David S. Miller <davem@davemloft.net>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Tony Luck <tony.luck@intel.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Heiko Carstens 16 years ago
parent
commit
1134723e96

+ 4 - 4
arch/alpha/kernel/entry.S

@@ -896,9 +896,9 @@ sys_getxpid:
 .end sys_getxpid
 .end sys_getxpid
 
 
 	.align	4
 	.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)
 	lda	$sp, -16($sp)
 	stq	$26, 0($sp)
 	stq	$26, 0($sp)
 	.prologue 0
 	.prologue 0
@@ -916,7 +916,7 @@ sys_pipe:
 	stq	$1, 80+16($sp)
 	stq	$1, 80+16($sp)
 1:	lda	$sp, 16($sp)
 1:	lda	$sp, 16($sp)
 	ret
 	ret
-.end sys_pipe
+.end sys_alpha_pipe
 
 
 	.align	4
 	.align	4
 	.globl	sys_execve
 	.globl	sys_execve

+ 1 - 1
arch/alpha/kernel/systbls.S

@@ -52,7 +52,7 @@ sys_call_table:
 	.quad sys_setpgid
 	.quad sys_setpgid
 	.quad alpha_ni_syscall			/* 40 */
 	.quad alpha_ni_syscall			/* 40 */
 	.quad sys_dup
 	.quad sys_dup
-	.quad sys_pipe
+	.quad sys_alpha_pipe
 	.quad osf_set_program_attributes
 	.quad osf_set_program_attributes
 	.quad alpha_ni_syscall
 	.quad alpha_ni_syscall
 	.quad sys_open				/* 45 */
 	.quad sys_open				/* 45 */

+ 1 - 1
arch/ia64/ia32/ia32_entry.S

@@ -220,7 +220,7 @@ ia32_syscall_table:
 	data8 sys_mkdir
 	data8 sys_mkdir
 	data8 sys_rmdir		  /* 40 */
 	data8 sys_rmdir		  /* 40 */
 	data8 sys_dup
 	data8 sys_dup
-	data8 sys_pipe
+	data8 sys_ia64_pipe
 	data8 compat_sys_times
 	data8 compat_sys_times
 	data8 sys_ni_syscall	  /* old prof syscall holder */
 	data8 sys_ni_syscall	  /* old prof syscall holder */
 	data8 sys32_brk		  /* 45 */
 	data8 sys32_brk		  /* 45 */

+ 1 - 1
arch/ia64/include/asm/unistd.h

@@ -364,7 +364,7 @@ struct pt_regs;
 struct sigaction;
 struct sigaction;
 long sys_execve(char __user *filename, char __user * __user *argv,
 long sys_execve(char __user *filename, char __user * __user *argv,
 			   char __user * __user *envp, struct pt_regs *regs);
 			   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,
 asmlinkage long sys_rt_sigaction(int sig,
 				 const struct sigaction __user *act,
 				 const struct sigaction __user *act,
 				 struct sigaction __user *oact,
 				 struct sigaction __user *oact,

+ 1 - 1
arch/ia64/kernel/entry.S

@@ -1442,7 +1442,7 @@ sys_call_table:
 	data8 sys_mkdir				// 1055
 	data8 sys_mkdir				// 1055
 	data8 sys_rmdir
 	data8 sys_rmdir
 	data8 sys_dup
 	data8 sys_dup
-	data8 sys_pipe
+	data8 sys_ia64_pipe
 	data8 sys_times
 	data8 sys_times
 	data8 ia64_brk				// 1060
 	data8 ia64_brk				// 1060
 	data8 sys_setgid
 	data8 sys_setgid

+ 1 - 1
arch/ia64/kernel/sys_ia64.c

@@ -154,7 +154,7 @@ out:
  * and r9) as this is faster than doing a copy_to_user().
  * and r9) as this is faster than doing a copy_to_user().
  */
  */
 asmlinkage long
 asmlinkage long
-sys_pipe (void)
+sys_ia64_pipe (void)
 {
 {
 	struct pt_regs *regs = task_pt_regs(current);
 	struct pt_regs *regs = task_pt_regs(current);
 	int fd[2];
 	int fd[2];

+ 0 - 1
arch/s390/kernel/entry.h

@@ -30,7 +30,6 @@ struct fadvise64_64_args;
 struct old_sigaction;
 struct old_sigaction;
 struct sel_arg_struct;
 struct sel_arg_struct;
 
 
-long sys_pipe(unsigned long __user *fildes);
 long sys_mmap2(struct mmap_arg_struct __user  *arg);
 long sys_mmap2(struct mmap_arg_struct __user  *arg);
 long old_mmap(struct mmap_arg_struct __user *arg);
 long old_mmap(struct mmap_arg_struct __user *arg);
 long sys_ipc(uint call, int first, unsigned long second,
 long sys_ipc(uint call, int first, unsigned long second,

+ 3 - 3
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,
 asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,
 				unsigned long r6, unsigned long r7,
 				unsigned long r6, unsigned long r7,
 				struct pt_regs __regs);
 				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,
 asmlinkage ssize_t sys_pread_wrapper(unsigned int fd, char __user *buf,
 				     size_t count, long dummy, loff_t pos);
 				     size_t count, long dummy, loff_t pos);
 asmlinkage ssize_t sys_pwrite_wrapper(unsigned int fd, const char __user *buf,
 asmlinkage ssize_t sys_pwrite_wrapper(unsigned int fd, const char __user *buf,

+ 1 - 1
arch/sh/kernel/sys_sh32.c

@@ -22,7 +22,7 @@
  * sys_pipe() is the normal C calling standard for creating
  * sys_pipe() is the normal C calling standard for creating
  * a pipe. It's not the way Unix traditionally does this, though.
  * 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,
 	unsigned long r6, unsigned long r7,
 	struct pt_regs __regs)
 	struct pt_regs __regs)
 {
 {

+ 1 - 1
arch/sh/kernel/syscalls_32.S

@@ -58,7 +58,7 @@ ENTRY(sys_call_table)
 	.long sys_mkdir
 	.long sys_mkdir
 	.long sys_rmdir		/* 40 */
 	.long sys_rmdir		/* 40 */
 	.long sys_dup
 	.long sys_dup
-	.long sys_pipe
+	.long sys_sh_pipe
 	.long sys_times
 	.long sys_times
 	.long sys_ni_syscall	/* old prof syscall holder */
 	.long sys_ni_syscall	/* old prof syscall holder */
 	.long sys_brk		/* 45 */
 	.long sys_brk		/* 45 */

+ 2 - 2
arch/sparc/kernel/entry.S

@@ -1088,8 +1088,8 @@ sunos_execv:
 	 ld	[%sp + STACKFRAME_SZ + PT_I0], %o0
 	 ld	[%sp + STACKFRAME_SZ + PT_I0], %o0
 
 
 	.align	4
 	.align	4
-	.globl	sys_pipe
-sys_pipe:
+	.globl	sys_sparc_pipe
+sys_sparc_pipe:
 	mov	%o7, %l5
 	mov	%o7, %l5
 	add	%sp, STACKFRAME_SZ, %o0		! pt_regs *regs arg
 	add	%sp, STACKFRAME_SZ, %o0		! pt_regs *regs arg
 	call	sparc_pipe
 	call	sparc_pipe

+ 1 - 1
arch/sparc/kernel/syscalls.S

@@ -20,7 +20,7 @@ execve_merge:
 	 add	%sp, PTREGS_OFF, %o0
 	 add	%sp, PTREGS_OFF, %o0
 
 
 	.align	32
 	.align	32
-sys_pipe:
+sys_sparc_pipe:
 	ba,pt	%xcc, sparc_pipe
 	ba,pt	%xcc, sparc_pipe
 	 add	%sp, PTREGS_OFF, %o0
 	 add	%sp, PTREGS_OFF, %o0
 sys_nis_syscall:
 sys_nis_syscall:

+ 1 - 1
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
 /*25*/	.long sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_pause
 /*30*/	.long sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice
 /*30*/	.long sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice
 /*35*/	.long sys_chown, sys_sync, sys_kill, sys_newstat, sys_sendfile
 /*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
 /*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
 /*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
 /*55*/	.long sys_reboot, sys_mmap2, sys_symlink, sys_readlink, sys_execve

+ 2 - 2
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
 /*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
 /*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
 	.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
 	.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
 /*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
 	.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
 /*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
 /*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
 	.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
 	.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
 /*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
 	.word sys_reboot, sys_nis_syscall, sys_symlink, sys_readlink, sys_execve

+ 2 - 2
fs/pipe.c

@@ -1043,7 +1043,7 @@ int do_pipe(int *fd)
  * sys_pipe() is the normal C calling standard for creating
  * sys_pipe() is the normal C calling standard for creating
  * a pipe. It's not the way Unix traditionally does this, though.
  * a pipe. It's not the way Unix traditionally does this, though.
  */
  */
-asmlinkage long __weak sys_pipe2(int __user *fildes, int flags)
+asmlinkage long sys_pipe2(int __user *fildes, int flags)
 {
 {
 	int fd[2];
 	int fd[2];
 	int error;
 	int error;
@@ -1059,7 +1059,7 @@ asmlinkage long __weak sys_pipe2(int __user *fildes, int flags)
 	return error;
 	return error;
 }
 }
 
 
-asmlinkage long __weak sys_pipe(int __user *fildes)
+asmlinkage long sys_pipe(int __user *fildes)
 {
 {
 	return sys_pipe2(fildes, 0);
 	return sys_pipe2(fildes, 0);
 }
 }