sysctl: parisc Use the compat_sys_sysctl
authorEric W. Biederman <ebiederm@xmission.com>
Fri, 3 Apr 2009 07:49:26 +0000 (00:49 -0700)
committerEric W. Biederman <ebiederm@xmission.com>
Fri, 6 Nov 2009 11:53:19 +0000 (03:53 -0800)
Now that we have a generic 32bit compatibility implementation
there is no need for parisc to implement it's own.

Cc: Thibaut Varene <T-Bone@parisc-linux.org>
Acked-by: Kyle McMartin <kyle@mcmartin.ca>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
arch/parisc/kernel/sys_parisc32.c
arch/parisc/kernel/syscall_table.S

index 561388b..76d23ec 100644 (file)
@@ -90,77 +90,6 @@ asmlinkage long sys32_unimplemented(int r26, int r25, int r24, int r23,
     return -ENOSYS;
 }
 
-#ifdef CONFIG_SYSCTL
-
-struct __sysctl_args32 {
-       u32 name;
-       int nlen;
-       u32 oldval;
-       u32 oldlenp;
-       u32 newval;
-       u32 newlen;
-       u32 __unused[4];
-};
-
-asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
-{
-#ifndef CONFIG_SYSCTL_SYSCALL
-       return -ENOSYS;
-#else
-       struct __sysctl_args32 tmp;
-       int error;
-       unsigned int oldlen32;
-       size_t oldlen, __user *oldlenp = NULL;
-       unsigned long addr = (((long __force)&args->__unused[0]) + 7) & ~7;
-
-       DBG(("sysctl32(%p)\n", args));
-
-       if (copy_from_user(&tmp, args, sizeof(tmp)))
-               return -EFAULT;
-
-       if (tmp.oldval && tmp.oldlenp) {
-               /* Duh, this is ugly and might not work if sysctl_args
-                  is in read-only memory, but do_sysctl does indirectly
-                  a lot of uaccess in both directions and we'd have to
-                  basically copy the whole sysctl.c here, and
-                  glibc's __sysctl uses rw memory for the structure
-                  anyway.  */
-               /* a possibly better hack than this, which will avoid the
-                * problem if the struct is read only, is to push the
-                * 'oldlen' value out to the user's stack instead. -PB
-                */
-               if (get_user(oldlen32, (u32 *)(u64)tmp.oldlenp))
-                       return -EFAULT;
-               oldlen = oldlen32;
-               if (put_user(oldlen, (size_t *)addr))
-                       return -EFAULT;
-               oldlenp = (size_t *)addr;
-       }
-
-       lock_kernel();
-       error = do_sysctl((int __user *)(u64)tmp.name, tmp.nlen,
-                         (void __user *)(u64)tmp.oldval, oldlenp,
-                         (void __user *)(u64)tmp.newval, tmp.newlen);
-       unlock_kernel();
-       if (oldlenp) {
-               if (!error) {
-                       if (get_user(oldlen, (size_t *)addr)) {
-                               error = -EFAULT;
-                       } else {
-                               oldlen32 = oldlen;
-                               if (put_user(oldlen32, (u32 *)(u64)tmp.oldlenp))
-                                       error = -EFAULT;
-                       }
-               }
-               if (copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)))
-                       error = -EFAULT;
-       }
-       return error;
-#endif
-}
-
-#endif /* CONFIG_SYSCTL */
-
 asmlinkage long sys32_sched_rr_get_interval(pid_t pid,
        struct compat_timespec __user *interval)
 {
index 843f423..01c4fcf 100644 (file)
        ENTRY_SAME(getsid)
        ENTRY_SAME(fdatasync)
        /* struct __sysctl_args is a mess */
-       ENTRY_DIFF(sysctl)
+       ENTRY_COMP(sysctl)
        ENTRY_SAME(mlock)               /* 150 */
        ENTRY_SAME(munlock)
        ENTRY_SAME(mlockall)