#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
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;
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):
/* 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;
}
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;