Commit 5cacdb4add1b1e50fe75edc50ebbb7bddd9cf5e7

Authored by Christoph Hellwig
Committed by Linus Torvalds
1 parent e28cbf2293

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>

Showing 19 changed files with 66 additions and 284 deletions Side-by-side Diff

arch/m32r/kernel/sys_m32r.c
... ... @@ -76,17 +76,6 @@
76 76 return oldval;
77 77 }
78 78  
79   -asmlinkage int sys_uname(struct old_utsname __user * name)
80   -{
81   - int err;
82   - if (!name)
83   - return -EFAULT;
84   - down_read(&uts_sem);
85   - err = copy_to_user(name, utsname(), sizeof (*name));
86   - up_read(&uts_sem);
87   - return err?-EFAULT:0;
88   -}
89   -
90 79 asmlinkage int sys_cacheflush(void *addr, int bytes, int cache)
91 80 {
92 81 /* This should flush more selectively ... */
arch/mips/include/asm/unistd.h
... ... @@ -1014,6 +1014,7 @@
1014 1014 #define __ARCH_WANT_SYS_LLSEEK
1015 1015 #define __ARCH_WANT_SYS_NICE
1016 1016 #define __ARCH_WANT_SYS_OLD_GETRLIMIT
  1017 +#define __ARCH_WANT_SYS_OLD_UNAME
1017 1018 #define __ARCH_WANT_SYS_OLDUMOUNT
1018 1019 #define __ARCH_WANT_SYS_SIGPENDING
1019 1020 #define __ARCH_WANT_SYS_SIGPROCMASK
arch/mips/kernel/syscall.c
... ... @@ -215,48 +215,6 @@
215 215 return error;
216 216 }
217 217  
218   -/*
219   - * Compacrapability ...
220   - */
221   -SYSCALL_DEFINE1(uname, struct old_utsname __user *, name)
222   -{
223   - if (name && !copy_to_user(name, utsname(), sizeof (*name)))
224   - return 0;
225   - return -EFAULT;
226   -}
227   -
228   -/*
229   - * Compacrapability ...
230   - */
231   -SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
232   -{
233   - int error;
234   -
235   - if (!name)
236   - return -EFAULT;
237   - if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname)))
238   - return -EFAULT;
239   -
240   - error = __copy_to_user(&name->sysname, &utsname()->sysname,
241   - __OLD_UTS_LEN);
242   - error -= __put_user(0, name->sysname + __OLD_UTS_LEN);
243   - error -= __copy_to_user(&name->nodename, &utsname()->nodename,
244   - __OLD_UTS_LEN);
245   - error -= __put_user(0, name->nodename + __OLD_UTS_LEN);
246   - error -= __copy_to_user(&name->release, &utsname()->release,
247   - __OLD_UTS_LEN);
248   - error -= __put_user(0, name->release + __OLD_UTS_LEN);
249   - error -= __copy_to_user(&name->version, &utsname()->version,
250   - __OLD_UTS_LEN);
251   - error -= __put_user(0, name->version + __OLD_UTS_LEN);
252   - error -= __copy_to_user(&name->machine, &utsname()->machine,
253   - __OLD_UTS_LEN);
254   - error = __put_user(0, name->machine + __OLD_UTS_LEN);
255   - error = error ? -EFAULT : 0;
256   -
257   - return error;
258   -}
259   -
260 218 SYSCALL_DEFINE1(set_thread_area, unsigned long, addr)
261 219 {
262 220 struct thread_info *ti = task_thread_info(current);
arch/powerpc/include/asm/unistd.h
... ... @@ -377,6 +377,7 @@
377 377 #define __ARCH_WANT_SYS_LLSEEK
378 378 #define __ARCH_WANT_SYS_NICE
379 379 #define __ARCH_WANT_SYS_OLD_GETRLIMIT
  380 +#define __ARCH_WANT_SYS_OLD_UNAME
380 381 #define __ARCH_WANT_SYS_OLDUMOUNT
381 382 #define __ARCH_WANT_SYS_SIGPENDING
382 383 #define __ARCH_WANT_SYS_SIGPROCMASK
arch/powerpc/kernel/syscalls.c
... ... @@ -116,63 +116,6 @@
116 116 }
117 117 #endif
118 118  
119   -#ifdef CONFIG_PPC64
120   -#define OVERRIDE_MACHINE (personality(current->personality) == PER_LINUX32)
121   -#else
122   -#define OVERRIDE_MACHINE 0
123   -#endif
124   -
125   -static inline int override_machine(char __user *mach)
126   -{
127   - if (OVERRIDE_MACHINE) {
128   - /* change ppc64 to ppc */
129   - if (__put_user(0, mach+3) || __put_user(0, mach+4))
130   - return -EFAULT;
131   - }
132   - return 0;
133   -}
134   -
135   -int sys_uname(struct old_utsname __user *name)
136   -{
137   - int err = 0;
138   -
139   - down_read(&uts_sem);
140   - if (copy_to_user(name, utsname(), sizeof(*name)))
141   - err = -EFAULT;
142   - up_read(&uts_sem);
143   - if (!err)
144   - err = override_machine(name->machine);
145   - return err;
146   -}
147   -
148   -int sys_olduname(struct oldold_utsname __user *name)
149   -{
150   - int error;
151   -
152   - if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname)))
153   - return -EFAULT;
154   -
155   - down_read(&uts_sem);
156   - error = __copy_to_user(&name->sysname, &utsname()->sysname,
157   - __OLD_UTS_LEN);
158   - error |= __put_user(0, name->sysname + __OLD_UTS_LEN);
159   - error |= __copy_to_user(&name->nodename, &utsname()->nodename,
160   - __OLD_UTS_LEN);
161   - error |= __put_user(0, name->nodename + __OLD_UTS_LEN);
162   - error |= __copy_to_user(&name->release, &utsname()->release,
163   - __OLD_UTS_LEN);
164   - error |= __put_user(0, name->release + __OLD_UTS_LEN);
165   - error |= __copy_to_user(&name->version, &utsname()->version,
166   - __OLD_UTS_LEN);
167   - error |= __put_user(0, name->version + __OLD_UTS_LEN);
168   - error |= __copy_to_user(&name->machine, &utsname()->machine,
169   - __OLD_UTS_LEN);
170   - error |= override_machine(name->machine);
171   - up_read(&uts_sem);
172   -
173   - return error? -EFAULT: 0;
174   -}
175   -
176 119 long ppc_fadvise64_64(int fd, int advice, u32 offset_high, u32 offset_low,
177 120 u32 len_high, u32 len_low)
178 121 {
arch/sh/include/asm/syscalls.h
... ... @@ -3,15 +3,12 @@
3 3  
4 4 #ifdef __KERNEL__
5 5  
6   -struct old_utsname;
7   -
8 6 asmlinkage int old_mmap(unsigned long addr, unsigned long len,
9 7 unsigned long prot, unsigned long flags,
10 8 int fd, unsigned long off);
11 9 asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
12 10 unsigned long prot, unsigned long flags,
13 11 unsigned long fd, unsigned long pgoff);
14   -asmlinkage int sys_uname(struct old_utsname __user *name);
15 12  
16 13 #ifdef CONFIG_SUPERH32
17 14 # include "syscalls_32.h"
arch/sh/include/asm/unistd_32.h
... ... @@ -371,6 +371,7 @@
371 371 #define __ARCH_WANT_SYS_LLSEEK
372 372 #define __ARCH_WANT_SYS_NICE
373 373 #define __ARCH_WANT_SYS_OLD_GETRLIMIT
  374 +#define __ARCH_WANT_SYS_OLD_UNAME
