Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / sparc64 / kernel / sunos_ioctl32.c
index d4a70bf..3f619ea 100644 (file)
 #include <linux/smp_lock.h>
 #include <linux/syscalls.h>
 #include <linux/compat.h>
-#include <asm/kbio.h>
-
-/* Use this to get at 32-bit user passed pointers. */
-#define A(__x)                         \
-({     unsigned long __ret;            \
-       __asm__ ("srl   %0, 0, %0"      \
-                : "=r" (__ret)         \
-                : "0" (__x));          \
-       __ret;                          \
-})
 
 #define SUNOS_NR_OPEN  256
 
@@ -104,10 +94,11 @@ asmlinkage int sunos_ioctl (int fd, u32 cmd, u32 arg)
 
        if(cmd == TIOCSETD) {
                mm_segment_t old_fs = get_fs();
-               int *p, ntty = N_TTY;
+               int __user *p;
+               int ntty = N_TTY;
                int tmp;
 
-               p = (int *)A(arg);
+               p = (int __user *) (unsigned long) arg;
                ret = -EFAULT;
                if(get_user(tmp, p))
                        goto out;
@@ -160,11 +151,12 @@ asmlinkage int sunos_ioctl (int fd, u32 cmd, u32 arg)
                ret = compat_sys_ioctl(fd, SIOCGIFCONF, arg);
                goto out;
 
-       case _IOW('i', 21, struct ifreq): /* SIOCSIFMTU */
-               ret = sys_ioctl(fd, SIOCSIFMTU, arg);
+       case _IOW('i', 21, struct ifreq32):
+               ret = compat_sys_ioctl(fd, SIOCSIFMTU, arg);
                goto out;
-       case _IOWR('i', 22, struct ifreq): /* SIOCGIFMTU */
-               ret = sys_ioctl(fd, SIOCGIFMTU, arg);
+
+       case _IOWR('i', 22, struct ifreq32):
+               ret = compat_sys_ioctl(fd, SIOCGIFMTU, arg);
                goto out;
 
        case _IOWR('i', 23, struct ifreq32):
@@ -237,10 +229,10 @@ asmlinkage int sunos_ioctl (int fd, u32 cmd, u32 arg)
 
        /* Non posix grp */
        case _IOW('t', 118, int): {
-               int oldval, newval, *ptr;
+               int oldval, newval, __user *ptr;
 
                cmd = TIOCSPGRP;
-               ptr = (int *) A(arg);
+               ptr = (int __user *) (unsigned long) arg;
                ret = -EFAULT;
                if(get_user(oldval, ptr))
                        goto out;
@@ -256,10 +248,10 @@ asmlinkage int sunos_ioctl (int fd, u32 cmd, u32 arg)
        }
 
        case _IOR('t', 119, int): {
-               int oldval, newval, *ptr;
+               int oldval, newval, __user *ptr;
 
                cmd = TIOCGPGRP;
-               ptr = (int *) A(arg);
+               ptr = (int __user *) (unsigned long) arg;
                ret = -EFAULT;
                if(get_user(oldval, ptr))
                        goto out;