From: Al Viro <v...@zeniv.linux.org.uk>

Signed-off-by: Al Viro <v...@zeniv.linux.org.uk>
---
 net/atm/ioctl.c | 25 ++++---------------------
 1 file changed, 4 insertions(+), 21 deletions(-)

diff --git a/net/atm/ioctl.c b/net/atm/ioctl.c
index 52f2c77e656f..838ebf0cabbf 100644
--- a/net/atm/ioctl.c
+++ b/net/atm/ioctl.c
@@ -286,30 +286,13 @@ static int do_atm_iobuf(struct socket *sock, unsigned int 
cmd,
 static int do_atmif_sioc(struct socket *sock, unsigned int cmd,
                         unsigned long arg)
 {
-       struct atmif_sioc __user *sioc;
-       struct compat_atmif_sioc __user *sioc32;
+       struct compat_atmif_sioc __user *sioc32 = compat_ptr(arg);
+       int number;
        u32 data;
-       void __user *datap;
-       int err;
 
-       sioc = compat_alloc_user_space(sizeof(*sioc));
-       sioc32 = compat_ptr(arg);
-
-       if (copy_in_user(&sioc->number, &sioc32->number, 2 * sizeof(int)) ||
-           get_user(data, &sioc32->arg))
-               return -EFAULT;
-       datap = compat_ptr(data);
-       if (put_user(datap, &sioc->arg))
+       if (get_user(data, &sioc32->arg) || get_user(number, &sioc32->number))
                return -EFAULT;
-
-       err = do_vcc_ioctl(sock, cmd, (unsigned long) sioc, 0);
-
-       if (!err) {
-               if (copy_in_user(&sioc32->length, &sioc->length,
-                                sizeof(int)))
-                       err = -EFAULT;
-       }
-       return err;
+       return atm_dev_ioctl(cmd, compat_ptr(data), &sioc32->length, number, 0);
 }
 
 static int do_atm_ioctl(struct socket *sock, unsigned int cmd32,
-- 
2.11.0

Reply via email to