| .. | .. |
|---|
| 63 | 63 | return 0; |
|---|
| 64 | 64 | } |
|---|
| 65 | 65 | |
|---|
| 66 | | -static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
|---|
| 66 | +static int do_cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, void __user *argp) |
|---|
| 67 | 67 | { |
|---|
| 68 | 68 | struct cmtp_connadd_req ca; |
|---|
| 69 | 69 | struct cmtp_conndel_req cd; |
|---|
| 70 | 70 | struct cmtp_connlist_req cl; |
|---|
| 71 | 71 | struct cmtp_conninfo ci; |
|---|
| 72 | 72 | struct socket *nsock; |
|---|
| 73 | | - void __user *argp = (void __user *)arg; |
|---|
| 74 | 73 | int err; |
|---|
| 75 | 74 | |
|---|
| 76 | | - BT_DBG("cmd %x arg %lx", cmd, arg); |
|---|
| 75 | + BT_DBG("cmd %x arg %p", cmd, argp); |
|---|
| 77 | 76 | |
|---|
| 78 | 77 | switch (cmd) { |
|---|
| 79 | 78 | case CMTPCONNADD: |
|---|
| .. | .. |
|---|
| 137 | 136 | return -EINVAL; |
|---|
| 138 | 137 | } |
|---|
| 139 | 138 | |
|---|
| 139 | +static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
|---|
| 140 | +{ |
|---|
| 141 | + return do_cmtp_sock_ioctl(sock, cmd, (void __user *)arg); |
|---|
| 142 | +} |
|---|
| 143 | + |
|---|
| 140 | 144 | #ifdef CONFIG_COMPAT |
|---|
| 141 | 145 | static int cmtp_sock_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
|---|
| 142 | 146 | { |
|---|
| 147 | + void __user *argp = compat_ptr(arg); |
|---|
| 143 | 148 | if (cmd == CMTPGETCONNLIST) { |
|---|
| 144 | 149 | struct cmtp_connlist_req cl; |
|---|
| 150 | + u32 __user *p = argp; |
|---|
| 145 | 151 | u32 uci; |
|---|
| 146 | 152 | int err; |
|---|
| 147 | 153 | |
|---|
| 148 | | - if (get_user(cl.cnum, (u32 __user *) arg) || |
|---|
| 149 | | - get_user(uci, (u32 __user *) (arg + 4))) |
|---|
| 154 | + if (get_user(cl.cnum, p) || get_user(uci, p + 1)) |
|---|
| 150 | 155 | return -EFAULT; |
|---|
| 151 | 156 | |
|---|
| 152 | 157 | cl.ci = compat_ptr(uci); |
|---|
| .. | .. |
|---|
| 156 | 161 | |
|---|
| 157 | 162 | err = cmtp_get_connlist(&cl); |
|---|
| 158 | 163 | |
|---|
| 159 | | - if (!err && put_user(cl.cnum, (u32 __user *) arg)) |
|---|
| 164 | + if (!err && put_user(cl.cnum, p)) |
|---|
| 160 | 165 | err = -EFAULT; |
|---|
| 161 | 166 | |
|---|
| 162 | 167 | return err; |
|---|
| 163 | 168 | } |
|---|
| 164 | 169 | |
|---|
| 165 | | - return cmtp_sock_ioctl(sock, cmd, arg); |
|---|
| 170 | + return do_cmtp_sock_ioctl(sock, cmd, argp); |
|---|
| 166 | 171 | } |
|---|
| 167 | 172 | #endif |
|---|
| 168 | 173 | |
|---|
| .. | .. |
|---|
| 180 | 185 | .recvmsg = sock_no_recvmsg, |
|---|
| 181 | 186 | .listen = sock_no_listen, |
|---|
| 182 | 187 | .shutdown = sock_no_shutdown, |
|---|
| 183 | | - .setsockopt = sock_no_setsockopt, |
|---|
| 184 | | - .getsockopt = sock_no_getsockopt, |
|---|
| 185 | 188 | .connect = sock_no_connect, |
|---|
| 186 | 189 | .socketpair = sock_no_socketpair, |
|---|
| 187 | 190 | .accept = sock_no_accept, |
|---|