MIPS: Enable ISA_DMA_API config to fix build failure
[pandora-kernel.git] / net / bluetooth / rfcomm / sock.c
1 /*
2    RFCOMM implementation for Linux Bluetooth stack (BlueZ).
3    Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
4    Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License version 2 as
8    published by the Free Software Foundation;
9
10    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
19    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21    SOFTWARE IS DISCLAIMED.
22 */
23
24 /*
25  * RFCOMM sockets.
26  */
27
28 #include <linux/module.h>
29
30 #include <linux/types.h>
31 #include <linux/errno.h>
32 #include <linux/kernel.h>
33 #include <linux/sched.h>
34 #include <linux/slab.h>
35 #include <linux/poll.h>
36 #include <linux/fcntl.h>
37 #include <linux/init.h>
38 #include <linux/interrupt.h>
39 #include <linux/socket.h>
40 #include <linux/skbuff.h>
41 #include <linux/list.h>
42 #include <linux/device.h>
43 #include <linux/debugfs.h>
44 #include <linux/seq_file.h>
45 #include <net/sock.h>
46
47 #include <asm/system.h>
48 #include <asm/uaccess.h>
49
50 #include <net/bluetooth/bluetooth.h>
51 #include <net/bluetooth/hci_core.h>
52 #include <net/bluetooth/l2cap.h>
53 #include <net/bluetooth/rfcomm.h>
54
55 static const struct proto_ops rfcomm_sock_ops;
56
57 static struct bt_sock_list rfcomm_sk_list = {
58         .lock = __RW_LOCK_UNLOCKED(rfcomm_sk_list.lock)
59 };
60
61 static void rfcomm_sock_close(struct sock *sk);
62 static void rfcomm_sock_kill(struct sock *sk);
63
64 /* ---- DLC callbacks ----
65  *
66  * called under rfcomm_dlc_lock()
67  */
68 static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
69 {
70         struct sock *sk = d->owner;
71         if (!sk)
72                 return;
73
74         atomic_add(skb->len, &sk->sk_rmem_alloc);
75         skb_queue_tail(&sk->sk_receive_queue, skb);
76         sk->sk_data_ready(sk, skb->len);
77
78         if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
79                 rfcomm_dlc_throttle(d);
80 }
81
82 static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
83 {
84         struct sock *sk = d->owner, *parent;
85         if (!sk)
86                 return;
87
88         BT_DBG("dlc %p state %ld err %d", d, d->state, err);
89
90         bh_lock_sock(sk);
91
92         if (err)
93                 sk->sk_err = err;
94
95         sk->sk_state = d->state;
96
97         parent = bt_sk(sk)->parent;
98         if (parent) {
99                 if (d->state == BT_CLOSED) {
100                         sock_set_flag(sk, SOCK_ZAPPED);
101                         bt_accept_unlink(sk);
102                 }
103                 parent->sk_data_ready(parent, 0);
104         } else {
105                 if (d->state == BT_CONNECTED)
106                         rfcomm_session_getaddr(d->session, &bt_sk(sk)->src, NULL);
107                 sk->sk_state_change(sk);
108         }
109
110         bh_unlock_sock(sk);
111
112         if (parent && sock_flag(sk, SOCK_ZAPPED)) {
113                 /* We have to drop DLC lock here, otherwise
114                  * rfcomm_sock_destruct() will dead lock. */
115                 rfcomm_dlc_unlock(d);
116                 rfcomm_sock_kill(sk);
117                 rfcomm_dlc_lock(d);
118         }
119 }
120
121 /* ---- Socket functions ---- */
122 static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
123 {
124         struct sock *sk = NULL;
125         struct hlist_node *node;
126
127         sk_for_each(sk, node, &rfcomm_sk_list.head) {
128                 if (rfcomm_pi(sk)->channel == channel &&
129                                 !bacmp(&bt_sk(sk)->src, src))
130                         break;
131         }
132
133         return node ? sk : NULL;
134 }
135
136 /* Find socket with channel and source bdaddr.
137  * Returns closest match.
138  */
139 static struct sock *__rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
140 {
141         struct sock *sk = NULL, *sk1 = NULL;
142         struct hlist_node *node;
143
144         sk_for_each(sk, node, &rfcomm_sk_list.head) {
145                 if (state && sk->sk_state != state)
146                         continue;
147
148                 if (rfcomm_pi(sk)->channel == channel) {
149                         /* Exact match. */
150                         if (!bacmp(&bt_sk(sk)->src, src))
151                                 break;
152
153                         /* Closest match */
154                         if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
155                                 sk1 = sk;
156                 }
157         }
158         return node ? sk : sk1;
159 }
160
161 /* Find socket with given address (channel, src).
162  * Returns locked socket */
163 static inline struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
164 {
165         struct sock *s;
166         read_lock(&rfcomm_sk_list.lock);
167         s = __rfcomm_get_sock_by_channel(state, channel, src);
168         if (s) bh_lock_sock(s);
169         read_unlock(&rfcomm_sk_list.lock);
170         return s;
171 }
172
173 static void rfcomm_sock_destruct(struct sock *sk)
174 {
175         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
176
177         BT_DBG("sk %p dlc %p", sk, d);
178
179         skb_queue_purge(&sk->sk_receive_queue);
180         skb_queue_purge(&sk->sk_write_queue);
181
182         rfcomm_dlc_lock(d);
183         rfcomm_pi(sk)->dlc = NULL;
184
185         /* Detach DLC if it's owned by this socket */
186         if (d->owner == sk)
187                 d->owner = NULL;
188         rfcomm_dlc_unlock(d);
189
190         rfcomm_dlc_put(d);
191 }
192
193 static void rfcomm_sock_cleanup_listen(struct sock *parent)
194 {
195         struct sock *sk;
196
197         BT_DBG("parent %p", parent);
198
199         /* Close not yet accepted dlcs */
200         while ((sk = bt_accept_dequeue(parent, NULL))) {
201                 rfcomm_sock_close(sk);
202                 rfcomm_sock_kill(sk);
203         }
204
205         parent->sk_state  = BT_CLOSED;
206         sock_set_flag(parent, SOCK_ZAPPED);
207 }
208
209 /* Kill socket (only if zapped and orphan)
210  * Must be called on unlocked socket.
211  */
212 static void rfcomm_sock_kill(struct sock *sk)
213 {
214         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
215                 return;
216
217         BT_DBG("sk %p state %d refcnt %d", sk, sk->sk_state, atomic_read(&sk->sk_refcnt));
218
219         /* Kill poor orphan */
220         bt_sock_unlink(&rfcomm_sk_list, sk);
221         sock_set_flag(sk, SOCK_DEAD);
222         sock_put(sk);
223 }
224
225 static void __rfcomm_sock_close(struct sock *sk)
226 {
227         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
228
229         BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
230
231         switch (sk->sk_state) {
232         case BT_LISTEN:
233                 rfcomm_sock_cleanup_listen(sk);
234                 break;
235
236         case BT_CONNECT:
237         case BT_CONNECT2:
238         case BT_CONFIG:
239         case BT_CONNECTED:
240                 rfcomm_dlc_close(d, 0);
241
242         default:
243                 sock_set_flag(sk, SOCK_ZAPPED);
244                 break;
245         }
246 }
247
248 /* Close socket.
249  * Must be called on unlocked socket.
250  */
251 static void rfcomm_sock_close(struct sock *sk)
252 {
253         lock_sock(sk);
254         __rfcomm_sock_close(sk);
255         release_sock(sk);
256 }
257
258 static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
259 {
260         struct rfcomm_pinfo *pi = rfcomm_pi(sk);
261
262         BT_DBG("sk %p", sk);
263
264         if (parent) {
265                 sk->sk_type = parent->sk_type;
266                 pi->dlc->defer_setup = bt_sk(parent)->defer_setup;
267
268                 pi->sec_level = rfcomm_pi(parent)->sec_level;
269                 pi->role_switch = rfcomm_pi(parent)->role_switch;
270         } else {
271                 pi->dlc->defer_setup = 0;
272
273                 pi->sec_level = BT_SECURITY_LOW;
274                 pi->role_switch = 0;
275         }
276
277         pi->dlc->sec_level = pi->sec_level;
278         pi->dlc->role_switch = pi->role_switch;
279 }
280
281 static struct proto rfcomm_proto = {
282         .name           = "RFCOMM",
283         .owner          = THIS_MODULE,
284         .obj_size       = sizeof(struct rfcomm_pinfo)
285 };
286
287 static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
288 {
289         struct rfcomm_dlc *d;
290         struct sock *sk;
291
292         sk = sk_alloc(net, PF_BLUETOOTH, prio, &rfcomm_proto);
293         if (!sk)
294                 return NULL;
295
296         sock_init_data(sock, sk);
297         INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
298
299         d = rfcomm_dlc_alloc(prio);
300         if (!d) {
301                 sk_free(sk);
302                 return NULL;
303         }
304
305         d->data_ready   = rfcomm_sk_data_ready;
306         d->state_change = rfcomm_sk_state_change;
307
308         rfcomm_pi(sk)->dlc = d;
309         d->owner = sk;
310
311         sk->sk_destruct = rfcomm_sock_destruct;
312         sk->sk_sndtimeo = RFCOMM_CONN_TIMEOUT;
313
314         sk->sk_sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
315         sk->sk_rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
316
317         sock_reset_flag(sk, SOCK_ZAPPED);
318
319         sk->sk_protocol = proto;
320         sk->sk_state    = BT_OPEN;
321
322         bt_sock_link(&rfcomm_sk_list, sk);
323
324         BT_DBG("sk %p", sk);
325         return sk;
326 }
327
328 static int rfcomm_sock_create(struct net *net, struct socket *sock,
329                               int protocol, int kern)
330 {
331         struct sock *sk;
332
333         BT_DBG("sock %p", sock);
334
335         sock->state = SS_UNCONNECTED;
336
337         if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
338                 return -ESOCKTNOSUPPORT;
339
340         sock->ops = &rfcomm_sock_ops;
341
342         sk = rfcomm_sock_alloc(net, sock, protocol, GFP_ATOMIC);
343         if (!sk)
344                 return -ENOMEM;
345
346         rfcomm_sock_init(sk, NULL);
347         return 0;
348 }
349
350 static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
351 {
352         struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
353         struct sock *sk = sock->sk;
354         int err = 0;
355
356         BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr));
357
358         if (!addr || addr->sa_family != AF_BLUETOOTH)
359                 return -EINVAL;
360
361         lock_sock(sk);
362
363         if (sk->sk_state != BT_OPEN) {
364                 err = -EBADFD;
365                 goto done;
366         }
367
368         if (sk->sk_type != SOCK_STREAM) {
369                 err = -EINVAL;
370                 goto done;
371         }
372
373         write_lock_bh(&rfcomm_sk_list.lock);
374
375         if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) {
376                 err = -EADDRINUSE;
377         } else {
378                 /* Save source address */
379                 bacpy(&bt_sk(sk)->src, &sa->rc_bdaddr);
380                 rfcomm_pi(sk)->channel = sa->rc_channel;
381                 sk->sk_state = BT_BOUND;
382         }
383
384         write_unlock_bh(&rfcomm_sk_list.lock);
385
386 done:
387         release_sock(sk);
388         return err;
389 }
390
391 static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
392 {
393         struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
394         struct sock *sk = sock->sk;
395         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
396         int err = 0;
397
398         BT_DBG("sk %p", sk);
399
400         if (alen < sizeof(struct sockaddr_rc) ||
401             addr->sa_family != AF_BLUETOOTH)
402                 return -EINVAL;
403
404         lock_sock(sk);
405
406         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
407                 err = -EBADFD;
408                 goto done;
409         }
410
411         if (sk->sk_type != SOCK_STREAM) {
412                 err = -EINVAL;
413                 goto done;
414         }
415
416         sk->sk_state = BT_CONNECT;
417         bacpy(&bt_sk(sk)->dst, &sa->rc_bdaddr);
418         rfcomm_pi(sk)->channel = sa->rc_channel;
419
420         d->sec_level = rfcomm_pi(sk)->sec_level;
421         d->role_switch = rfcomm_pi(sk)->role_switch;
422
423         err = rfcomm_dlc_open(d, &bt_sk(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
424         if (!err)
425                 err = bt_sock_wait_state(sk, BT_CONNECTED,
426                                 sock_sndtimeo(sk, flags & O_NONBLOCK));
427
428 done:
429         release_sock(sk);
430         return err;
431 }
432
433 static int rfcomm_sock_listen(struct socket *sock, int backlog)
434 {
435         struct sock *sk = sock->sk;
436         int err = 0;
437
438         BT_DBG("sk %p backlog %d", sk, backlog);
439
440         lock_sock(sk);
441
442         if (sk->sk_state != BT_BOUND) {
443                 err = -EBADFD;
444                 goto done;
445         }
446
447         if (sk->sk_type != SOCK_STREAM) {
448                 err = -EINVAL;
449                 goto done;
450         }
451
452         if (!rfcomm_pi(sk)->channel) {
453                 bdaddr_t *src = &bt_sk(sk)->src;
454                 u8 channel;
455
456                 err = -EINVAL;
457
458                 write_lock_bh(&rfcomm_sk_list.lock);
459
460                 for (channel = 1; channel < 31; channel++)
461                         if (!__rfcomm_get_sock_by_addr(channel, src)) {
462                                 rfcomm_pi(sk)->channel = channel;
463                                 err = 0;
464                                 break;
465                         }
466
467                 write_unlock_bh(&rfcomm_sk_list.lock);
468
469                 if (err < 0)
470                         goto done;
471         }
472
473         sk->sk_max_ack_backlog = backlog;
474         sk->sk_ack_backlog = 0;
475         sk->sk_state = BT_LISTEN;
476
477 done:
478         release_sock(sk);
479         return err;
480 }
481
482 static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
483 {
484         DECLARE_WAITQUEUE(wait, current);
485         struct sock *sk = sock->sk, *nsk;
486         long timeo;
487         int err = 0;
488
489         lock_sock(sk);
490
491         if (sk->sk_state != BT_LISTEN) {
492                 err = -EBADFD;
493                 goto done;
494         }
495
496         if (sk->sk_type != SOCK_STREAM) {
497                 err = -EINVAL;
498                 goto done;
499         }
500
501         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
502
503         BT_DBG("sk %p timeo %ld", sk, timeo);
504
505         /* Wait for an incoming connection. (wake-one). */
506         add_wait_queue_exclusive(sk_sleep(sk), &wait);
507         while (!(nsk = bt_accept_dequeue(sk, newsock))) {
508                 set_current_state(TASK_INTERRUPTIBLE);
509                 if (!timeo) {
510                         err = -EAGAIN;
511                         break;
512                 }
513
514                 release_sock(sk);
515                 timeo = schedule_timeout(timeo);
516                 lock_sock(sk);
517
518                 if (sk->sk_state != BT_LISTEN) {
519                         err = -EBADFD;
520                         break;
521                 }
522
523                 if (signal_pending(current)) {
524                         err = sock_intr_errno(timeo);
525                         break;
526                 }
527         }
528         set_current_state(TASK_RUNNING);
529         remove_wait_queue(sk_sleep(sk), &wait);
530
531         if (err)
532                 goto done;
533
534         newsock->state = SS_CONNECTED;
535
536         BT_DBG("new socket %p", nsk);
537
538 done:
539         release_sock(sk);
540         return err;
541 }
542
543 static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
544 {
545         struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
546         struct sock *sk = sock->sk;
547
548         BT_DBG("sock %p, sk %p", sock, sk);
549
550         sa->rc_family  = AF_BLUETOOTH;
551         sa->rc_channel = rfcomm_pi(sk)->channel;
552         if (peer)
553                 bacpy(&sa->rc_bdaddr, &bt_sk(sk)->dst);
554         else
555                 bacpy(&sa->rc_bdaddr, &bt_sk(sk)->src);
556
557         *len = sizeof(struct sockaddr_rc);
558         return 0;
559 }
560
561 static int rfcomm_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
562                                struct msghdr *msg, size_t len)
563 {
564         struct sock *sk = sock->sk;
565         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
566         struct sk_buff *skb;
567         int sent = 0;
568
569         if (test_bit(RFCOMM_DEFER_SETUP, &d->flags))
570                 return -ENOTCONN;
571
572         if (msg->msg_flags & MSG_OOB)
573                 return -EOPNOTSUPP;
574
575         if (sk->sk_shutdown & SEND_SHUTDOWN)
576                 return -EPIPE;
577
578         BT_DBG("sock %p, sk %p", sock, sk);
579
580         lock_sock(sk);
581
582         while (len) {
583                 size_t size = min_t(size_t, len, d->mtu);
584                 int err;
585
586                 skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
587                                 msg->msg_flags & MSG_DONTWAIT, &err);
588                 if (!skb) {
589                         if (sent == 0)
590                                 sent = err;
591                         break;
592                 }
593                 skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
594
595                 err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
596                 if (err) {
597                         kfree_skb(skb);
598                         if (sent == 0)
599                                 sent = err;
600                         break;
601                 }
602
603                 err = rfcomm_dlc_send(d, skb);
604                 if (err < 0) {
605                         kfree_skb(skb);
606                         if (sent == 0)
607                                 sent = err;
608                         break;
609                 }
610
611                 sent += size;
612                 len  -= size;
613         }
614
615         release_sock(sk);
616
617         return sent;
618 }
619
620 static long rfcomm_sock_data_wait(struct sock *sk, long timeo)
621 {
622         DECLARE_WAITQUEUE(wait, current);
623
624         add_wait_queue(sk_sleep(sk), &wait);
625         for (;;) {
626                 set_current_state(TASK_INTERRUPTIBLE);
627
628                 if (!skb_queue_empty(&sk->sk_receive_queue) ||
629                     sk->sk_err ||
630                     (sk->sk_shutdown & RCV_SHUTDOWN) ||
631                     signal_pending(current) ||
632                     !timeo)
633                         break;
634
635                 set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
636                 release_sock(sk);
637                 timeo = schedule_timeout(timeo);
638                 lock_sock(sk);
639                 clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
640         }
641
642         __set_current_state(TASK_RUNNING);
643         remove_wait_queue(sk_sleep(sk), &wait);
644         return timeo;
645 }
646
647 static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
648                                struct msghdr *msg, size_t size, int flags)
649 {
650         struct sock *sk = sock->sk;
651         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
652         int err = 0;
653         size_t target, copied = 0;
654         long timeo;
655
656         if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
657                 rfcomm_dlc_accept(d);
658                 return 0;
659         }
660
661         if (flags & MSG_OOB)
662                 return -EOPNOTSUPP;
663
664         msg->msg_namelen = 0;
665
666         BT_DBG("sk %p size %zu", sk, size);
667
668         lock_sock(sk);
669
670         target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
671         timeo  = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
672
673         do {
674                 struct sk_buff *skb;
675                 int chunk;
676
677                 skb = skb_dequeue(&sk->sk_receive_queue);
678                 if (!skb) {
679                         if (copied >= target)
680                                 break;
681
682                         if ((err = sock_error(sk)) != 0)
683                                 break;
684                         if (sk->sk_shutdown & RCV_SHUTDOWN)
685                                 break;
686
687                         err = -EAGAIN;
688                         if (!timeo)
689                                 break;
690
691                         timeo = rfcomm_sock_data_wait(sk, timeo);
692
693                         if (signal_pending(current)) {
694                                 err = sock_intr_errno(timeo);
695                                 goto out;
696                         }
697                         continue;
698                 }
699
700                 chunk = min_t(unsigned int, skb->len, size);
701                 if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
702                         skb_queue_head(&sk->sk_receive_queue, skb);
703                         if (!copied)
704                                 copied = -EFAULT;
705                         break;
706                 }
707                 copied += chunk;
708                 size   -= chunk;
709
710                 sock_recv_ts_and_drops(msg, sk, skb);
711
712                 if (!(flags & MSG_PEEK)) {
713                         atomic_sub(chunk, &sk->sk_rmem_alloc);
714
715                         skb_pull(skb, chunk);
716                         if (skb->len) {
717                                 skb_queue_head(&sk->sk_receive_queue, skb);
718                                 break;
719                         }
720                         kfree_skb(skb);
721
722                 } else {
723                         /* put message back and return */
724                         skb_queue_head(&sk->sk_receive_queue, skb);
725                         break;
726                 }
727         } while (size);
728
729 out:
730         if (atomic_read(&sk->sk_rmem_alloc) <= (sk->sk_rcvbuf >> 2))
731                 rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
732
733         release_sock(sk);
734         return copied ? : err;
735 }
736
737 static int rfcomm_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
738 {
739         struct sock *sk = sock->sk;
740         int err = 0;
741         u32 opt;
742
743         BT_DBG("sk %p", sk);
744
745         lock_sock(sk);
746
747         switch (optname) {
748         case RFCOMM_LM:
749                 if (get_user(opt, (u32 __user *) optval)) {
750                         err = -EFAULT;
751                         break;
752                 }
753
754                 if (opt & RFCOMM_LM_AUTH)
755                         rfcomm_pi(sk)->sec_level = BT_SECURITY_LOW;
756                 if (opt & RFCOMM_LM_ENCRYPT)
757                         rfcomm_pi(sk)->sec_level = BT_SECURITY_MEDIUM;
758                 if (opt & RFCOMM_LM_SECURE)
759                         rfcomm_pi(sk)->sec_level = BT_SECURITY_HIGH;
760
761                 rfcomm_pi(sk)->role_switch = (opt & RFCOMM_LM_MASTER);
762                 break;
763
764         default:
765                 err = -ENOPROTOOPT;
766                 break;
767         }
768
769         release_sock(sk);
770         return err;
771 }
772
773 static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
774 {
775         struct sock *sk = sock->sk;
776         struct bt_security sec;
777         int len, err = 0;
778         u32 opt;
779
780         BT_DBG("sk %p", sk);
781
782         if (level == SOL_RFCOMM)
783                 return rfcomm_sock_setsockopt_old(sock, optname, optval, optlen);
784
785         if (level != SOL_BLUETOOTH)
786                 return -ENOPROTOOPT;
787
788         lock_sock(sk);
789
790         switch (optname) {
791         case BT_SECURITY:
792                 if (sk->sk_type != SOCK_STREAM) {
793                         err = -EINVAL;
794                         break;
795                 }
796
797                 sec.level = BT_SECURITY_LOW;
798
799                 len = min_t(unsigned int, sizeof(sec), optlen);
800                 if (copy_from_user((char *) &sec, optval, len)) {
801                         err = -EFAULT;
802                         break;
803                 }
804
805                 if (sec.level > BT_SECURITY_HIGH) {
806                         err = -EINVAL;
807                         break;
808                 }
809
810                 rfcomm_pi(sk)->sec_level = sec.level;
811                 break;
812
813         case BT_DEFER_SETUP:
814                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
815                         err = -EINVAL;
816                         break;
817                 }
818
819                 if (get_user(opt, (u32 __user *) optval)) {
820                         err = -EFAULT;
821                         break;
822                 }
823
824                 bt_sk(sk)->defer_setup = opt;
825                 break;
826
827         default:
828                 err = -ENOPROTOOPT;
829                 break;
830         }
831
832         release_sock(sk);
833         return err;
834 }
835
836 static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
837 {
838         struct sock *sk = sock->sk;
839         struct sock *l2cap_sk;
840         struct rfcomm_conninfo cinfo;
841         int len, err = 0;
842         u32 opt;
843
844         BT_DBG("sk %p", sk);
845
846         if (get_user(len, optlen))
847                 return -EFAULT;
848
849         lock_sock(sk);
850
851         switch (optname) {
852         case RFCOMM_LM:
853                 switch (rfcomm_pi(sk)->sec_level) {
854                 case BT_SECURITY_LOW:
855                         opt = RFCOMM_LM_AUTH;
856                         break;
857                 case BT_SECURITY_MEDIUM:
858                         opt = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT;
859                         break;
860                 case BT_SECURITY_HIGH:
861                         opt = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT |
862                                                         RFCOMM_LM_SECURE;
863                         break;
864                 default:
865                         opt = 0;
866                         break;
867                 }
868
869                 if (rfcomm_pi(sk)->role_switch)
870                         opt |= RFCOMM_LM_MASTER;
871
872                 if (put_user(opt, (u32 __user *) optval))
873                         err = -EFAULT;
874                 break;
875
876         case RFCOMM_CONNINFO:
877                 if (sk->sk_state != BT_CONNECTED &&
878                                         !rfcomm_pi(sk)->dlc->defer_setup) {
879                         err = -ENOTCONN;
880                         break;
881                 }
882
883                 l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk;
884
885                 cinfo.hci_handle = l2cap_pi(l2cap_sk)->conn->hcon->handle;
886                 memcpy(cinfo.dev_class, l2cap_pi(l2cap_sk)->conn->hcon->dev_class, 3);
887
888                 len = min_t(unsigned int, len, sizeof(cinfo));
889                 if (copy_to_user(optval, (char *) &cinfo, len))
890                         err = -EFAULT;
891
892                 break;
893
894         default:
895                 err = -ENOPROTOOPT;
896                 break;
897         }
898
899         release_sock(sk);
900         return err;
901 }
902
903 static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
904 {
905         struct sock *sk = sock->sk;
906         struct bt_security sec;
907         int len, err = 0;
908
909         BT_DBG("sk %p", sk);
910
911         if (level == SOL_RFCOMM)
912                 return rfcomm_sock_getsockopt_old(sock, optname, optval, optlen);
913
914         if (level != SOL_BLUETOOTH)
915                 return -ENOPROTOOPT;
916
917         if (get_user(len, optlen))
918                 return -EFAULT;
919
920         lock_sock(sk);
921
922         switch (optname) {
923         case BT_SECURITY:
924                 if (sk->sk_type != SOCK_STREAM) {
925                         err = -EINVAL;
926                         break;
927                 }
928
929                 sec.level = rfcomm_pi(sk)->sec_level;
930
931                 len = min_t(unsigned int, len, sizeof(sec));
932                 if (copy_to_user(optval, (char *) &sec, len))
933                         err = -EFAULT;
934
935                 break;
936
937         case BT_DEFER_SETUP:
938                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
939                         err = -EINVAL;
940                         break;
941                 }
942
943                 if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
944                         err = -EFAULT;
945
946                 break;
947
948         default:
949                 err = -ENOPROTOOPT;
950                 break;
951         }
952
953         release_sock(sk);
954         return err;
955 }
956
957 static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
958 {
959         struct sock *sk __maybe_unused = sock->sk;
960         int err;
961
962         BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
963
964         err = bt_sock_ioctl(sock, cmd, arg);
965
966         if (err == -ENOIOCTLCMD) {
967 #ifdef CONFIG_BT_RFCOMM_TTY
968                 lock_sock(sk);
969                 err = rfcomm_dev_ioctl(sk, cmd, (void __user *) arg);
970                 release_sock(sk);
971 #else
972                 err = -EOPNOTSUPP;
973 #endif
974         }
975
976         return err;
977 }
978
979 static int rfcomm_sock_shutdown(struct socket *sock, int how)
980 {
981         struct sock *sk = sock->sk;
982         int err = 0;
983
984         BT_DBG("sock %p, sk %p", sock, sk);
985
986         if (!sk) return 0;
987
988         lock_sock(sk);
989         if (!sk->sk_shutdown) {
990                 sk->sk_shutdown = SHUTDOWN_MASK;
991                 __rfcomm_sock_close(sk);
992
993                 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
994                         err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
995         }
996         release_sock(sk);
997         return err;
998 }
999
1000 static int rfcomm_sock_release(struct socket *sock)
1001 {
1002         struct sock *sk = sock->sk;
1003         int err;
1004
1005         BT_DBG("sock %p, sk %p", sock, sk);
1006
1007         if (!sk)
1008                 return 0;
1009
1010         err = rfcomm_sock_shutdown(sock, 2);
1011
1012         sock_orphan(sk);
1013         rfcomm_sock_kill(sk);
1014         return err;
1015 }
1016
1017 /* ---- RFCOMM core layer callbacks ----
1018  *
1019  * called under rfcomm_lock()
1020  */
1021 int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
1022 {
1023         struct sock *sk, *parent;
1024         bdaddr_t src, dst;
1025         int result = 0;
1026
1027         BT_DBG("session %p channel %d", s, channel);
1028
1029         rfcomm_session_getaddr(s, &src, &dst);
1030
1031         /* Check if we have socket listening on channel */
1032         parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
1033         if (!parent)
1034                 return 0;
1035
1036         /* Check for backlog size */
1037         if (sk_acceptq_is_full(parent)) {
1038                 BT_DBG("backlog full %d", parent->sk_ack_backlog);
1039                 goto done;
1040         }
1041
1042         sk = rfcomm_sock_alloc(sock_net(parent), NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
1043         if (!sk)
1044                 goto done;
1045
1046         rfcomm_sock_init(sk, parent);
1047         bacpy(&bt_sk(sk)->src, &src);
1048         bacpy(&bt_sk(sk)->dst, &dst);
1049         rfcomm_pi(sk)->channel = channel;
1050
1051         sk->sk_state = BT_CONFIG;
1052         bt_accept_enqueue(parent, sk);
1053
1054         /* Accept connection and return socket DLC */
1055         *d = rfcomm_pi(sk)->dlc;
1056         result = 1;
1057
1058 done:
1059         bh_unlock_sock(parent);
1060
1061         if (bt_sk(parent)->defer_setup)
1062                 parent->sk_state_change(parent);
1063
1064         return result;
1065 }
1066
1067 static int rfcomm_sock_debugfs_show(struct seq_file *f, void *p)
1068 {
1069         struct sock *sk;
1070         struct hlist_node *node;
1071
1072         read_lock_bh(&rfcomm_sk_list.lock);
1073
1074         sk_for_each(sk, node, &rfcomm_sk_list.head) {
1075                 seq_printf(f, "%s %s %d %d\n",
1076                                 batostr(&bt_sk(sk)->src),
1077                                 batostr(&bt_sk(sk)->dst),
1078                                 sk->sk_state, rfcomm_pi(sk)->channel);
1079         }
1080
1081         read_unlock_bh(&rfcomm_sk_list.lock);
1082
1083         return 0;
1084 }
1085
1086 static int rfcomm_sock_debugfs_open(struct inode *inode, struct file *file)
1087 {
1088         return single_open(file, rfcomm_sock_debugfs_show, inode->i_private);
1089 }
1090
1091 static const struct file_operations rfcomm_sock_debugfs_fops = {
1092         .open           = rfcomm_sock_debugfs_open,
1093         .read           = seq_read,
1094         .llseek         = seq_lseek,
1095         .release        = single_release,
1096 };
1097
1098 static struct dentry *rfcomm_sock_debugfs;
1099
1100 static const struct proto_ops rfcomm_sock_ops = {
1101         .family         = PF_BLUETOOTH,
1102         .owner          = THIS_MODULE,
1103         .release        = rfcomm_sock_release,
1104         .bind           = rfcomm_sock_bind,
1105         .connect        = rfcomm_sock_connect,
1106         .listen         = rfcomm_sock_listen,
1107         .accept         = rfcomm_sock_accept,
1108         .getname        = rfcomm_sock_getname,
1109         .sendmsg        = rfcomm_sock_sendmsg,
1110         .recvmsg        = rfcomm_sock_recvmsg,
1111         .shutdown       = rfcomm_sock_shutdown,
1112         .setsockopt     = rfcomm_sock_setsockopt,
1113         .getsockopt     = rfcomm_sock_getsockopt,
1114         .ioctl          = rfcomm_sock_ioctl,
1115         .poll           = bt_sock_poll,
1116         .socketpair     = sock_no_socketpair,
1117         .mmap           = sock_no_mmap
1118 };
1119
1120 static const struct net_proto_family rfcomm_sock_family_ops = {
1121         .family         = PF_BLUETOOTH,
1122         .owner          = THIS_MODULE,
1123         .create         = rfcomm_sock_create
1124 };
1125
1126 int __init rfcomm_init_sockets(void)
1127 {
1128         int err;
1129
1130         err = proto_register(&rfcomm_proto, 0);
1131         if (err < 0)
1132                 return err;
1133
1134         err = bt_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops);
1135         if (err < 0)
1136                 goto error;
1137
1138         if (bt_debugfs) {
1139                 rfcomm_sock_debugfs = debugfs_create_file("rfcomm", 0444,
1140                                 bt_debugfs, NULL, &rfcomm_sock_debugfs_fops);
1141                 if (!rfcomm_sock_debugfs)
1142                         BT_ERR("Failed to create RFCOMM debug file");
1143         }
1144
1145         BT_INFO("RFCOMM socket layer initialized");
1146
1147         return 0;
1148
1149 error:
1150         BT_ERR("RFCOMM socket layer registration failed");
1151         proto_unregister(&rfcomm_proto);
1152         return err;
1153 }
1154
1155 void __exit rfcomm_cleanup_sockets(void)
1156 {
1157         debugfs_remove(rfcomm_sock_debugfs);
1158
1159         if (bt_sock_unregister(BTPROTO_RFCOMM) < 0)
1160                 BT_ERR("RFCOMM socket layer unregistration failed");
1161
1162         proto_unregister(&rfcomm_proto);
1163 }