aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2010-03-10 18:21:21 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2010-03-12 18:52:32 -0500
commit5cacdb4add1b1e50fe75edc50ebbb7bddd9cf5e7 (patch)
treebd6595bb8c5c7e20ad01ed7ef766d873e5d26db3 /arch/x86
parente28cbf22933d0c0ccaf3c4c27a1a263b41f73859 (diff)
Add generic sys_olduname()
Add generic implementations of the old and really old uname system calls. Note that sh only implements sys_olduname but not sys_oldolduname, but I'm not going to bother with another ifdef for that special case. m32r implemented an old uname but never wired it up, so kill it, too. Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Jeff Dike <jdike@addtoit.com> Cc: Hirokazu Takata <takata@linux-m32r.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: James Morris <jmorris@namei.org> Cc: Andreas Schwab <schwab@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/ia32/ia32entry.S4
-rw-r--r--arch/x86/ia32/sys_ia32.c52
-rw-r--r--arch/x86/include/asm/sys_ia32.h5
-rw-r--r--arch/x86/include/asm/syscalls.h7
-rw-r--r--arch/x86/include/asm/unistd_32.h1
-rw-r--r--arch/x86/include/asm/unistd_64.h1
-rw-r--r--arch/x86/kernel/sys_i386_32.c49
7 files changed, 4 insertions, 115 deletions
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
index 34f821802c23..59b4556a5b92 100644
--- a/arch/x86/ia32/ia32entry.S
+++ b/arch/x86/ia32/ia32entry.S
@@ -563,7 +563,7 @@ ia32_sys_call_table:
563 .quad quiet_ni_syscall /* old mpx syscall holder */ 563 .quad quiet_ni_syscall /* old mpx syscall holder */
564 .quad sys_setpgid 564 .quad sys_setpgid
565 .quad quiet_ni_syscall /* old ulimit syscall holder */ 565 .quad quiet_ni_syscall /* old ulimit syscall holder */
566 .quad sys32_olduname 566 .quad sys_olduname
567 .quad sys_umask /* 60 */ 567 .quad sys_umask /* 60 */
568 .quad sys_chroot 568 .quad sys_chroot
569 .quad compat_sys_ustat 569 .quad compat_sys_ustat
@@ -613,7 +613,7 @@ ia32_sys_call_table:
613 .quad compat_sys_newstat 613 .quad compat_sys_newstat
614 .quad compat_sys_newlstat 614 .quad compat_sys_newlstat
615 .quad compat_sys_newfstat 615 .quad compat_sys_newfstat
616 .quad sys32_uname 616 .quad sys_uname
617 .quad stub32_iopl /* 110 */ 617 .quad stub32_iopl /* 110 */
618 .quad sys_vhangup 618 .quad sys_vhangup
619 .quad quiet_ni_syscall /* old "idle" system call */ 619 .quad quiet_ni_syscall /* old "idle" system call */
diff --git a/arch/x86/ia32/sys_ia32.c b/arch/x86/ia32/sys_ia32.c
index 56c99f46e289..74c35431b7d8 100644
--- a/arch/x86/ia32/sys_ia32.c
+++ b/arch/x86/ia32/sys_ia32.c
@@ -448,58 +448,6 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd,
448 return ret; 448 return ret;
449} 449}
450 450
451asmlinkage long sys32_olduname(struct oldold_utsname __user *name)
452{
453 char *arch = "x86_64";
454 int err;
455
456 if (!name)
457 return -EFAULT;
458 if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname)))
459 return -EFAULT;
460
461 down_read(&uts_sem);
462
463 err = __copy_to_user(&name->sysname, &utsname()->sysname,
464 __OLD_UTS_LEN);
465 err |= __put_user(0, name->sysname+__OLD_UTS_LEN);
466 err |= __copy_to_user(&name->nodename, &utsname()->nodename,
467 __OLD_UTS_LEN);
468 err |= __put_user(0, name->nodename+__OLD_UTS_LEN);
469 err |= __copy_to_user(&name->release, &utsname()->release,
470 __OLD_UTS_LEN);
471 err |= __put_user(0, name->release+__OLD_UTS_LEN);
472 err |= __copy_to_user(&name->version, &utsname()->version,
473 __OLD_UTS_LEN);
474 err |= __put_user(0, name->version+__OLD_UTS_LEN);
475
476 if (personality(current->personality) == PER_LINUX32)
477 arch = "i686";
478
479 err |= __copy_to_user(&name->machine, arch, strlen(arch) + 1);
480
481 up_read(&uts_sem);
482
483 err = err ? -EFAULT : 0;
484
485 return err;
486}
487
488long sys32_uname(struct old_utsname __user *name)
489{
490 int err;
491
492 if (!name)
493 return -EFAULT;
494 down_read(&uts_sem);
495 err = copy_to_user(name, utsname(), sizeof(*name));
496 up_read(&uts_sem);
497 if (personality(current->personality) == PER_LINUX32)
498 err |= copy_to_user(&name->machine, "i686", 5);
499
500 return err ? -EFAULT : 0;
501}
502
503asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, 451asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv,
504 compat_uptr_t __user *envp, struct pt_regs *regs) 452 compat_uptr_t __user *envp, struct pt_regs *regs)
505{ 453{
diff --git a/arch/x86/include/asm/sys_ia32.h b/arch/x86/include/asm/sys_ia32.h
index 7d348d803669..3ad421784ae7 100644
--- a/arch/x86/include/asm/sys_ia32.h
+++ b/arch/x86/include/asm/sys_ia32.h
@@ -54,11 +54,6 @@ asmlinkage long sys32_pwrite(unsigned int, char __user *, u32, u32, u32);
54asmlinkage long sys32_personality(unsigned long); 54asmlinkage long sys32_personality(unsigned long);
55asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); 55asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32);
56 56
57struct oldold_utsname;
58struct old_utsname;
59asmlinkage long sys32_olduname(struct oldold_utsname __user *);
60long sys32_uname(struct old_utsname __user *);
61
62asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *, 57asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *,
63 compat_uptr_t __user *, struct pt_regs *); 58 compat_uptr_t __user *, struct pt_regs *);
64asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *); 59asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *);
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h
index 47cd606c3537..5c044b43e9a7 100644
--- a/arch/x86/include/asm/syscalls.h
+++ b/arch/x86/include/asm/syscalls.h
@@ -50,13 +50,6 @@ asmlinkage int sys_sigaction(int, const struct old_sigaction __user *,
50 struct old_sigaction __user *); 50 struct old_sigaction __user *);
51unsigned long sys_sigreturn(struct pt_regs *); 51unsigned long sys_sigreturn(struct pt_regs *);
52 52
53/* kernel/sys_i386_32.c */
54struct oldold_utsname;
55struct old_utsname;
56
57asmlinkage int sys_uname(struct old_utsname __user *);
58asmlinkage int sys_olduname(struct oldold_utsname __user *);
59
60/* kernel/vm86_32.c */ 53/* kernel/vm86_32.c */
61int sys_vm86old(struct vm86_struct __user *, struct pt_regs *); 54int sys_vm86old(struct vm86_struct __user *, struct pt_regs *);
62int sys_vm86(unsigned long, unsigned long, struct pt_regs *); 55int sys_vm86(unsigned long, unsigned long, struct pt_regs *);
diff --git a/arch/x86/include/asm/unistd_32.h b/arch/x86/include/asm/unistd_32.h
index 45e64a17b86e..beb9b5f8f8a4 100644
--- a/arch/x86/include/asm/unistd_32.h
+++ b/arch/x86/include/asm/unistd_32.h
@@ -367,6 +367,7 @@
367#define __ARCH_WANT_SYS_LLSEEK 367#define __ARCH_WANT_SYS_LLSEEK
368#define __ARCH_WANT_SYS_NICE 368#define __ARCH_WANT_SYS_NICE
369#define __ARCH_WANT_SYS_OLD_GETRLIMIT 369#define __ARCH_WANT_SYS_OLD_GETRLIMIT
370#define __ARCH_WANT_SYS_OLD_UNAME
370#define __ARCH_WANT_SYS_OLD_MMAP 371#define __ARCH_WANT_SYS_OLD_MMAP
371#define __ARCH_WANT_SYS_OLD_SELECT 372#define __ARCH_WANT_SYS_OLD_SELECT
372#define __ARCH_WANT_SYS_OLDUMOUNT 373#define __ARCH_WANT_SYS_OLDUMOUNT
diff --git a/arch/x86/include/asm/unistd_64.h b/arch/x86/include/asm/unistd_64.h
index 83e2d6dc5038..ff4307b0e81e 100644
--- a/arch/x86/include/asm/unistd_64.h
+++ b/arch/x86/include/asm/unistd_64.h
@@ -680,6 +680,7 @@ __SYSCALL(__NR_recvmmsg, sys_recvmmsg)
680#define __ARCH_WANT_SYS_LLSEEK 680#define __ARCH_WANT_SYS_LLSEEK
681#define __ARCH_WANT_SYS_NICE 681#define __ARCH_WANT_SYS_NICE
682#define __ARCH_WANT_SYS_OLD_GETRLIMIT 682#define __ARCH_WANT_SYS_OLD_GETRLIMIT
683#define __ARCH_WANT_SYS_OLD_UNAME
683#define __ARCH_WANT_SYS_OLDUMOUNT 684#define __ARCH_WANT_SYS_OLDUMOUNT
684#define __ARCH_WANT_SYS_SIGPENDING 685#define __ARCH_WANT_SYS_SIGPENDING
685#define __ARCH_WANT_SYS_SIGPROCMASK 686#define __ARCH_WANT_SYS_SIGPROCMASK
diff --git a/arch/x86/kernel/sys_i386_32.c b/arch/x86/kernel/sys_i386_32.c
index 8b5c348fdcf2..196552bb412c 100644
--- a/arch/x86/kernel/sys_i386_32.c
+++ b/arch/x86/kernel/sys_i386_32.c
@@ -25,55 +25,6 @@
25#include <asm/syscalls.h> 25#include <asm/syscalls.h>
26 26
27/* 27/*
28 * Old cruft
29 */
30asmlinkage int sys_uname(struct old_utsname __user *name)
31{
32 int err;
33 if (!name)
34 return -EFAULT;
35 down_read(&uts_sem);
36 err = copy_to_user(name, utsname(), sizeof(*name));
37 up_read(&uts_sem);
38 return err? -EFAULT:0;
39}
40
41asmlinkage int sys_olduname(struct oldold_utsname __user *name)
42{
43 int error;
44
45 if (!name)
46 return -EFAULT;
47 if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname)))
48 return -EFAULT;
49
50 down_read(&uts_sem);
51
52 error = __copy_to_user(&name->sysname, &utsname()->sysname,
53 __OLD_UTS_LEN);
54 error |= __put_user(0, name->sysname + __OLD_UTS_LEN);
55 error |= __copy_to_user(&name->nodename, &utsname()->nodename,
56 __OLD_UTS_LEN);
57 error |= __put_user(0, name->nodename + __OLD_UTS_LEN);
58 error |= __copy_to_user(&name->release, &utsname()->release,
59 __OLD_UTS_LEN);
60 error |= __put_user(0, name->release + __OLD_UTS_LEN);
61 error |= __copy_to_user(&name->version, &utsname()->version,
62 __OLD_UTS_LEN);
63 error |= __put_user(0, name->version + __OLD_UTS_LEN);
64 error |= __copy_to_user(&name->machine, &utsname()->machine,
65 __OLD_UTS_LEN);
66 error |= __put_user(0, name->machine + __OLD_UTS_LEN);
67
68 up_read(&uts_sem);
69
70 error = error ? -EFAULT : 0;
71
72 return error;
73}
74
75
76/*
77 * Do a system call from kernel instead of calling sys_execve so we 28 * Do a system call from kernel instead of calling sys_execve so we
78 * end up with proper pt_regs. 29 * end up with proper pt_regs.
79 */ 30 */