374 375 #define __ARCH_WANT_SYS_OLDUMOUNT
375 376 #define __ARCH_WANT_SYS_SIGPENDING
376 377 #define __ARCH_WANT_SYS_SIGPROCMASK
arch/sh/include/asm/unistd_64.h
... ... @@ -411,6 +411,7 @@
411 411 #define __ARCH_WANT_SYS_LLSEEK
412 412 #define __ARCH_WANT_SYS_NICE
413 413 #define __ARCH_WANT_SYS_OLD_GETRLIMIT
  414 +#define __ARCH_WANT_SYS_OLD_UNAME
414 415 #define __ARCH_WANT_SYS_OLDUMOUNT
415 416 #define __ARCH_WANT_SYS_SIGPENDING
416 417 #define __ARCH_WANT_SYS_SIGPROCMASK
arch/sh/kernel/sys_sh.c
... ... @@ -93,15 +93,4 @@
93 93 up_read(&current->mm->mmap_sem);
94 94 return 0;
95 95 }
96   -
97   -asmlinkage int sys_uname(struct old_utsname __user *name)
98   -{
99   - int err;
100   - if (!name)
101   - return -EFAULT;
102   - down_read(&uts_sem);
103   - err = copy_to_user(name, utsname(), sizeof(*name));
104   - up_read(&uts_sem);
105   - return err?-EFAULT:0;
106   -}
arch/um/kernel/syscall.c
... ... @@ -51,51 +51,6 @@
51 51 return err;
52 52 }
53 53  
54   -long sys_uname(struct old_utsname __user * name)
55   -{
56   - long err;
57   - if (!name)
58   - return -EFAULT;
59   - down_read(&uts_sem);
60   - err = copy_to_user(name, utsname(), sizeof (*name));
61   - up_read(&uts_sem);
62   - return err?-EFAULT:0;
63   -}
64   -
65   -long sys_olduname(struct oldold_utsname __user * name)
66   -{
67   - long error;
68   -
69   - if (!name)
70   - return -EFAULT;
71   - if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname)))
72   - return -EFAULT;
73   -
74   - down_read(&uts_sem);
75   -
76   - error = __copy_to_user(&name->sysname, &utsname()->sysname,
77   - __OLD_UTS_LEN);
78   - error |= __put_user(0, name->sysname + __OLD_UTS_LEN);
79   - error |= __copy_to_user(&name->nodename, &utsname()->nodename,
80   - __OLD_UTS_LEN);
81   - error |= __put_user(0, name->nodename + __OLD_UTS_LEN);
82   - error |= __copy_to_user(&name->release, &utsname()->release,
83   - __OLD_UTS_LEN);
84   - error |= __put_user(0, name->release + __OLD_UTS_LEN);
85   - error |= __copy_to_user(&name->version, &utsname()->version,
86   - __OLD_UTS_LEN);
87   - error |= __put_user(0, name->version + __OLD_UTS_LEN);
88   - error |= __copy_to_user(&name->machine, &utsname()->machine,
89   - __OLD_UTS_LEN);
90   - error |= __put_user(0, name->machine + __OLD_UTS_LEN);
91   -
92   - up_read(&uts_sem);
93   -
94   - error = error ? -EFAULT : 0;
95   -
96   - return error;
97   -}
98   -
99 54 int kernel_execve(const char *filename, char *const argv[], char *const envp[])
100 55 {
101 56 mm_segment_t fs;
arch/x86/ia32/ia32entry.S
... ... @@ -563,7 +563,7 @@
563 563 .quad quiet_ni_syscall /* old mpx syscall holder */
564 564 .quad sys_setpgid
565 565 .quad quiet_ni_syscall /* old ulimit syscall holder */
566   - .quad sys32_olduname
  566 + .quad sys_olduname
567 567 .quad sys_umask /* 60 */
568 568 .quad sys_chroot
569 569 .quad compat_sys_ustat
... ... @@ -613,7 +613,7 @@
613 613 .quad compat_sys_newstat
614 614 .quad compat_sys_newlstat
615 615 .quad compat_sys_newfstat
616   - .quad sys32_uname
  616 + .quad sys_uname
617 617 .quad stub32_iopl /* 110 */
618 618 .quad sys_vhangup
619 619 .quad quiet_ni_syscall /* old "idle" system call */
arch/x86/ia32/sys_ia32.c
... ... @@ -448,58 +448,6 @@
448 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 451 asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv,
504 452 compat_uptr_t __user *envp, struct pt_regs *regs)
505 453 {
arch/x86/include/asm/sys_ia32.h
... ... @@ -54,11 +54,6 @@
54 54 asmlinkage long sys32_personality(unsigned long);
55 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 57 asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *,
63 58 compat_uptr_t __user *, struct pt_regs *);
64 59 asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *);
arch/x86/include/asm/syscalls.h
... ... @@ -50,13 +50,6 @@
50 50 struct old_sigaction __user *);
51 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 53 /* kernel/vm86_32.c */
61 54 int sys_vm86old(struct vm86_struct __user *, struct pt_regs *);
62 55 int sys_vm86(unsigned long, unsigned long, struct pt_regs *);
arch/x86/include/asm/unistd_32.h
... ... @@ -367,6 +367,7 @@
367 367 #define __ARCH_WANT_SYS_LLSEEK
368 368 #define __ARCH_WANT_SYS_NICE
369 369 #define __ARCH_WANT_SYS_OLD_GETRLIMIT
  370 +#define __ARCH_WANT_SYS_OLD_UNAME
370 371 #define __ARCH_WANT_SYS_OLD_MMAP
371 372 #define __ARCH_WANT_SYS_OLD_SELECT
372 373 #define __ARCH_WANT_SYS_OLDUMOUNT
arch/x86/include/asm/unistd_64.h
... ... @@ -680,6 +680,7 @@
680 680 #define __ARCH_WANT_SYS_LLSEEK
681 681 #define __ARCH_WANT_SYS_NICE
682 682 #define __ARCH_WANT_SYS_OLD_GETRLIMIT
  683 +#define __ARCH_WANT_SYS_OLD_UNAME
683 684 #define __ARCH_WANT_SYS_OLDUMOUNT
684 685 #define __ARCH_WANT_SYS_SIGPENDING
685 686 #define __ARCH_WANT_SYS_SIGPROCMASK
arch/x86/kernel/sys_i386_32.c
... ... @@ -25,55 +25,6 @@
25 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 28 * Do a system call from kernel instead of calling sys_execve so we
78 29 * end up with proper pt_regs.
79 30 */
include/linux/syscalls.h
... ... @@ -31,6 +31,8 @@
31 31 struct new_utsname;
32 32 struct nfsctl_arg;
33 33 struct __old_kernel_stat;
  34 +struct oldold_utsname;
  35 +struct old_utsname;
