Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Christoph Hellwig and committed by
Linus Torvalds
5cacdb4a e28cbf22

+66 -284
-11
arch/m32r/kernel/sys_m32r.c
··· 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 ... */
+1
arch/mips/include/asm/unistd.h
··· 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
-42
arch/mips/kernel/syscall.c
··· 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);
+1
arch/powerpc/include/asm/unistd.h
··· 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
-57
arch/powerpc/kernel/syscalls.c
··· 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 {
-3
arch/sh/include/asm/syscalls.h
··· 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"
+1
arch/sh/include/asm/unistd_32.h
··· 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
+1
arch/sh/include/asm/unistd_64.h
··· 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
-11
arch/sh/kernel/sys_sh.c
··· 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 - }
-45
arch/um/kernel/syscall.c
··· 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;
+2 -2
arch/x86/ia32/ia32entry.S
··· 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 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 */
-52
arch/x86/ia32/sys_ia32.c
··· 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 {
-5
arch/x86/include/asm/sys_ia32.h
··· 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 *);
-7
arch/x86/include/asm/syscalls.h
··· 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 *);
+1
arch/x86/include/asm/unistd_32.h
··· 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
+1
arch/x86/include/asm/unistd_64.h
··· 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
-49
arch/x86/kernel/sys_i386_32.c
··· 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 */
+4
include/linux/syscalls.h
··· 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; ··· 657 655 asmlinkage long sys_sethostname(char __user *name, int len); 658 656 asmlinkage long sys_setdomainname(char __user *name, int len); 659 657 asmlinkage long sys_newuname(struct new_utsname __user *name); 658 + asmlinkage long sys_uname(struct old_utsname __user *); 659 + asmlinkage long sys_olduname(struct oldold_utsname __user *); 660 660 661 661 asmlinkage long sys_getrlimit(unsigned int resource, 662 662 struct rlimit __user *rlim);
+54
kernel/sys.c
··· 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;