Commit 5cacdb4add1b1e50fe75edc50ebbb7bddd9cf5e7
Committed by
Linus Torvalds
1 parent
e28cbf2293
Exists in
master
and in
7 other branches
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
- arch/mips/include/asm/unistd.h
- arch/mips/kernel/syscall.c
- arch/powerpc/include/asm/unistd.h
- arch/powerpc/kernel/syscalls.c
- arch/sh/include/asm/syscalls.h
- arch/sh/include/asm/unistd_32.h
- arch/sh/include/asm/unistd_64.h
- arch/sh/kernel/sys_sh.c
- arch/um/kernel/syscall.c
- arch/x86/ia32/ia32entry.S
- arch/x86/ia32/sys_ia32.c
- arch/x86/include/asm/sys_ia32.h
- arch/x86/include/asm/syscalls.h
- arch/x86/include/asm/unistd_32.h
- arch/x86/include/asm/unistd_64.h
- arch/x86/kernel/sys_i386_32.c
- include/linux/syscalls.h
- kernel/sys.c
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(¤t->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); |
kernel/sys.c
... | ... | @@ -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; |