34 36 struct pollfd;
35 37 struct rlimit;
36 38 struct rusage;
... ... @@ -655,6 +657,8 @@
655 657 asmlinkage long sys_sethostname(char __user *name, int len);
656 658 asmlinkage long sys_setdomainname(char __user *name, int len);
657 659 asmlinkage long sys_newuname(struct new_utsname __user *name);
  660 +asmlinkage long sys_uname(struct old_utsname __user *);
  661 +asmlinkage long sys_olduname(struct oldold_utsname __user *);
658 662  
659 663 asmlinkage long sys_getrlimit(unsigned int resource,
660 664 struct rlimit __user *rlim);
... ... @@ -1138,6 +1138,60 @@
1138 1138 return errno;
1139 1139 }
1140 1140  
  1141 +#ifdef __ARCH_WANT_SYS_OLD_UNAME
  1142 +/*
  1143 + * Old cruft
  1144 + */
  1145 +SYSCALL_DEFINE1(uname, struct old_utsname __user *, name)
  1146 +{
  1147 + int error = 0;
  1148 +
  1149 + if (!name)
  1150 + return -EFAULT;
  1151 +
  1152 + down_read(&uts_sem);
  1153 + if (copy_to_user(name, utsname(), sizeof(*name)))
  1154 + error = -EFAULT;
  1155 + up_read(&uts_sem);
  1156 +
  1157 + if (!error && override_architecture(name))
  1158 + error = -EFAULT;
  1159 + return error;
  1160 +}
  1161 +
  1162 +SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
  1163 +{
  1164 + int error;
  1165 +
  1166 + if (!name)
  1167 + return -EFAULT;
  1168 + if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname)))
  1169 + return -EFAULT;
  1170 +
  1171 + down_read(&uts_sem);
  1172 + error = __copy_to_user(&name->sysname, &utsname()->sysname,
  1173 + __OLD_UTS_LEN);
  1174 + error |= __put_user(0, name->sysname + __OLD_UTS_LEN);
  1175 + error |= __copy_to_user(&name->nodename, &utsname()->nodename,
  1176 + __OLD_UTS_LEN);
  1177 + error |= __put_user(0, name->nodename + __OLD_UTS_LEN);
  1178 + error |= __copy_to_user(&name->release, &utsname()->release,
  1179 + __OLD_UTS_LEN);
  1180 + error |= __put_user(0, name->release + __OLD_UTS_LEN);
  1181 + error |= __copy_to_user(&name->version, &utsname()->version,
  1182 + __OLD_UTS_LEN);
  1183 + error |= __put_user(0, name->version + __OLD_UTS_LEN);
  1184 + error |= __copy_to_user(&name->machine, &utsname()->machine,
  1185 + __OLD_UTS_LEN);
  1186 + error |= __put_user(0, name->machine + __OLD_UTS_LEN);
  1187 + up_read(&uts_sem);
  1188 +
  1189 + if (!error && override_architecture(name))
  1190 + error = -EFAULT;
  1191 + return error ? -EFAULT : 0;
  1192 +}
  1193 +#endif
  1194 +
1141 1195 SYSCALL_DEFINE2(sethostname, char __user *, name, int, len)
1142 1196 {
1143 1197 int errno;