|
@@ -49,18 +49,17 @@ static int bnep_sock_release(struct socket *sock)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int bnep_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
|
|
+static int do_bnep_sock_ioctl(struct socket *sock, unsigned int cmd, void __user *argp)
|
|
|
{
|
|
|
struct bnep_connlist_req cl;
|
|
|
struct bnep_connadd_req ca;
|
|
|
struct bnep_conndel_req cd;
|
|
|
struct bnep_conninfo ci;
|
|
|
struct socket *nsock;
|
|
|
- void __user *argp = (void __user *)arg;
|
|
|
__u32 supp_feat = BIT(BNEP_SETUP_RESPONSE);
|
|
|
int err;
|
|
|
|
|
|
- BT_DBG("cmd %x arg %lx", cmd, arg);
|
|
|
+ BT_DBG("cmd %x arg %p", cmd, argp);
|
|
|
|
|
|
switch (cmd) {
|
|
|
case BNEPCONNADD:
|
|
@@ -134,16 +133,22 @@ static int bnep_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int bnep_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
|
|
+{
|
|
|
+ return do_bnep_sock_ioctl(sock, cmd, (void __user *)arg);
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_COMPAT
|
|
|
static int bnep_sock_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
|
|
{
|
|
|
+ void __user *argp = compat_ptr(arg);
|
|
|
if (cmd == BNEPGETCONNLIST) {
|
|
|
struct bnep_connlist_req cl;
|
|
|
+ unsigned __user *p = argp;
|
|
|
u32 uci;
|
|
|
int err;
|
|
|
|
|
|
- if (get_user(cl.cnum, (u32 __user *) arg) ||
|
|
|
- get_user(uci, (u32 __user *) (arg + 4)))
|
|
|
+ if (get_user(cl.cnum, p) || get_user(uci, p + 1))
|
|
|
return -EFAULT;
|
|
|
|
|
|
cl.ci = compat_ptr(uci);
|
|
@@ -153,13 +158,13 @@ static int bnep_sock_compat_ioctl(struct socket *sock, unsigned int cmd, unsigne
|
|
|
|
|
|
err = bnep_get_connlist(&cl);
|
|
|
|
|
|
- if (!err && put_user(cl.cnum, (u32 __user *) arg))
|
|
|
+ if (!err && put_user(cl.cnum, p))
|
|
|
err = -EFAULT;
|
|
|
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
- return bnep_sock_ioctl(sock, cmd, arg);
|
|
|
+ return do_bnep_sock_ioctl(sock, cmd, argp);
|
|
|
}
|
|
|
#endif
|
|
|
|