Merge branch 'x86/crashdump' into x86/urgent
[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 <net/sock.h>
44
45 #include <asm/system.h>
46 #include <asm/uaccess.h>
47
48 #include <net/bluetooth/bluetooth.h>
49 #include <net/bluetooth/hci_core.h>
50 #include <net/bluetooth/l2cap.h>
51 #include <net/bluetooth/rfcomm.h>
52
53 #ifndef CONFIG_BT_RFCOMM_DEBUG
54 #undef  BT_DBG
55 #define BT_DBG(D...)
56 #endif
57
58 static const struct proto_ops rfcomm_sock_ops;
59
60 static struct bt_sock_list rfcomm_sk_list = {
61         .lock = __RW_LOCK_UNLOCKED(rfcomm_sk_list.lock)
62 };
63
64 static void rfcomm_sock_close(struct sock *sk);
65 static void rfcomm_sock_kill(struct sock *sk);
66
67 /* ---- DLC callbacks ----
68  *
69  * called under rfcomm_dlc_lock()
70  */
71 static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
72 {
73         struct sock *sk = d->owner;
74         if (!sk)
75                 return;
76
77         atomic_add(skb->len, &sk->sk_rmem_alloc);
78         skb_queue_tail(&sk->sk_receive_queue, skb);
79         sk->sk_data_ready(sk, skb->len);
80
81         if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
82                 rfcomm_dlc_throttle(d);
83 }
84
85 static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
86 {
87         struct sock *sk = d->owner, *parent;
88         if (!sk)
89                 return;
90
91         BT_DBG("dlc %p state %ld err %d", d, d->state, err);
92
93         bh_lock_sock(sk);
94
95         if (err)
96                 sk->sk_err = err;
97
98         sk->sk_state = d->state;
99
100         parent = bt_sk(sk)->parent;
101         if (parent) {
102                 if (d->state == BT_CLOSED) {
103                         sock_set_flag(sk, SOCK_ZAPPED);
104                         bt_accept_unlink(sk);
105                 }
106                 parent->sk_data_ready(parent, 0);
107         } else {
108                 if (d->state == BT_CONNECTED)
109                         rfcomm_session_getaddr(d->session, &bt_sk(sk)->src, NULL);
110                 sk->sk_state_change(sk);
111         }
112
113         bh_unlock_sock(sk);
114
115         if (parent && sock_flag(sk, SOCK_ZAPPED)) {
116                 /* We have to drop DLC lock here, otherwise
117                  * rfcomm_sock_destruct() will dead lock. */
118                 rfcomm_dlc_unlock(d);
119                 rfcomm_sock_kill(sk);
120                 rfcomm_dlc_lock(d);
121         }
122 }
123
124 /* ---- Socket functions ---- */
125 static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
126 {
127         struct sock *sk = NULL;
128         struct hlist_node *node;
129
130         sk_for_each(sk, node, &rfcomm_sk_list.head) {
131                 if (rfcomm_pi(sk)->channel == channel &&
132                                 !bacmp(&bt_sk(sk)->src, src))
133                         break;
134         }
135
136         return node ? sk : NULL;
137 }
138
139 /* Find socket with channel and source bdaddr.
140  * Returns closest match.
141  */
142 static struct sock *__rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
143 {
144         struct sock *sk = NULL, *sk1 = NULL;
145         struct hlist_node *node;
146
147         sk_for_each(sk, node, &rfcomm_sk_list.head) {
148                 if (state && sk->sk_state != state)
149                         continue;
150
151                 if (rfcomm_pi(sk)->channel == channel) {
152                         /* Exact match. */
153                         if (!bacmp(&bt_sk(sk)->src, src))
154                                 break;
155
156                         /* Closest match */
157                         if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
158                                 sk1 = sk;
159                 }
160         }
161         return node ? sk : sk1;
162 }
163
164 /* Find socket with given address (channel, src).
165  * Returns locked socket */
166 static inline struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
167 {
168         struct sock *s;
169         read_lock(&rfcomm_sk_list.lock);
170         s = __rfcomm_get_sock_by_channel(state, channel, src);
171         if (s) bh_lock_sock(s);
172         read_unlock(&rfcomm_sk_list.lock);
173         return s;
174 }
175
176 static void rfcomm_sock_destruct(struct sock *sk)
177 {
178         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
179
180         BT_DBG("sk %p dlc %p", sk, d);
181
182         skb_queue_purge(&sk->sk_receive_queue);
183         skb_queue_purge(&sk->sk_write_queue);
184
185         rfcomm_dlc_lock(d);
186         rfcomm_pi(sk)->dlc = NULL;
187
188         /* Detach DLC if it's owned by this socket */
189         if (d->owner == sk)
190                 d->owner = NULL;
191         rfcomm_dlc_unlock(d);
192
193         rfcomm_dlc_put(d);
194 }
195
196 static void rfcomm_sock_cleanup_listen(struct sock *parent)
197 {
198         struct sock *sk;
199
200         BT_DBG("parent %p", parent);
201
202         /* Close not yet accepted dlcs */
203         while ((sk = bt_accept_dequeue(parent, NULL))) {
204                 rfcomm_sock_close(sk);
205                 rfcomm_sock_kill(sk);
206         }
207
208         parent->sk_state  = BT_CLOSED;
209         sock_set_flag(parent, SOCK_ZAPPED);
210 }
211
212 /* Kill socket (only if zapped and orphan)
213  * Must be called on unlocked socket.
214  */
215 static void rfcomm_sock_kill(struct sock *sk)
216 {
217         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
218                 return;
219
220         BT_DBG("sk %p state %d refcnt %d", sk, sk->sk_state, atomic_read(&sk->sk_refcnt));
221
222         /* Kill poor orphan */
223         bt_sock_unlink(&rfcomm_sk_list, sk);
224         sock_set_flag(sk, SOCK_DEAD);
225         sock_put(sk);
226 }
227
228 static void __rfcomm_sock_close(struct sock *sk)
229 {
230         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
231
232         BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
233
234         switch (sk->sk_state) {
235         case BT_LISTEN:
236                 rfcomm_sock_cleanup_listen(sk);
237                 break;
238
239         case BT_CONNECT:
240         case BT_CONNECT2:
241         case BT_CONFIG:
242         case BT_CONNECTED:
243                 rfcomm_dlc_close(d, 0);
244
245         default:
246                 sock_set_flag(sk, SOCK_ZAPPED);
247                 break;
248         }
249 }
250
251 /* Close socket.
252  * Must be called on unlocked socket.
253  */
254 static void rfcomm_sock_close(struct sock *sk)
255 {
256         lock_sock(sk);
257         __rfcomm_sock_close(sk);
258         release_sock(sk);
259 }
260
261 static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
262 {
263         struct rfcomm_pinfo *pi = rfcomm_pi(sk);
264
265         BT_DBG("sk %p", sk);
266
267         if (parent) {
268                 sk->sk_type = parent->sk_type;
269                 pi->link_mode = rfcomm_pi(parent)->link_mode;
270         } else {
271                 pi->link_mode = 0;
272         }
273
274         pi->dlc->link_mode = pi->link_mode;
275 }
276
277 static struct proto rfcomm_proto = {
278         .name           = "RFCOMM",
279         .owner          = THIS_MODULE,
280         .obj_size       = sizeof(struct rfcomm_pinfo)
281 };
282
283 static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
284 {
285         struct rfcomm_dlc *d;
286         struct sock *sk;
287
288         sk = sk_alloc(net, PF_BLUETOOTH, prio, &rfcomm_proto);
289         if (!sk)
290                 return NULL;
291
292         sock_init_data(sock, sk);
293         INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
294
295         d = rfcomm_dlc_alloc(prio);
296         if (!d) {
297                 sk_free(sk);
298                 return NULL;
299         }
300
301         d->data_ready   = rfcomm_sk_data_ready;
302         d->state_change = rfcomm_sk_state_change;
303
304         rfcomm_pi(sk)->dlc = d;
305         d->owner = sk;
306
307         sk->sk_destruct = rfcomm_sock_destruct;
308         sk->sk_sndtimeo = RFCOMM_CONN_TIMEOUT;
309
310         sk->sk_sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
311         sk->sk_rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
312
313         sock_reset_flag(sk, SOCK_ZAPPED);
314
315         sk->sk_protocol = proto;
316         sk->sk_state    = BT_OPEN;
317
318         bt_sock_link(&rfcomm_sk_list, sk);
319
320         BT_DBG("sk %p", sk);
321         return sk;
322 }
323
324 static int rfcomm_sock_create(struct net *net, struct socket *sock, int protocol)
325 {
326         struct sock *sk;
327
328         BT_DBG("sock %p", sock);
329
330         sock->state = SS_UNCONNECTED;
331
332         if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
333                 return -ESOCKTNOSUPPORT;
334
335         sock->ops = &rfcomm_sock_ops;
336
337         sk = rfcomm_sock_alloc(net, sock, protocol, GFP_ATOMIC);
338         if (!sk)
339                 return -ENOMEM;
340
341         rfcomm_sock_init(sk, NULL);
342         return 0;
343 }
344
345 static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
346 {
347         struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
348         struct sock *sk = sock->sk;
349         int err = 0;
350
351         BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr));
352
353         if (!addr || addr->sa_family != AF_BLUETOOTH)
354                 return -EINVAL;
355
356         lock_sock(sk);
357
358         if (sk->sk_state != BT_OPEN) {
359                 err = -EBADFD;
360                 goto done;
361         }
362
363         if (sk->sk_type != SOCK_STREAM) {
364                 err = -EINVAL;
365                 goto done;
366         }
367
368         write_lock_bh(&rfcomm_sk_list.lock);
369
370         if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) {
371                 err = -EADDRINUSE;
372         } else {
373                 /* Save source address */
374                 bacpy(&bt_sk(sk)->src, &sa->rc_bdaddr);
375                 rfcomm_pi(sk)->channel = sa->rc_channel;
376                 sk->sk_state = BT_BOUND;
377         }
378
379         write_unlock_bh(&rfcomm_sk_list.lock);
380
381 done:
382         release_sock(sk);
383         return err;
384 }
385
386 static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
387 {
388         struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
389         struct sock *sk = sock->sk;
390         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
391         int err = 0;
392
393         BT_DBG("sk %p", sk);
394
395         if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_rc))
396                 return -EINVAL;
397
398         lock_sock(sk);
399
400         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
401                 err = -EBADFD;
402                 goto done;
403         }
404
405         if (sk->sk_type != SOCK_STREAM) {
406                 err = -EINVAL;
407                 goto done;
408         }
409
410         sk->sk_state = BT_CONNECT;
411         bacpy(&bt_sk(sk)->dst, &sa->rc_bdaddr);
412         rfcomm_pi(sk)->channel = sa->rc_channel;
413
414         d->link_mode = rfcomm_pi(sk)->link_mode;
415
416         err = rfcomm_dlc_open(d, &bt_sk(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
417         if (!err)
418                 err = bt_sock_wait_state(sk, BT_CONNECTED,
419                                 sock_sndtimeo(sk, flags & O_NONBLOCK));
420
421 done:
422         release_sock(sk);
423         return err;
424 }
425
426 static int rfcomm_sock_listen(struct socket *sock, int backlog)
427 {
428         struct sock *sk = sock->sk;
429         int err = 0;
430
431         BT_DBG("sk %p backlog %d", sk, backlog);
432
433         lock_sock(sk);
434
435         if (sk->sk_state != BT_BOUND) {
436                 err = -EBADFD;
437                 goto done;
438         }
439
440         if (sk->sk_type != SOCK_STREAM) {
441                 err = -EINVAL;
442                 goto done;
443         }
444
445         if (!rfcomm_pi(sk)->channel) {
446                 bdaddr_t *src = &bt_sk(sk)->src;
447                 u8 channel;
448
449                 err = -EINVAL;
450
451                 write_lock_bh(&rfcomm_sk_list.lock);
452
453                 for (channel = 1; channel < 31; channel++)
454                         if (!__rfcomm_get_sock_by_addr(channel, src)) {
455                                 rfcomm_pi(sk)->channel = channel;
456                                 err = 0;
457                                 break;
458                         }
459
460                 write_unlock_bh(&rfcomm_sk_list.lock);
461
462                 if (err < 0)
463                         goto done;
464         }
465
466         sk->sk_max_ack_backlog = backlog;
467         sk->sk_ack_backlog = 0;
468         sk->sk_state = BT_LISTEN;
469
470 done:
471         release_sock(sk);
472         return err;
473 }
474
475 static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
476 {
477         DECLARE_WAITQUEUE(wait, current);
478         struct sock *sk = sock->sk, *nsk;
479         long timeo;
480         int err = 0;
481
482         lock_sock(sk);
483
484         if (sk->sk_state != BT_LISTEN) {
485                 err = -EBADFD;
486                 goto done;
487         }
488
489         if (sk->sk_type != SOCK_STREAM) {
490                 err = -EINVAL;
491                 goto done;
492         }
493
494         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
495
496         BT_DBG("sk %p timeo %ld", sk, timeo);
497
498         /* Wait for an incoming connection. (wake-one). */
499         add_wait_queue_exclusive(sk->sk_sleep, &wait);
500         while (!(nsk = bt_accept_dequeue(sk, newsock))) {
501                 set_current_state(TASK_INTERRUPTIBLE);
502                 if (!timeo) {
503                         err = -EAGAIN;
504                         break;
505                 }
506
507                 release_sock(sk);
508                 timeo = schedule_timeout(timeo);
509                 lock_sock(sk);
510
511                 if (sk->sk_state != BT_LISTEN) {
512                         err = -EBADFD;
513                         break;
514                 }
515
516                 if (signal_pending(current)) {
517                         err = sock_intr_errno(timeo);
518                         break;
519                 }
520         }
521         set_current_state(TASK_RUNNING);
522         remove_wait_queue(sk->sk_sleep, &wait);
523
524         if (err)
525                 goto done;
526
527         newsock->state = SS_CONNECTED;
528
529         BT_DBG("new socket %p", nsk);
530
531 done:
532         release_sock(sk);
533         return err;
534 }
535
536 static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
537 {
538         struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
539         struct sock *sk = sock->sk;
540
541         BT_DBG("sock %p, sk %p", sock, sk);
542
543         sa->rc_family  = AF_BLUETOOTH;
544         sa->rc_channel = rfcomm_pi(sk)->channel;
545         if (peer)
546                 bacpy(&sa->rc_bdaddr, &bt_sk(sk)->dst);
547         else
548                 bacpy(&sa->rc_bdaddr, &bt_sk(sk)->src);
549
550         *len = sizeof(struct sockaddr_rc);
551         return 0;
552 }
553
554 static int rfcomm_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
555                                struct msghdr *msg, size_t len)
556 {
557         struct sock *sk = sock->sk;
558         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
559         struct sk_buff *skb;
560         int sent = 0;
561
562         if (msg->msg_flags & MSG_OOB)
563                 return -EOPNOTSUPP;
564
565         if (sk->sk_shutdown & SEND_SHUTDOWN)
566                 return -EPIPE;
567
568         BT_DBG("sock %p, sk %p", sock, sk);
569
570         lock_sock(sk);
571
572         while (len) {
573                 size_t size = min_t(size_t, len, d->mtu);
574                 int err;
575
576                 skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
577                                 msg->msg_flags & MSG_DONTWAIT, &err);
578                 if (!skb)
579                         break;
580                 skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
581
582                 err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
583                 if (err) {
584                         kfree_skb(skb);
585                         if (sent == 0)
586                                 sent = err;
587                         break;
588                 }
589
590                 err = rfcomm_dlc_send(d, skb);
591                 if (err < 0) {
592                         kfree_skb(skb);
593                         if (sent == 0)
594                                 sent = err;
595                         break;
596                 }
597
598                 sent += size;
599                 len  -= size;
600         }
601
602         release_sock(sk);
603
604         return sent;
605 }
606
607 static long rfcomm_sock_data_wait(struct sock *sk, long timeo)
608 {
609         DECLARE_WAITQUEUE(wait, current);
610
611         add_wait_queue(sk->sk_sleep, &wait);
612         for (;;) {
613                 set_current_state(TASK_INTERRUPTIBLE);
614
615                 if (!skb_queue_empty(&sk->sk_receive_queue) ||
616                     sk->sk_err ||
617                     (sk->sk_shutdown & RCV_SHUTDOWN) ||
618                     signal_pending(current) ||
619                     !timeo)
620                         break;
621
622                 set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
623                 release_sock(sk);
624                 timeo = schedule_timeout(timeo);
625                 lock_sock(sk);
626                 clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
627         }
628
629         __set_current_state(TASK_RUNNING);
630         remove_wait_queue(sk->sk_sleep, &wait);
631         return timeo;
632 }
633
634 static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
635                                struct msghdr *msg, size_t size, int flags)
636 {
637         struct sock *sk = sock->sk;
638         int err = 0;
639         size_t target, copied = 0;
640         long timeo;
641
642         if (flags & MSG_OOB)
643                 return -EOPNOTSUPP;
644
645         msg->msg_namelen = 0;
646
647         BT_DBG("sk %p size %d", sk, size);
648
649         lock_sock(sk);
650
651         target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
652         timeo  = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
653
654         do {
655                 struct sk_buff *skb;
656                 int chunk;
657
658                 skb = skb_dequeue(&sk->sk_receive_queue);
659                 if (!skb) {
660                         if (copied >= target)
661                                 break;
662
663                         if ((err = sock_error(sk)) != 0)
664                                 break;
665                         if (sk->sk_shutdown & RCV_SHUTDOWN)
666                                 break;
667
668                         err = -EAGAIN;
669                         if (!timeo)
670                                 break;
671
672                         timeo = rfcomm_sock_data_wait(sk, timeo);
673
674                         if (signal_pending(current)) {
675                                 err = sock_intr_errno(timeo);
676                                 goto out;
677                         }
678                         continue;
679                 }
680
681                 chunk = min_t(unsigned int, skb->len, size);
682                 if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
683                         skb_queue_head(&sk->sk_receive_queue, skb);
684                         if (!copied)
685                                 copied = -EFAULT;
686                         break;
687                 }
688                 copied += chunk;
689                 size   -= chunk;
690
691                 sock_recv_timestamp(msg, sk, skb);
692
693                 if (!(flags & MSG_PEEK)) {
694                         atomic_sub(chunk, &sk->sk_rmem_alloc);
695
696                         skb_pull(skb, chunk);
697                         if (skb->len) {
698                                 skb_queue_head(&sk->sk_receive_queue, skb);
699                                 break;
700                         }
701                         kfree_skb(skb);
702
703                 } else {
704                         /* put message back and return */
705                         skb_queue_head(&sk->sk_receive_queue, skb);
706                         break;
707                 }
708         } while (size);
709
710 out:
711         if (atomic_read(&sk->sk_rmem_alloc) <= (sk->sk_rcvbuf >> 2))
712                 rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
713
714         release_sock(sk);
715         return copied ? : err;
716 }
717
718 static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
719 {
720         struct sock *sk = sock->sk;
721         int err = 0;
722         u32 opt;
723
724         BT_DBG("sk %p", sk);
725
726         lock_sock(sk);
727
728         switch (optname) {
729         case RFCOMM_LM:
730                 if (get_user(opt, (u32 __user *) optval)) {
731                         err = -EFAULT;
732                         break;
733                 }
734
735                 rfcomm_pi(sk)->link_mode = opt;
736                 break;
737
738         default:
739                 err = -ENOPROTOOPT;
740                 break;
741         }
742
743         release_sock(sk);
744         return err;
745 }
746
747 static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
748 {
749         struct sock *sk = sock->sk;
750         struct sock *l2cap_sk;
751         struct rfcomm_conninfo cinfo;
752         int len, err = 0;
753
754         BT_DBG("sk %p", sk);
755
756         if (get_user(len, optlen))
757                 return -EFAULT;
758
759         lock_sock(sk);
760
761         switch (optname) {
762         case RFCOMM_LM:
763                 if (put_user(rfcomm_pi(sk)->link_mode, (u32 __user *) optval))
764                         err = -EFAULT;
765                 break;
766
767         case RFCOMM_CONNINFO:
768                 if (sk->sk_state != BT_CONNECTED) {
769                         err = -ENOTCONN;
770                         break;
771                 }
772
773                 l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk;
774
775                 cinfo.hci_handle = l2cap_pi(l2cap_sk)->conn->hcon->handle;
776                 memcpy(cinfo.dev_class, l2cap_pi(l2cap_sk)->conn->hcon->dev_class, 3);
777
778                 len = min_t(unsigned int, len, sizeof(cinfo));
779                 if (copy_to_user(optval, (char *) &cinfo, len))
780                         err = -EFAULT;
781
782                 break;
783
784         default:
785                 err = -ENOPROTOOPT;
786                 break;
787         }
788
789         release_sock(sk);
790         return err;
791 }
792
793 static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
794 {
795         struct sock *sk = sock->sk;
796         int err;
797
798         BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
799
800         err = bt_sock_ioctl(sock, cmd, arg);
801
802         if (err == -ENOIOCTLCMD) {
803 #ifdef CONFIG_BT_RFCOMM_TTY
804                 lock_sock(sk);
805                 err = rfcomm_dev_ioctl(sk, cmd, (void __user *) arg);
806                 release_sock(sk);
807 #else
808                 err = -EOPNOTSUPP;
809 #endif
810         }
811
812         return err;
813 }
814
815 static int rfcomm_sock_shutdown(struct socket *sock, int how)
816 {
817         struct sock *sk = sock->sk;
818         int err = 0;
819
820         BT_DBG("sock %p, sk %p", sock, sk);
821
822         if (!sk) return 0;
823
824         lock_sock(sk);
825         if (!sk->sk_shutdown) {
826                 sk->sk_shutdown = SHUTDOWN_MASK;
827                 __rfcomm_sock_close(sk);
828
829                 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
830                         err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
831         }
832         release_sock(sk);
833         return err;
834 }
835
836 static int rfcomm_sock_release(struct socket *sock)
837 {
838         struct sock *sk = sock->sk;
839         int err;
840
841         BT_DBG("sock %p, sk %p", sock, sk);
842
843         if (!sk)
844                 return 0;
845
846         err = rfcomm_sock_shutdown(sock, 2);
847
848         sock_orphan(sk);
849         rfcomm_sock_kill(sk);
850         return err;
851 }
852
853 /* ---- RFCOMM core layer callbacks ----
854  *
855  * called under rfcomm_lock()
856  */
857 int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
858 {
859         struct sock *sk, *parent;
860         bdaddr_t src, dst;
861         int result = 0;
862
863         BT_DBG("session %p channel %d", s, channel);
864
865         rfcomm_session_getaddr(s, &src, &dst);
866
867         /* Check if we have socket listening on channel */
868         parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
869         if (!parent)
870                 return 0;
871
872         /* Check for backlog size */
873         if (sk_acceptq_is_full(parent)) {
874                 BT_DBG("backlog full %d", parent->sk_ack_backlog);
875                 goto done;
876         }
877
878         sk = rfcomm_sock_alloc(sock_net(parent), NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
879         if (!sk)
880                 goto done;
881
882         rfcomm_sock_init(sk, parent);
883         bacpy(&bt_sk(sk)->src, &src);
884         bacpy(&bt_sk(sk)->dst, &dst);
885         rfcomm_pi(sk)->channel = channel;
886
887         sk->sk_state = BT_CONFIG;
888         bt_accept_enqueue(parent, sk);
889
890         /* Accept connection and return socket DLC */
891         *d = rfcomm_pi(sk)->dlc;
892         result = 1;
893
894 done:
895         bh_unlock_sock(parent);
896         return result;
897 }
898
899 static ssize_t rfcomm_sock_sysfs_show(struct class *dev, char *buf)
900 {
901         struct sock *sk;
902         struct hlist_node *node;
903         char *str = buf;
904
905         read_lock_bh(&rfcomm_sk_list.lock);
906
907         sk_for_each(sk, node, &rfcomm_sk_list.head) {
908                 str += sprintf(str, "%s %s %d %d\n",
909                                 batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
910                                 sk->sk_state, rfcomm_pi(sk)->channel);
911         }
912
913         read_unlock_bh(&rfcomm_sk_list.lock);
914
915         return (str - buf);
916 }
917
918 static CLASS_ATTR(rfcomm, S_IRUGO, rfcomm_sock_sysfs_show, NULL);
919
920 static const struct proto_ops rfcomm_sock_ops = {
921         .family         = PF_BLUETOOTH,
922         .owner          = THIS_MODULE,
923         .release        = rfcomm_sock_release,
924         .bind           = rfcomm_sock_bind,
925         .connect        = rfcomm_sock_connect,
926         .listen         = rfcomm_sock_listen,
927         .accept         = rfcomm_sock_accept,
928         .getname        = rfcomm_sock_getname,
929         .sendmsg        = rfcomm_sock_sendmsg,
930         .recvmsg        = rfcomm_sock_recvmsg,
931         .shutdown       = rfcomm_sock_shutdown,
932         .setsockopt     = rfcomm_sock_setsockopt,
933         .getsockopt     = rfcomm_sock_getsockopt,
934         .ioctl          = rfcomm_sock_ioctl,
935         .poll           = bt_sock_poll,
936         .socketpair     = sock_no_socketpair,
937         .mmap           = sock_no_mmap
938 };
939
940 static struct net_proto_family rfcomm_sock_family_ops = {
941         .family         = PF_BLUETOOTH,
942         .owner          = THIS_MODULE,
943         .create         = rfcomm_sock_create
944 };
945
946 int __init rfcomm_init_sockets(void)
947 {
948         int err;
949
950         err = proto_register(&rfcomm_proto, 0);
951         if (err < 0)
952                 return err;
953
954         err = bt_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops);
955         if (err < 0)
956                 goto error;
957
958         if (class_create_file(bt_class, &class_attr_rfcomm) < 0)
959                 BT_ERR("Failed to create RFCOMM info file");
960
961         BT_INFO("RFCOMM socket layer initialized");
962
963         return 0;
964
965 error:
966         BT_ERR("RFCOMM socket layer registration failed");
967         proto_unregister(&rfcomm_proto);
968         return err;
969 }
970
971 void __exit rfcomm_cleanup_sockets(void)
972 {
973         class_remove_file(bt_class, &class_attr_rfcomm);
974
975         if (bt_sock_unregister(BTPROTO_RFCOMM) < 0)
976                 BT_ERR("RFCOMM socket layer unregistration failed");
977
978         proto_unregister(&rfcomm_proto);
979 }