.. | .. |
---|
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, |
---|