Commit 89c0c24b authored by Al Viro's avatar Al Viro

cmtp: fix compat_ioctl

Use compat_ptr().  And don't mess with fs/compat_ioctl.c
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent cc04f6e2
...@@ -534,11 +534,6 @@ static int mt_ioctl_trans(struct file *file, ...@@ -534,11 +534,6 @@ static int mt_ioctl_trans(struct file *file,
#define HCIUARTSETFLAGS _IOW('U', 203, int) #define HCIUARTSETFLAGS _IOW('U', 203, int)
#define HCIUARTGETFLAGS _IOR('U', 204, int) #define HCIUARTGETFLAGS _IOR('U', 204, int)
#define CMTPCONNADD _IOW('C', 200, int)
#define CMTPCONNDEL _IOW('C', 201, int)
#define CMTPGETCONNLIST _IOR('C', 210, int)
#define CMTPGETCONNINFO _IOR('C', 211, int)
#define HIDPCONNADD _IOW('H', 200, int) #define HIDPCONNADD _IOW('H', 200, int)
#define HIDPCONNDEL _IOW('H', 201, int) #define HIDPCONNDEL _IOW('H', 201, int)
#define HIDPGETCONNLIST _IOR('H', 210, int) #define HIDPGETCONNLIST _IOR('H', 210, int)
...@@ -1090,10 +1085,6 @@ COMPATIBLE_IOCTL(RFCOMMRELEASEDEV) ...@@ -1090,10 +1085,6 @@ COMPATIBLE_IOCTL(RFCOMMRELEASEDEV)
COMPATIBLE_IOCTL(RFCOMMGETDEVLIST) COMPATIBLE_IOCTL(RFCOMMGETDEVLIST)
COMPATIBLE_IOCTL(RFCOMMGETDEVINFO) COMPATIBLE_IOCTL(RFCOMMGETDEVINFO)
COMPATIBLE_IOCTL(RFCOMMSTEALDLC) COMPATIBLE_IOCTL(RFCOMMSTEALDLC)
COMPATIBLE_IOCTL(CMTPCONNADD)
COMPATIBLE_IOCTL(CMTPCONNDEL)
COMPATIBLE_IOCTL(CMTPGETCONNLIST)
COMPATIBLE_IOCTL(CMTPGETCONNINFO)
COMPATIBLE_IOCTL(HIDPCONNADD) COMPATIBLE_IOCTL(HIDPCONNADD)
COMPATIBLE_IOCTL(HIDPCONNDEL) COMPATIBLE_IOCTL(HIDPCONNDEL)
COMPATIBLE_IOCTL(HIDPGETCONNLIST) COMPATIBLE_IOCTL(HIDPGETCONNLIST)
......
...@@ -63,17 +63,16 @@ static int cmtp_sock_release(struct socket *sock) ...@@ -63,17 +63,16 @@ static int cmtp_sock_release(struct socket *sock)
return 0; return 0;
} }
static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) static int do_cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, void __user *argp)
{ {
struct cmtp_connadd_req ca; struct cmtp_connadd_req ca;
struct cmtp_conndel_req cd; struct cmtp_conndel_req cd;
struct cmtp_connlist_req cl; struct cmtp_connlist_req cl;
struct cmtp_conninfo ci; struct cmtp_conninfo ci;
struct socket *nsock; struct socket *nsock;
void __user *argp = (void __user *)arg;
int err; int err;
BT_DBG("cmd %x arg %lx", cmd, arg); BT_DBG("cmd %x arg %p", cmd, argp);
switch (cmd) { switch (cmd) {
case CMTPCONNADD: case CMTPCONNADD:
...@@ -137,16 +136,22 @@ static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long ...@@ -137,16 +136,22 @@ static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long
return -EINVAL; return -EINVAL;
} }
static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
{
return do_cmtp_sock_ioctl(sock, cmd, (void __user *)arg);
}
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
static int cmtp_sock_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) static int cmtp_sock_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
{ {
void __user *argp = compat_ptr(arg);
if (cmd == CMTPGETCONNLIST) { if (cmd == CMTPGETCONNLIST) {
struct cmtp_connlist_req cl; struct cmtp_connlist_req cl;
u32 __user *p = argp;
u32 uci; u32 uci;
int err; int err;
if (get_user(cl.cnum, (u32 __user *) arg) || if (get_user(cl.cnum, p) || get_user(uci, p + 1))
get_user(uci, (u32 __user *) (arg + 4)))
return -EFAULT; return -EFAULT;
cl.ci = compat_ptr(uci); cl.ci = compat_ptr(uci);
...@@ -156,13 +161,13 @@ static int cmtp_sock_compat_ioctl(struct socket *sock, unsigned int cmd, unsigne ...@@ -156,13 +161,13 @@ static int cmtp_sock_compat_ioctl(struct socket *sock, unsigned int cmd, unsigne
err = cmtp_get_connlist(&cl); err = cmtp_get_connlist(&cl);
if (!err && put_user(cl.cnum, (u32 __user *) arg)) if (!err && put_user(cl.cnum, p))
err = -EFAULT; err = -EFAULT;
return err; return err;
} }
return cmtp_sock_ioctl(sock, cmd, arg); return do_cmtp_sock_ioctl(sock, cmd, argp);
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment