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