patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / arch / sparc64 / kernel / sunos_ioctl32.c
index d4a70bf..87c1aeb 100644 (file)
 #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
 
 struct rtentry32 {
@@ -104,10 +95,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;
@@ -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;