diff options
author | Christoph Hellwig <hch@lst.de> | 2010-03-10 18:21:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-12 18:52:32 -0500 |
commit | 5cacdb4add1b1e50fe75edc50ebbb7bddd9cf5e7 (patch) | |
tree | bd6595bb8c5c7e20ad01ed7ef766d873e5d26db3 /arch/x86 | |
parent | e28cbf22933d0c0ccaf3c4c27a1a263b41f73859 (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.S | 4 | ||||
-rw-r--r-- | arch/x86/ia32/sys_ia32.c | 52 | ||||
-rw-r--r-- | arch/x86/include/asm/sys_ia32.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/syscalls.h | 7 | ||||
-rw-r--r-- | arch/x86/include/asm/unistd_32.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/unistd_64.h | 1 | ||||
-rw-r--r-- | arch/x86/kernel/sys_i386_32.c | 49 |
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 | ||
451 | asmlinkage 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 | |||
488 | long 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 | |||
503 | asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, | 451 | asmlinkage 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); | |||
54 | asmlinkage long sys32_personality(unsigned long); | 54 | asmlinkage long sys32_personality(unsigned long); |
55 | asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); | 55 | asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); |
56 | 56 | ||
57 | struct oldold_utsname; | ||
58 | struct old_utsname; | ||
59 | asmlinkage long sys32_olduname(struct oldold_utsname __user *); | ||
60 | long sys32_uname(struct old_utsname __user *); | ||
61 | |||
62 | asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *, | 57 | asmlinkage 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 *); |
64 | asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *); | 59 | asmlinkage 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 *); |
51 | unsigned long sys_sigreturn(struct pt_regs *); | 51 | unsigned long sys_sigreturn(struct pt_regs *); |
52 | 52 | ||
53 | /* kernel/sys_i386_32.c */ | ||
54 | struct oldold_utsname; | ||
55 | struct old_utsname; | ||
56 | |||
57 | asmlinkage int sys_uname(struct old_utsname __user *); | ||
58 | asmlinkage int sys_olduname(struct oldold_utsname __user *); | ||
59 | |||
60 | /* kernel/vm86_32.c */ | 53 | /* kernel/vm86_32.c */ |
61 | int sys_vm86old(struct vm86_struct __user *, struct pt_regs *); | 54 | int sys_vm86old(struct vm86_struct __user *, struct pt_regs *); |
62 | int sys_vm86(unsigned long, unsigned long, struct pt_regs *); | 55 | int 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 | */ | ||
30 | asmlinkage 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 | |||
41 | asmlinkage 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 | */ |