Loading...
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5 Copyright (C) 2010 Google Inc.
6 Copyright (C) 2011 ProFUSION Embedded Systems
7
8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License version 2 as
12 published by the Free Software Foundation;
13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
17 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
18 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
23 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
24 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
25 SOFTWARE IS DISCLAIMED.
26*/
27
28/* Bluetooth L2CAP sockets. */
29
30#include <linux/module.h>
31#include <linux/export.h>
32#include <linux/filter.h>
33#include <linux/sched/signal.h>
34
35#include <net/bluetooth/bluetooth.h>
36#include <net/bluetooth/hci_core.h>
37#include <net/bluetooth/l2cap.h>
38
39#include "smp.h"
40
41static struct bt_sock_list l2cap_sk_list = {
42 .lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
43};
44
45static const struct proto_ops l2cap_sock_ops;
46static void l2cap_sock_init(struct sock *sk, struct sock *parent);
47static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
48 int proto, gfp_t prio, int kern);
49static void l2cap_sock_cleanup_listen(struct sock *parent);
50
51bool l2cap_is_socket(struct socket *sock)
52{
53 return sock && sock->ops == &l2cap_sock_ops;
54}
55EXPORT_SYMBOL(l2cap_is_socket);
56
57static int l2cap_validate_bredr_psm(u16 psm)
58{
59 /* PSM must be odd and lsb of upper byte must be 0 */
60 if ((psm & 0x0101) != 0x0001)
61 return -EINVAL;
62
63 /* Restrict usage of well-known PSMs */
64 if (psm < L2CAP_PSM_DYN_START && !capable(CAP_NET_BIND_SERVICE))
65 return -EACCES;
66
67 return 0;
68}
69
70static int l2cap_validate_le_psm(u16 psm)
71{
72 /* Valid LE_PSM ranges are defined only until 0x00ff */
73 if (psm > L2CAP_PSM_LE_DYN_END)
74 return -EINVAL;
75
76 /* Restrict fixed, SIG assigned PSM values to CAP_NET_BIND_SERVICE */
77 if (psm < L2CAP_PSM_LE_DYN_START && !capable(CAP_NET_BIND_SERVICE))
78 return -EACCES;
79
80 return 0;
81}
82
83static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
84{
85 struct sock *sk = sock->sk;
86 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
87 struct sockaddr_l2 la;
88 int len, err = 0;
89
90 BT_DBG("sk %p", sk);
91
92 if (!addr || alen < offsetofend(struct sockaddr, sa_family) ||
93 addr->sa_family != AF_BLUETOOTH)
94 return -EINVAL;
95
96 memset(&la, 0, sizeof(la));
97 len = min_t(unsigned int, sizeof(la), alen);
98 memcpy(&la, addr, len);
99
100 if (la.l2_cid && la.l2_psm)
101 return -EINVAL;
102
103 if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
104 return -EINVAL;
105
106 if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
107 /* We only allow ATT user space socket */
108 if (la.l2_cid &&
109 la.l2_cid != cpu_to_le16(L2CAP_CID_ATT))
110 return -EINVAL;
111 }
112
113 lock_sock(sk);
114
115 if (sk->sk_state != BT_OPEN) {
116 err = -EBADFD;
117 goto done;
118 }
119
120 if (la.l2_psm) {
121 __u16 psm = __le16_to_cpu(la.l2_psm);
122
123 if (la.l2_bdaddr_type == BDADDR_BREDR)
124 err = l2cap_validate_bredr_psm(psm);
125 else
126 err = l2cap_validate_le_psm(psm);
127
128 if (err)
129 goto done;
130 }
131
132 bacpy(&chan->src, &la.l2_bdaddr);
133 chan->src_type = la.l2_bdaddr_type;
134
135 if (la.l2_cid)
136 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
137 else
138 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
139
140 if (err < 0)
141 goto done;
142
143 switch (chan->chan_type) {
144 case L2CAP_CHAN_CONN_LESS:
145 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_3DSP)
146 chan->sec_level = BT_SECURITY_SDP;
147 break;
148 case L2CAP_CHAN_CONN_ORIENTED:
149 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP ||
150 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
151 chan->sec_level = BT_SECURITY_SDP;
152 break;
153 case L2CAP_CHAN_RAW:
154 chan->sec_level = BT_SECURITY_SDP;
155 break;
156 case L2CAP_CHAN_FIXED:
157 /* Fixed channels default to the L2CAP core not holding a
158 * hci_conn reference for them. For fixed channels mapping to
159 * L2CAP sockets we do want to hold a reference so set the
160 * appropriate flag to request it.
161 */
162 set_bit(FLAG_HOLD_HCI_CONN, &chan->flags);
163 break;
164 }
165
166 /* Use L2CAP_MODE_LE_FLOWCTL (CoC) in case of LE address and
167 * L2CAP_MODE_EXT_FLOWCTL (ECRED) has not been set.
168 */
169 if (chan->psm && bdaddr_type_is_le(chan->src_type) &&
170 chan->mode != L2CAP_MODE_EXT_FLOWCTL)
171 chan->mode = L2CAP_MODE_LE_FLOWCTL;
172
173 chan->state = BT_BOUND;
174 sk->sk_state = BT_BOUND;
175
176done:
177 release_sock(sk);
178 return err;
179}
180
181static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,
182 int alen, int flags)
183{
184 struct sock *sk = sock->sk;
185 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
186 struct sockaddr_l2 la;
187 int len, err = 0;
188 bool zapped;
189
190 BT_DBG("sk %p", sk);
191
192 lock_sock(sk);
193 zapped = sock_flag(sk, SOCK_ZAPPED);
194 release_sock(sk);
195
196 if (zapped)
197 return -EINVAL;
198
199 if (!addr || alen < offsetofend(struct sockaddr, sa_family) ||
200 addr->sa_family != AF_BLUETOOTH)
201 return -EINVAL;
202
203 memset(&la, 0, sizeof(la));
204 len = min_t(unsigned int, sizeof(la), alen);
205 memcpy(&la, addr, len);
206
207 if (la.l2_cid && la.l2_psm)
208 return -EINVAL;
209
210 if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
211 return -EINVAL;
212
213 /* Check that the socket wasn't bound to something that
214 * conflicts with the address given to connect(). If chan->src
215 * is BDADDR_ANY it means bind() was never used, in which case
216 * chan->src_type and la.l2_bdaddr_type do not need to match.
217 */
218 if (chan->src_type == BDADDR_BREDR && bacmp(&chan->src, BDADDR_ANY) &&
219 bdaddr_type_is_le(la.l2_bdaddr_type)) {
220 /* Old user space versions will try to incorrectly bind
221 * the ATT socket using BDADDR_BREDR. We need to accept
222 * this and fix up the source address type only when
223 * both the source CID and destination CID indicate
224 * ATT. Anything else is an invalid combination.
225 */
226 if (chan->scid != L2CAP_CID_ATT ||
227 la.l2_cid != cpu_to_le16(L2CAP_CID_ATT))
228 return -EINVAL;
229
230 /* We don't have the hdev available here to make a
231 * better decision on random vs public, but since all
232 * user space versions that exhibit this issue anyway do
233 * not support random local addresses assuming public
234 * here is good enough.
235 */
236 chan->src_type = BDADDR_LE_PUBLIC;
237 }
238
239 if (chan->src_type != BDADDR_BREDR && la.l2_bdaddr_type == BDADDR_BREDR)
240 return -EINVAL;
241
242 if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
243 /* We only allow ATT user space socket */
244 if (la.l2_cid &&
245 la.l2_cid != cpu_to_le16(L2CAP_CID_ATT))
246 return -EINVAL;
247 }
248
249 /* Use L2CAP_MODE_LE_FLOWCTL (CoC) in case of LE address and
250 * L2CAP_MODE_EXT_FLOWCTL (ECRED) has not been set.
251 */
252 if (chan->psm && bdaddr_type_is_le(chan->src_type) &&
253 chan->mode != L2CAP_MODE_EXT_FLOWCTL)
254 chan->mode = L2CAP_MODE_LE_FLOWCTL;
255
256 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
257 &la.l2_bdaddr, la.l2_bdaddr_type);
258 if (err)
259 return err;
260
261 lock_sock(sk);
262
263 err = bt_sock_wait_state(sk, BT_CONNECTED,
264 sock_sndtimeo(sk, flags & O_NONBLOCK));
265
266 release_sock(sk);
267
268 return err;
269}
270
271static int l2cap_sock_listen(struct socket *sock, int backlog)
272{
273 struct sock *sk = sock->sk;
274 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
275 int err = 0;
276
277 BT_DBG("sk %p backlog %d", sk, backlog);
278
279 lock_sock(sk);
280
281 if (sk->sk_state != BT_BOUND) {
282 err = -EBADFD;
283 goto done;
284 }
285
286 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
287 err = -EINVAL;
288 goto done;
289 }
290
291 switch (chan->mode) {
292 case L2CAP_MODE_BASIC:
293 case L2CAP_MODE_LE_FLOWCTL:
294 break;
295 case L2CAP_MODE_EXT_FLOWCTL:
296 if (!enable_ecred) {
297 err = -EOPNOTSUPP;
298 goto done;
299 }
300 break;
301 case L2CAP_MODE_ERTM:
302 case L2CAP_MODE_STREAMING:
303 if (!disable_ertm)
304 break;
305 fallthrough;
306 default:
307 err = -EOPNOTSUPP;
308 goto done;
309 }
310
311 sk->sk_max_ack_backlog = backlog;
312 sk->sk_ack_backlog = 0;
313
314 /* Listening channels need to use nested locking in order not to
315 * cause lockdep warnings when the created child channels end up
316 * being locked in the same thread as the parent channel.
317 */
318 atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);
319
320 chan->state = BT_LISTEN;
321 sk->sk_state = BT_LISTEN;
322
323done:
324 release_sock(sk);
325 return err;
326}
327
328static int l2cap_sock_accept(struct socket *sock, struct socket *newsock,
329 int flags, bool kern)
330{
331 DEFINE_WAIT_FUNC(wait, woken_wake_function);
332 struct sock *sk = sock->sk, *nsk;
333 long timeo;
334 int err = 0;
335
336 lock_sock_nested(sk, L2CAP_NESTING_PARENT);
337
338 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
339
340 BT_DBG("sk %p timeo %ld", sk, timeo);
341
342 /* Wait for an incoming connection. (wake-one). */
343 add_wait_queue_exclusive(sk_sleep(sk), &wait);
344 while (1) {
345 if (sk->sk_state != BT_LISTEN) {
346 err = -EBADFD;
347 break;
348 }
349
350 nsk = bt_accept_dequeue(sk, newsock);
351 if (nsk)
352 break;
353
354 if (!timeo) {
355 err = -EAGAIN;
356 break;
357 }
358
359 if (signal_pending(current)) {
360 err = sock_intr_errno(timeo);
361 break;
362 }
363
364 release_sock(sk);
365
366 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
367
368 lock_sock_nested(sk, L2CAP_NESTING_PARENT);
369 }
370 remove_wait_queue(sk_sleep(sk), &wait);
371
372 if (err)
373 goto done;
374
375 newsock->state = SS_CONNECTED;
376
377 BT_DBG("new socket %p", nsk);
378
379done:
380 release_sock(sk);
381 return err;
382}
383
384static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
385 int peer)
386{
387 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
388 struct sock *sk = sock->sk;
389 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
390
391 BT_DBG("sock %p, sk %p", sock, sk);
392
393 if (peer && sk->sk_state != BT_CONNECTED &&
394 sk->sk_state != BT_CONNECT && sk->sk_state != BT_CONNECT2 &&
395 sk->sk_state != BT_CONFIG)
396 return -ENOTCONN;
397
398 memset(la, 0, sizeof(struct sockaddr_l2));
399 addr->sa_family = AF_BLUETOOTH;
400
401 la->l2_psm = chan->psm;
402
403 if (peer) {
404 bacpy(&la->l2_bdaddr, &chan->dst);
405 la->l2_cid = cpu_to_le16(chan->dcid);
406 la->l2_bdaddr_type = chan->dst_type;
407 } else {
408 bacpy(&la->l2_bdaddr, &chan->src);
409 la->l2_cid = cpu_to_le16(chan->scid);
410 la->l2_bdaddr_type = chan->src_type;
411 }
412
413 return sizeof(struct sockaddr_l2);
414}
415
416static int l2cap_get_mode(struct l2cap_chan *chan)
417{
418 switch (chan->mode) {
419 case L2CAP_MODE_BASIC:
420 return BT_MODE_BASIC;
421 case L2CAP_MODE_ERTM:
422 return BT_MODE_ERTM;
423 case L2CAP_MODE_STREAMING:
424 return BT_MODE_STREAMING;
425 case L2CAP_MODE_LE_FLOWCTL:
426 return BT_MODE_LE_FLOWCTL;
427 case L2CAP_MODE_EXT_FLOWCTL:
428 return BT_MODE_EXT_FLOWCTL;
429 }
430
431 return -EINVAL;
432}
433
434static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
435 char __user *optval, int __user *optlen)
436{
437 struct sock *sk = sock->sk;
438 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
439 struct l2cap_options opts;
440 struct l2cap_conninfo cinfo;
441 int len, err = 0;
442 u32 opt;
443
444 BT_DBG("sk %p", sk);
445
446 if (get_user(len, optlen))
447 return -EFAULT;
448
449 lock_sock(sk);
450
451 switch (optname) {
452 case L2CAP_OPTIONS:
453 /* LE sockets should use BT_SNDMTU/BT_RCVMTU, but since
454 * legacy ATT code depends on getsockopt for
455 * L2CAP_OPTIONS we need to let this pass.
456 */
457 if (bdaddr_type_is_le(chan->src_type) &&
458 chan->scid != L2CAP_CID_ATT) {
459 err = -EINVAL;
460 break;
461 }
462
463 /* Only BR/EDR modes are supported here */
464 switch (chan->mode) {
465 case L2CAP_MODE_BASIC:
466 case L2CAP_MODE_ERTM:
467 case L2CAP_MODE_STREAMING:
468 break;
469 default:
470 err = -EINVAL;
471 break;
472 }
473
474 if (err < 0)
475 break;
476
477 memset(&opts, 0, sizeof(opts));
478 opts.imtu = chan->imtu;
479 opts.omtu = chan->omtu;
480 opts.flush_to = chan->flush_to;
481 opts.mode = chan->mode;
482 opts.fcs = chan->fcs;
483 opts.max_tx = chan->max_tx;
484 opts.txwin_size = chan->tx_win;
485
486 BT_DBG("mode 0x%2.2x", chan->mode);
487
488 len = min_t(unsigned int, len, sizeof(opts));
489 if (copy_to_user(optval, (char *) &opts, len))
490 err = -EFAULT;
491
492 break;
493
494 case L2CAP_LM:
495 switch (chan->sec_level) {
496 case BT_SECURITY_LOW:
497 opt = L2CAP_LM_AUTH;
498 break;
499 case BT_SECURITY_MEDIUM:
500 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
501 break;
502 case BT_SECURITY_HIGH:
503 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
504 L2CAP_LM_SECURE;
505 break;
506 case BT_SECURITY_FIPS:
507 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
508 L2CAP_LM_SECURE | L2CAP_LM_FIPS;
509 break;
510 default:
511 opt = 0;
512 break;
513 }
514
515 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
516 opt |= L2CAP_LM_MASTER;
517
518 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
519 opt |= L2CAP_LM_RELIABLE;
520
521 if (put_user(opt, (u32 __user *) optval))
522 err = -EFAULT;
523
524 break;
525
526 case L2CAP_CONNINFO:
527 if (sk->sk_state != BT_CONNECTED &&
528 !(sk->sk_state == BT_CONNECT2 &&
529 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
530 err = -ENOTCONN;
531 break;
532 }
533
534 memset(&cinfo, 0, sizeof(cinfo));
535 cinfo.hci_handle = chan->conn->hcon->handle;
536 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
537
538 len = min_t(unsigned int, len, sizeof(cinfo));
539 if (copy_to_user(optval, (char *) &cinfo, len))
540 err = -EFAULT;
541
542 break;
543
544 default:
545 err = -ENOPROTOOPT;
546 break;
547 }
548
549 release_sock(sk);
550 return err;
551}
552
553static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
554 char __user *optval, int __user *optlen)
555{
556 struct sock *sk = sock->sk;
557 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
558 struct bt_security sec;
559 struct bt_power pwr;
560 u32 phys;
561 int len, mode, err = 0;
562
563 BT_DBG("sk %p", sk);
564
565 if (level == SOL_L2CAP)
566 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
567
568 if (level != SOL_BLUETOOTH)
569 return -ENOPROTOOPT;
570
571 if (get_user(len, optlen))
572 return -EFAULT;
573
574 lock_sock(sk);
575
576 switch (optname) {
577 case BT_SECURITY:
578 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
579 chan->chan_type != L2CAP_CHAN_FIXED &&
580 chan->chan_type != L2CAP_CHAN_RAW) {
581 err = -EINVAL;
582 break;
583 }
584
585 memset(&sec, 0, sizeof(sec));
586 if (chan->conn) {
587 sec.level = chan->conn->hcon->sec_level;
588
589 if (sk->sk_state == BT_CONNECTED)
590 sec.key_size = chan->conn->hcon->enc_key_size;
591 } else {
592 sec.level = chan->sec_level;
593 }
594
595 len = min_t(unsigned int, len, sizeof(sec));
596 if (copy_to_user(optval, (char *) &sec, len))
597 err = -EFAULT;
598
599 break;
600
601 case BT_DEFER_SETUP:
602 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
603 err = -EINVAL;
604 break;
605 }
606
607 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
608 (u32 __user *) optval))
609 err = -EFAULT;
610
611 break;
612
613 case BT_FLUSHABLE:
614 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
615 (u32 __user *) optval))
616 err = -EFAULT;
617
618 break;
619
620 case BT_POWER:
621 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
622 && sk->sk_type != SOCK_RAW) {
623 err = -EINVAL;
624 break;
625 }
626
627 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
628
629 len = min_t(unsigned int, len, sizeof(pwr));
630 if (copy_to_user(optval, (char *) &pwr, len))
631 err = -EFAULT;
632
633 break;
634
635 case BT_CHANNEL_POLICY:
636 if (put_user(chan->chan_policy, (u32 __user *) optval))
637 err = -EFAULT;
638 break;
639
640 case BT_SNDMTU:
641 if (!bdaddr_type_is_le(chan->src_type)) {
642 err = -EINVAL;
643 break;
644 }
645
646 if (sk->sk_state != BT_CONNECTED) {
647 err = -ENOTCONN;
648 break;
649 }
650
651 if (put_user(chan->omtu, (u16 __user *) optval))
652 err = -EFAULT;
653 break;
654
655 case BT_RCVMTU:
656 if (!bdaddr_type_is_le(chan->src_type)) {
657 err = -EINVAL;
658 break;
659 }
660
661 if (put_user(chan->imtu, (u16 __user *) optval))
662 err = -EFAULT;
663 break;
664
665 case BT_PHY:
666 if (sk->sk_state != BT_CONNECTED) {
667 err = -ENOTCONN;
668 break;
669 }
670
671 phys = hci_conn_get_phy(chan->conn->hcon);
672
673 if (put_user(phys, (u32 __user *) optval))
674 err = -EFAULT;
675 break;
676
677 case BT_MODE:
678 if (!enable_ecred) {
679 err = -ENOPROTOOPT;
680 break;
681 }
682
683 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
684 err = -EINVAL;
685 break;
686 }
687
688 mode = l2cap_get_mode(chan);
689 if (mode < 0) {
690 err = mode;
691 break;
692 }
693
694 if (put_user(mode, (u8 __user *) optval))
695 err = -EFAULT;
696 break;
697
698 default:
699 err = -ENOPROTOOPT;
700 break;
701 }
702
703 release_sock(sk);
704 return err;
705}
706
707static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
708{
709 switch (chan->scid) {
710 case L2CAP_CID_ATT:
711 if (mtu < L2CAP_LE_MIN_MTU)
712 return false;
713 break;
714
715 default:
716 if (mtu < L2CAP_DEFAULT_MIN_MTU)
717 return false;
718 }
719
720 return true;
721}
722
723static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
724 sockptr_t optval, unsigned int optlen)
725{
726 struct sock *sk = sock->sk;
727 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
728 struct l2cap_options opts;
729 int len, err = 0;
730 u32 opt;
731
732 BT_DBG("sk %p", sk);
733
734 lock_sock(sk);
735
736 switch (optname) {
737 case L2CAP_OPTIONS:
738 if (bdaddr_type_is_le(chan->src_type)) {
739 err = -EINVAL;
740 break;
741 }
742
743 if (sk->sk_state == BT_CONNECTED) {
744 err = -EINVAL;
745 break;
746 }
747
748 opts.imtu = chan->imtu;
749 opts.omtu = chan->omtu;
750 opts.flush_to = chan->flush_to;
751 opts.mode = chan->mode;
752 opts.fcs = chan->fcs;
753 opts.max_tx = chan->max_tx;
754 opts.txwin_size = chan->tx_win;
755
756 len = min_t(unsigned int, sizeof(opts), optlen);
757 if (copy_from_sockptr(&opts, optval, len)) {
758 err = -EFAULT;
759 break;
760 }
761
762 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
763 err = -EINVAL;
764 break;
765 }
766
767 if (!l2cap_valid_mtu(chan, opts.imtu)) {
768 err = -EINVAL;
769 break;
770 }
771
772 /* Only BR/EDR modes are supported here */
773 switch (opts.mode) {
774 case L2CAP_MODE_BASIC:
775 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
776 break;
777 case L2CAP_MODE_ERTM:
778 case L2CAP_MODE_STREAMING:
779 if (!disable_ertm)
780 break;
781 fallthrough;
782 default:
783 err = -EINVAL;
784 break;
785 }
786
787 if (err < 0)
788 break;
789
790 chan->mode = opts.mode;
791
792 BT_DBG("mode 0x%2.2x", chan->mode);
793
794 chan->imtu = opts.imtu;
795 chan->omtu = opts.omtu;
796 chan->fcs = opts.fcs;
797 chan->max_tx = opts.max_tx;
798 chan->tx_win = opts.txwin_size;
799 chan->flush_to = opts.flush_to;
800 break;
801
802 case L2CAP_LM:
803 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
804 err = -EFAULT;
805 break;
806 }
807
808 if (opt & L2CAP_LM_FIPS) {
809 err = -EINVAL;
810 break;
811 }
812
813 if (opt & L2CAP_LM_AUTH)
814 chan->sec_level = BT_SECURITY_LOW;
815 if (opt & L2CAP_LM_ENCRYPT)
816 chan->sec_level = BT_SECURITY_MEDIUM;
817 if (opt & L2CAP_LM_SECURE)
818 chan->sec_level = BT_SECURITY_HIGH;
819
820 if (opt & L2CAP_LM_MASTER)
821 set_bit(FLAG_ROLE_SWITCH, &chan->flags);
822 else
823 clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
824
825 if (opt & L2CAP_LM_RELIABLE)
826 set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
827 else
828 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
829 break;
830
831 default:
832 err = -ENOPROTOOPT;
833 break;
834 }
835
836 release_sock(sk);
837 return err;
838}
839
840static int l2cap_set_mode(struct l2cap_chan *chan, u8 mode)
841{
842 switch (mode) {
843 case BT_MODE_BASIC:
844 if (bdaddr_type_is_le(chan->src_type))
845 return -EINVAL;
846 mode = L2CAP_MODE_BASIC;
847 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
848 break;
849 case BT_MODE_ERTM:
850 if (!disable_ertm || bdaddr_type_is_le(chan->src_type))
851 return -EINVAL;
852 mode = L2CAP_MODE_ERTM;
853 break;
854 case BT_MODE_STREAMING:
855 if (!disable_ertm || bdaddr_type_is_le(chan->src_type))
856 return -EINVAL;
857 mode = L2CAP_MODE_STREAMING;
858 break;
859 case BT_MODE_LE_FLOWCTL:
860 if (!bdaddr_type_is_le(chan->src_type))
861 return -EINVAL;
862 mode = L2CAP_MODE_LE_FLOWCTL;
863 break;
864 case BT_MODE_EXT_FLOWCTL:
865 /* TODO: Add support for ECRED PDUs to BR/EDR */
866 if (!bdaddr_type_is_le(chan->src_type))
867 return -EINVAL;
868 mode = L2CAP_MODE_EXT_FLOWCTL;
869 break;
870 default:
871 return -EINVAL;
872 }
873
874 chan->mode = mode;
875
876 return 0;
877}
878
879static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
880 sockptr_t optval, unsigned int optlen)
881{
882 struct sock *sk = sock->sk;
883 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
884 struct bt_security sec;
885 struct bt_power pwr;
886 struct l2cap_conn *conn;
887 int len, err = 0;
888 u32 opt;
889 u16 mtu;
890 u8 mode;
891
892 BT_DBG("sk %p", sk);
893
894 if (level == SOL_L2CAP)
895 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
896
897 if (level != SOL_BLUETOOTH)
898 return -ENOPROTOOPT;
899
900 lock_sock(sk);
901
902 switch (optname) {
903 case BT_SECURITY:
904 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
905 chan->chan_type != L2CAP_CHAN_FIXED &&
906 chan->chan_type != L2CAP_CHAN_RAW) {
907 err = -EINVAL;
908 break;
909 }
910
911 sec.level = BT_SECURITY_LOW;
912
913 len = min_t(unsigned int, sizeof(sec), optlen);
914 if (copy_from_sockptr(&sec, optval, len)) {
915 err = -EFAULT;
916 break;
917 }
918
919 if (sec.level < BT_SECURITY_LOW ||
920 sec.level > BT_SECURITY_FIPS) {
921 err = -EINVAL;
922 break;
923 }
924
925 chan->sec_level = sec.level;
926
927 if (!chan->conn)
928 break;
929
930 conn = chan->conn;
931
932 /* change security for LE channels */
933 if (chan->scid == L2CAP_CID_ATT) {
934 if (smp_conn_security(conn->hcon, sec.level)) {
935 err = -EINVAL;
936 break;
937 }
938
939 set_bit(FLAG_PENDING_SECURITY, &chan->flags);
940 sk->sk_state = BT_CONFIG;
941 chan->state = BT_CONFIG;
942
943 /* or for ACL link */
944 } else if ((sk->sk_state == BT_CONNECT2 &&
945 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
946 sk->sk_state == BT_CONNECTED) {
947 if (!l2cap_chan_check_security(chan, true))
948 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
949 else
950 sk->sk_state_change(sk);
951 } else {
952 err = -EINVAL;
953 }
954 break;
955
956 case BT_DEFER_SETUP:
957 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
958 err = -EINVAL;
959 break;
960 }
961
962 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
963 err = -EFAULT;
964 break;
965 }
966
967 if (opt) {
968 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
969 set_bit(FLAG_DEFER_SETUP, &chan->flags);
970 } else {
971 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
972 clear_bit(FLAG_DEFER_SETUP, &chan->flags);
973 }
974 break;
975
976 case BT_FLUSHABLE:
977 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
978 err = -EFAULT;
979 break;
980 }
981
982 if (opt > BT_FLUSHABLE_ON) {
983 err = -EINVAL;
984 break;
985 }
986
987 if (opt == BT_FLUSHABLE_OFF) {
988 conn = chan->conn;
989 /* proceed further only when we have l2cap_conn and
990 No Flush support in the LM */
991 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
992 err = -EINVAL;
993 break;
994 }
995 }
996
997 if (opt)
998 set_bit(FLAG_FLUSHABLE, &chan->flags);
999 else
1000 clear_bit(FLAG_FLUSHABLE, &chan->flags);
1001 break;
1002
1003 case BT_POWER:
1004 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
1005 chan->chan_type != L2CAP_CHAN_RAW) {
1006 err = -EINVAL;
1007 break;
1008 }
1009
1010 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
1011
1012 len = min_t(unsigned int, sizeof(pwr), optlen);
1013 if (copy_from_sockptr(&pwr, optval, len)) {
1014 err = -EFAULT;
1015 break;
1016 }
1017
1018 if (pwr.force_active)
1019 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
1020 else
1021 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
1022 break;
1023
1024 case BT_CHANNEL_POLICY:
1025 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
1026 err = -EFAULT;
1027 break;
1028 }
1029
1030 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
1031 err = -EINVAL;
1032 break;
1033 }
1034
1035 if (chan->mode != L2CAP_MODE_ERTM &&
1036 chan->mode != L2CAP_MODE_STREAMING) {
1037 err = -EOPNOTSUPP;
1038 break;
1039 }
1040
1041 chan->chan_policy = (u8) opt;
1042
1043 if (sk->sk_state == BT_CONNECTED &&
1044 chan->move_role == L2CAP_MOVE_ROLE_NONE)
1045 l2cap_move_start(chan);
1046
1047 break;
1048
1049 case BT_SNDMTU:
1050 if (!bdaddr_type_is_le(chan->src_type)) {
1051 err = -EINVAL;
1052 break;
1053 }
1054
1055 /* Setting is not supported as it's the remote side that
1056 * decides this.
1057 */
1058 err = -EPERM;
1059 break;
1060
1061 case BT_RCVMTU:
1062 if (!bdaddr_type_is_le(chan->src_type)) {
1063 err = -EINVAL;
1064 break;
1065 }
1066
1067 if (chan->mode == L2CAP_MODE_LE_FLOWCTL &&
1068 sk->sk_state == BT_CONNECTED) {
1069 err = -EISCONN;
1070 break;
1071 }
1072
1073 if (copy_from_sockptr(&mtu, optval, sizeof(u16))) {
1074 err = -EFAULT;
1075 break;
1076 }
1077
1078 if (chan->mode == L2CAP_MODE_EXT_FLOWCTL &&
1079 sk->sk_state == BT_CONNECTED)
1080 err = l2cap_chan_reconfigure(chan, mtu);
1081 else
1082 chan->imtu = mtu;
1083
1084 break;
1085
1086 case BT_MODE:
1087 if (!enable_ecred) {
1088 err = -ENOPROTOOPT;
1089 break;
1090 }
1091
1092 BT_DBG("sk->sk_state %u", sk->sk_state);
1093
1094 if (sk->sk_state != BT_BOUND) {
1095 err = -EINVAL;
1096 break;
1097 }
1098
1099 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1100 err = -EINVAL;
1101 break;
1102 }
1103
1104 if (copy_from_sockptr(&mode, optval, sizeof(u8))) {
1105 err = -EFAULT;
1106 break;
1107 }
1108
1109 BT_DBG("mode %u", mode);
1110
1111 err = l2cap_set_mode(chan, mode);
1112 if (err)
1113 break;
1114
1115 BT_DBG("mode 0x%2.2x", chan->mode);
1116
1117 break;
1118
1119 default:
1120 err = -ENOPROTOOPT;
1121 break;
1122 }
1123
1124 release_sock(sk);
1125 return err;
1126}
1127
1128static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg,
1129 size_t len)
1130{
1131 struct sock *sk = sock->sk;
1132 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1133 int err;
1134
1135 BT_DBG("sock %p, sk %p", sock, sk);
1136
1137 err = sock_error(sk);
1138 if (err)
1139 return err;
1140
1141 if (msg->msg_flags & MSG_OOB)
1142 return -EOPNOTSUPP;
1143
1144 if (sk->sk_state != BT_CONNECTED)
1145 return -ENOTCONN;
1146
1147 lock_sock(sk);
1148 err = bt_sock_wait_ready(sk, msg->msg_flags);
1149 release_sock(sk);
1150 if (err)
1151 return err;
1152
1153 l2cap_chan_lock(chan);
1154 err = l2cap_chan_send(chan, msg, len);
1155 l2cap_chan_unlock(chan);
1156
1157 return err;
1158}
1159
1160static int l2cap_sock_recvmsg(struct socket *sock, struct msghdr *msg,
1161 size_t len, int flags)
1162{
1163 struct sock *sk = sock->sk;
1164 struct l2cap_pinfo *pi = l2cap_pi(sk);
1165 int err;
1166
1167 lock_sock(sk);
1168
1169 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
1170 &bt_sk(sk)->flags)) {
1171 if (pi->chan->mode == L2CAP_MODE_EXT_FLOWCTL) {
1172 sk->sk_state = BT_CONNECTED;
1173 pi->chan->state = BT_CONNECTED;
1174 __l2cap_ecred_conn_rsp_defer(pi->chan);
1175 } else if (bdaddr_type_is_le(pi->chan->src_type)) {
1176 sk->sk_state = BT_CONNECTED;
1177 pi->chan->state = BT_CONNECTED;
1178 __l2cap_le_connect_rsp_defer(pi->chan);
1179 } else {
1180 sk->sk_state = BT_CONFIG;
1181 pi->chan->state = BT_CONFIG;
1182 __l2cap_connect_rsp_defer(pi->chan);
1183 }
1184
1185 err = 0;
1186 goto done;
1187 }
1188
1189 release_sock(sk);
1190
1191 if (sock->type == SOCK_STREAM)
1192 err = bt_sock_stream_recvmsg(sock, msg, len, flags);
1193 else
1194 err = bt_sock_recvmsg(sock, msg, len, flags);
1195
1196 if (pi->chan->mode != L2CAP_MODE_ERTM)
1197 return err;
1198
1199 /* Attempt to put pending rx data in the socket buffer */
1200
1201 lock_sock(sk);
1202
1203 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
1204 goto done;
1205
1206 if (pi->rx_busy_skb) {
1207 if (!__sock_queue_rcv_skb(sk, pi->rx_busy_skb))
1208 pi->rx_busy_skb = NULL;
1209 else
1210 goto done;
1211 }
1212
1213 /* Restore data flow when half of the receive buffer is
1214 * available. This avoids resending large numbers of
1215 * frames.
1216 */
1217 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
1218 l2cap_chan_busy(pi->chan, 0);
1219
1220done:
1221 release_sock(sk);
1222 return err;
1223}
1224
1225/* Kill socket (only if zapped and orphan)
1226 * Must be called on unlocked socket, with l2cap channel lock.
1227 */
1228static void l2cap_sock_kill(struct sock *sk)
1229{
1230 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
1231 return;
1232
1233 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
1234
1235 /* Kill poor orphan */
1236
1237 l2cap_chan_put(l2cap_pi(sk)->chan);
1238 sock_set_flag(sk, SOCK_DEAD);
1239 sock_put(sk);
1240}
1241
1242static int __l2cap_wait_ack(struct sock *sk, struct l2cap_chan *chan)
1243{
1244 DECLARE_WAITQUEUE(wait, current);
1245 int err = 0;
1246 int timeo = L2CAP_WAIT_ACK_POLL_PERIOD;
1247 /* Timeout to prevent infinite loop */
1248 unsigned long timeout = jiffies + L2CAP_WAIT_ACK_TIMEOUT;
1249
1250 add_wait_queue(sk_sleep(sk), &wait);
1251 set_current_state(TASK_INTERRUPTIBLE);
1252 do {
1253 BT_DBG("Waiting for %d ACKs, timeout %04d ms",
1254 chan->unacked_frames, time_after(jiffies, timeout) ? 0 :
1255 jiffies_to_msecs(timeout - jiffies));
1256
1257 if (!timeo)
1258 timeo = L2CAP_WAIT_ACK_POLL_PERIOD;
1259
1260 if (signal_pending(current)) {
1261 err = sock_intr_errno(timeo);
1262 break;
1263 }
1264
1265 release_sock(sk);
1266 timeo = schedule_timeout(timeo);
1267 lock_sock(sk);
1268 set_current_state(TASK_INTERRUPTIBLE);
1269
1270 err = sock_error(sk);
1271 if (err)
1272 break;
1273
1274 if (time_after(jiffies, timeout)) {
1275 err = -ENOLINK;
1276 break;
1277 }
1278
1279 } while (chan->unacked_frames > 0 &&
1280 chan->state == BT_CONNECTED);
1281
1282 set_current_state(TASK_RUNNING);
1283 remove_wait_queue(sk_sleep(sk), &wait);
1284 return err;
1285}
1286
1287static int l2cap_sock_shutdown(struct socket *sock, int how)
1288{
1289 struct sock *sk = sock->sk;
1290 struct l2cap_chan *chan;
1291 struct l2cap_conn *conn;
1292 int err = 0;
1293
1294 BT_DBG("sock %p, sk %p, how %d", sock, sk, how);
1295
1296 /* 'how' parameter is mapped to sk_shutdown as follows:
1297 * SHUT_RD (0) --> RCV_SHUTDOWN (1)
1298 * SHUT_WR (1) --> SEND_SHUTDOWN (2)
1299 * SHUT_RDWR (2) --> SHUTDOWN_MASK (3)
1300 */
1301 how++;
1302
1303 if (!sk)
1304 return 0;
1305
1306 lock_sock(sk);
1307
1308 if ((sk->sk_shutdown & how) == how)
1309 goto shutdown_already;
1310
1311 BT_DBG("Handling sock shutdown");
1312
1313 /* prevent sk structure from being freed whilst unlocked */
1314 sock_hold(sk);
1315
1316 chan = l2cap_pi(sk)->chan;
1317 /* prevent chan structure from being freed whilst unlocked */
1318 l2cap_chan_hold(chan);
1319
1320 BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
1321
1322 if (chan->mode == L2CAP_MODE_ERTM &&
1323 chan->unacked_frames > 0 &&
1324 chan->state == BT_CONNECTED) {
1325 err = __l2cap_wait_ack(sk, chan);
1326
1327 /* After waiting for ACKs, check whether shutdown
1328 * has already been actioned to close the L2CAP
1329 * link such as by l2cap_disconnection_req().
1330 */
1331 if ((sk->sk_shutdown & how) == how)
1332 goto shutdown_matched;
1333 }
1334
1335 /* Try setting the RCV_SHUTDOWN bit, return early if SEND_SHUTDOWN
1336 * is already set
1337 */
1338 if ((how & RCV_SHUTDOWN) && !(sk->sk_shutdown & RCV_SHUTDOWN)) {
1339 sk->sk_shutdown |= RCV_SHUTDOWN;
1340 if ((sk->sk_shutdown & how) == how)
1341 goto shutdown_matched;
1342 }
1343
1344 sk->sk_shutdown |= SEND_SHUTDOWN;
1345 release_sock(sk);
1346
1347 l2cap_chan_lock(chan);
1348 conn = chan->conn;
1349 if (conn)
1350 /* prevent conn structure from being freed */
1351 l2cap_conn_get(conn);
1352 l2cap_chan_unlock(chan);
1353
1354 if (conn)
1355 /* mutex lock must be taken before l2cap_chan_lock() */
1356 mutex_lock(&conn->chan_lock);
1357
1358 l2cap_chan_lock(chan);
1359 l2cap_chan_close(chan, 0);
1360 l2cap_chan_unlock(chan);
1361
1362 if (conn) {
1363 mutex_unlock(&conn->chan_lock);
1364 l2cap_conn_put(conn);
1365 }
1366
1367 lock_sock(sk);
1368
1369 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1370 !(current->flags & PF_EXITING))
1371 err = bt_sock_wait_state(sk, BT_CLOSED,
1372 sk->sk_lingertime);
1373
1374shutdown_matched:
1375 l2cap_chan_put(chan);
1376 sock_put(sk);
1377
1378shutdown_already:
1379 if (!err && sk->sk_err)
1380 err = -sk->sk_err;
1381
1382 release_sock(sk);
1383
1384 BT_DBG("Sock shutdown complete err: %d", err);
1385
1386 return err;
1387}
1388
1389static int l2cap_sock_release(struct socket *sock)
1390{
1391 struct sock *sk = sock->sk;
1392 int err;
1393 struct l2cap_chan *chan;
1394
1395 BT_DBG("sock %p, sk %p", sock, sk);
1396
1397 if (!sk)
1398 return 0;
1399
1400 l2cap_sock_cleanup_listen(sk);
1401 bt_sock_unlink(&l2cap_sk_list, sk);
1402
1403 err = l2cap_sock_shutdown(sock, SHUT_RDWR);
1404 chan = l2cap_pi(sk)->chan;
1405
1406 l2cap_chan_hold(chan);
1407 l2cap_chan_lock(chan);
1408
1409 sock_orphan(sk);
1410 l2cap_sock_kill(sk);
1411
1412 l2cap_chan_unlock(chan);
1413 l2cap_chan_put(chan);
1414
1415 return err;
1416}
1417
1418static void l2cap_sock_cleanup_listen(struct sock *parent)
1419{
1420 struct sock *sk;
1421
1422 BT_DBG("parent %p state %s", parent,
1423 state_to_string(parent->sk_state));
1424
1425 /* Close not yet accepted channels */
1426 while ((sk = bt_accept_dequeue(parent, NULL))) {
1427 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1428
1429 BT_DBG("child chan %p state %s", chan,
1430 state_to_string(chan->state));
1431
1432 l2cap_chan_hold(chan);
1433 l2cap_chan_lock(chan);
1434
1435 __clear_chan_timer(chan);
1436 l2cap_chan_close(chan, ECONNRESET);
1437 l2cap_sock_kill(sk);
1438
1439 l2cap_chan_unlock(chan);
1440 l2cap_chan_put(chan);
1441 }
1442}
1443
1444static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
1445{
1446 struct sock *sk, *parent = chan->data;
1447
1448 lock_sock(parent);
1449
1450 /* Check for backlog size */
1451 if (sk_acceptq_is_full(parent)) {
1452 BT_DBG("backlog full %d", parent->sk_ack_backlog);
1453 release_sock(parent);
1454 return NULL;
1455 }
1456
1457 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
1458 GFP_ATOMIC, 0);
1459 if (!sk) {
1460 release_sock(parent);
1461 return NULL;
1462 }
1463
1464 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
1465
1466 l2cap_sock_init(sk, parent);
1467
1468 bt_accept_enqueue(parent, sk, false);
1469
1470 release_sock(parent);
1471
1472 return l2cap_pi(sk)->chan;
1473}
1474
1475static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
1476{
1477 struct sock *sk = chan->data;
1478 int err;
1479
1480 lock_sock(sk);
1481
1482 if (l2cap_pi(sk)->rx_busy_skb) {
1483 err = -ENOMEM;
1484 goto done;
1485 }
1486
1487 if (chan->mode != L2CAP_MODE_ERTM &&
1488 chan->mode != L2CAP_MODE_STREAMING) {
1489 /* Even if no filter is attached, we could potentially
1490 * get errors from security modules, etc.
1491 */
1492 err = sk_filter(sk, skb);
1493 if (err)
1494 goto done;
1495 }
1496
1497 err = __sock_queue_rcv_skb(sk, skb);
1498
1499 /* For ERTM, handle one skb that doesn't fit into the recv
1500 * buffer. This is important to do because the data frames
1501 * have already been acked, so the skb cannot be discarded.
1502 *
1503 * Notify the l2cap core that the buffer is full, so the
1504 * LOCAL_BUSY state is entered and no more frames are
1505 * acked and reassembled until there is buffer space
1506 * available.
1507 */
1508 if (err < 0 && chan->mode == L2CAP_MODE_ERTM) {
1509 l2cap_pi(sk)->rx_busy_skb = skb;
1510 l2cap_chan_busy(chan, 1);
1511 err = 0;
1512 }
1513
1514done:
1515 release_sock(sk);
1516
1517 return err;
1518}
1519
1520static void l2cap_sock_close_cb(struct l2cap_chan *chan)
1521{
1522 struct sock *sk = chan->data;
1523
1524 if (!sk)
1525 return;
1526
1527 l2cap_sock_kill(sk);
1528}
1529
1530static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
1531{
1532 struct sock *sk = chan->data;
1533 struct sock *parent;
1534
1535 if (!sk)
1536 return;
1537
1538 BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
1539
1540 /* This callback can be called both for server (BT_LISTEN)
1541 * sockets as well as "normal" ones. To avoid lockdep warnings
1542 * with child socket locking (through l2cap_sock_cleanup_listen)
1543 * we need separation into separate nesting levels. The simplest
1544 * way to accomplish this is to inherit the nesting level used
1545 * for the channel.
1546 */
1547 lock_sock_nested(sk, atomic_read(&chan->nesting));
1548
1549 parent = bt_sk(sk)->parent;
1550
1551 switch (chan->state) {
1552 case BT_OPEN:
1553 case BT_BOUND:
1554 case BT_CLOSED:
1555 break;
1556 case BT_LISTEN:
1557 l2cap_sock_cleanup_listen(sk);
1558 sk->sk_state = BT_CLOSED;
1559 chan->state = BT_CLOSED;
1560
1561 break;
1562 default:
1563 sk->sk_state = BT_CLOSED;
1564 chan->state = BT_CLOSED;
1565
1566 sk->sk_err = err;
1567
1568 if (parent) {
1569 bt_accept_unlink(sk);
1570 parent->sk_data_ready(parent);
1571 } else {
1572 sk->sk_state_change(sk);
1573 }
1574
1575 break;
1576 }
1577 release_sock(sk);
1578
1579 /* Only zap after cleanup to avoid use after free race */
1580 sock_set_flag(sk, SOCK_ZAPPED);
1581
1582}
1583
1584static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state,
1585 int err)
1586{
1587 struct sock *sk = chan->data;
1588
1589 sk->sk_state = state;
1590
1591 if (err)
1592 sk->sk_err = err;
1593}
1594
1595static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
1596 unsigned long hdr_len,
1597 unsigned long len, int nb)
1598{
1599 struct sock *sk = chan->data;
1600 struct sk_buff *skb;
1601 int err;
1602
1603 l2cap_chan_unlock(chan);
1604 skb = bt_skb_send_alloc(sk, hdr_len + len, nb, &err);
1605 l2cap_chan_lock(chan);
1606
1607 if (!skb)
1608 return ERR_PTR(err);
1609
1610 /* Channel lock is released before requesting new skb and then
1611 * reacquired thus we need to recheck channel state.
1612 */
1613 if (chan->state != BT_CONNECTED) {
1614 kfree_skb(skb);
1615 return ERR_PTR(-ENOTCONN);
1616 }
1617
1618 skb->priority = READ_ONCE(sk->sk_priority);
1619
1620 bt_cb(skb)->l2cap.chan = chan;
1621
1622 return skb;
1623}
1624
1625static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
1626{
1627 struct sock *sk = chan->data;
1628 struct sock *parent;
1629
1630 lock_sock(sk);
1631
1632 parent = bt_sk(sk)->parent;
1633
1634 BT_DBG("sk %p, parent %p", sk, parent);
1635
1636 sk->sk_state = BT_CONNECTED;
1637 sk->sk_state_change(sk);
1638
1639 if (parent)
1640 parent->sk_data_ready(parent);
1641
1642 release_sock(sk);
1643}
1644
1645static void l2cap_sock_defer_cb(struct l2cap_chan *chan)
1646{
1647 struct sock *parent, *sk = chan->data;
1648
1649 lock_sock(sk);
1650
1651 parent = bt_sk(sk)->parent;
1652 if (parent)
1653 parent->sk_data_ready(parent);
1654
1655 release_sock(sk);
1656}
1657
1658static void l2cap_sock_resume_cb(struct l2cap_chan *chan)
1659{
1660 struct sock *sk = chan->data;
1661
1662 if (test_and_clear_bit(FLAG_PENDING_SECURITY, &chan->flags)) {
1663 sk->sk_state = BT_CONNECTED;
1664 chan->state = BT_CONNECTED;
1665 }
1666
1667 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
1668 sk->sk_state_change(sk);
1669}
1670
1671static void l2cap_sock_set_shutdown_cb(struct l2cap_chan *chan)
1672{
1673 struct sock *sk = chan->data;
1674
1675 lock_sock(sk);
1676 sk->sk_shutdown = SHUTDOWN_MASK;
1677 release_sock(sk);
1678}
1679
1680static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan)
1681{
1682 struct sock *sk = chan->data;
1683
1684 return sk->sk_sndtimeo;
1685}
1686
1687static struct pid *l2cap_sock_get_peer_pid_cb(struct l2cap_chan *chan)
1688{
1689 struct sock *sk = chan->data;
1690
1691 return sk->sk_peer_pid;
1692}
1693
1694static void l2cap_sock_suspend_cb(struct l2cap_chan *chan)
1695{
1696 struct sock *sk = chan->data;
1697
1698 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
1699 sk->sk_state_change(sk);
1700}
1701
1702static int l2cap_sock_filter(struct l2cap_chan *chan, struct sk_buff *skb)
1703{
1704 struct sock *sk = chan->data;
1705
1706 switch (chan->mode) {
1707 case L2CAP_MODE_ERTM:
1708 case L2CAP_MODE_STREAMING:
1709 return sk_filter(sk, skb);
1710 }
1711
1712 return 0;
1713}
1714
1715static const struct l2cap_ops l2cap_chan_ops = {
1716 .name = "L2CAP Socket Interface",
1717 .new_connection = l2cap_sock_new_connection_cb,
1718 .recv = l2cap_sock_recv_cb,
1719 .close = l2cap_sock_close_cb,
1720 .teardown = l2cap_sock_teardown_cb,
1721 .state_change = l2cap_sock_state_change_cb,
1722 .ready = l2cap_sock_ready_cb,
1723 .defer = l2cap_sock_defer_cb,
1724 .resume = l2cap_sock_resume_cb,
1725 .suspend = l2cap_sock_suspend_cb,
1726 .set_shutdown = l2cap_sock_set_shutdown_cb,
1727 .get_sndtimeo = l2cap_sock_get_sndtimeo_cb,
1728 .get_peer_pid = l2cap_sock_get_peer_pid_cb,
1729 .alloc_skb = l2cap_sock_alloc_skb_cb,
1730 .filter = l2cap_sock_filter,
1731};
1732
1733static void l2cap_sock_destruct(struct sock *sk)
1734{
1735 BT_DBG("sk %p", sk);
1736
1737 if (l2cap_pi(sk)->chan) {
1738 l2cap_pi(sk)->chan->data = NULL;
1739 l2cap_chan_put(l2cap_pi(sk)->chan);
1740 }
1741
1742 if (l2cap_pi(sk)->rx_busy_skb) {
1743 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
1744 l2cap_pi(sk)->rx_busy_skb = NULL;
1745 }
1746
1747 skb_queue_purge(&sk->sk_receive_queue);
1748 skb_queue_purge(&sk->sk_write_queue);
1749}
1750
1751static void l2cap_skb_msg_name(struct sk_buff *skb, void *msg_name,
1752 int *msg_namelen)
1753{
1754 DECLARE_SOCKADDR(struct sockaddr_l2 *, la, msg_name);
1755
1756 memset(la, 0, sizeof(struct sockaddr_l2));
1757 la->l2_family = AF_BLUETOOTH;
1758 la->l2_psm = bt_cb(skb)->l2cap.psm;
1759 bacpy(&la->l2_bdaddr, &bt_cb(skb)->l2cap.bdaddr);
1760
1761 *msg_namelen = sizeof(struct sockaddr_l2);
1762}
1763
1764static void l2cap_sock_init(struct sock *sk, struct sock *parent)
1765{
1766 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1767
1768 BT_DBG("sk %p", sk);
1769
1770 if (parent) {
1771 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
1772
1773 sk->sk_type = parent->sk_type;
1774 bt_sk(sk)->flags = bt_sk(parent)->flags;
1775
1776 chan->chan_type = pchan->chan_type;
1777 chan->imtu = pchan->imtu;
1778 chan->omtu = pchan->omtu;
1779 chan->conf_state = pchan->conf_state;
1780 chan->mode = pchan->mode;
1781 chan->fcs = pchan->fcs;
1782 chan->max_tx = pchan->max_tx;
1783 chan->tx_win = pchan->tx_win;
1784 chan->tx_win_max = pchan->tx_win_max;
1785 chan->sec_level = pchan->sec_level;
1786 chan->flags = pchan->flags;
1787 chan->tx_credits = pchan->tx_credits;
1788 chan->rx_credits = pchan->rx_credits;
1789
1790 if (chan->chan_type == L2CAP_CHAN_FIXED) {
1791 chan->scid = pchan->scid;
1792 chan->dcid = pchan->scid;
1793 }
1794
1795 security_sk_clone(parent, sk);
1796 } else {
1797 switch (sk->sk_type) {
1798 case SOCK_RAW:
1799 chan->chan_type = L2CAP_CHAN_RAW;
1800 break;
1801 case SOCK_DGRAM:
1802 chan->chan_type = L2CAP_CHAN_CONN_LESS;
1803 bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name;
1804 break;
1805 case SOCK_SEQPACKET:
1806 case SOCK_STREAM:
1807 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
1808 break;
1809 }
1810
1811 chan->imtu = L2CAP_DEFAULT_MTU;
1812 chan->omtu = 0;
1813 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
1814 chan->mode = L2CAP_MODE_ERTM;
1815 set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
1816 } else {
1817 chan->mode = L2CAP_MODE_BASIC;
1818 }
1819
1820 l2cap_chan_set_defaults(chan);
1821 }
1822
1823 /* Default config options */
1824 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1825
1826 chan->data = sk;
1827 chan->ops = &l2cap_chan_ops;
1828}
1829
1830static struct proto l2cap_proto = {
1831 .name = "L2CAP",
1832 .owner = THIS_MODULE,
1833 .obj_size = sizeof(struct l2cap_pinfo)
1834};
1835
1836static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
1837 int proto, gfp_t prio, int kern)
1838{
1839 struct sock *sk;
1840 struct l2cap_chan *chan;
1841
1842 sk = bt_sock_alloc(net, sock, &l2cap_proto, proto, prio, kern);
1843 if (!sk)
1844 return NULL;
1845
1846 sk->sk_destruct = l2cap_sock_destruct;
1847 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1848
1849 chan = l2cap_chan_create();
1850 if (!chan) {
1851 sk_free(sk);
1852 return NULL;
1853 }
1854
1855 l2cap_chan_hold(chan);
1856
1857 l2cap_pi(sk)->chan = chan;
1858
1859 return sk;
1860}
1861
1862static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1863 int kern)
1864{
1865 struct sock *sk;
1866
1867 BT_DBG("sock %p", sock);
1868
1869 sock->state = SS_UNCONNECTED;
1870
1871 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1872 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1873 return -ESOCKTNOSUPPORT;
1874
1875 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1876 return -EPERM;
1877
1878 sock->ops = &l2cap_sock_ops;
1879
1880 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
1881 if (!sk)
1882 return -ENOMEM;
1883
1884 l2cap_sock_init(sk, NULL);
1885 bt_sock_link(&l2cap_sk_list, sk);
1886 return 0;
1887}
1888
1889static const struct proto_ops l2cap_sock_ops = {
1890 .family = PF_BLUETOOTH,
1891 .owner = THIS_MODULE,
1892 .release = l2cap_sock_release,
1893 .bind = l2cap_sock_bind,
1894 .connect = l2cap_sock_connect,
1895 .listen = l2cap_sock_listen,
1896 .accept = l2cap_sock_accept,
1897 .getname = l2cap_sock_getname,
1898 .sendmsg = l2cap_sock_sendmsg,
1899 .recvmsg = l2cap_sock_recvmsg,
1900 .poll = bt_sock_poll,
1901 .ioctl = bt_sock_ioctl,
1902 .gettstamp = sock_gettstamp,
1903 .mmap = sock_no_mmap,
1904 .socketpair = sock_no_socketpair,
1905 .shutdown = l2cap_sock_shutdown,
1906 .setsockopt = l2cap_sock_setsockopt,
1907 .getsockopt = l2cap_sock_getsockopt
1908};
1909
1910static const struct net_proto_family l2cap_sock_family_ops = {
1911 .family = PF_BLUETOOTH,
1912 .owner = THIS_MODULE,
1913 .create = l2cap_sock_create,
1914};
1915
1916int __init l2cap_init_sockets(void)
1917{
1918 int err;
1919
1920 BUILD_BUG_ON(sizeof(struct sockaddr_l2) > sizeof(struct sockaddr));
1921
1922 err = proto_register(&l2cap_proto, 0);
1923 if (err < 0)
1924 return err;
1925
1926 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1927 if (err < 0) {
1928 BT_ERR("L2CAP socket registration failed");
1929 goto error;
1930 }
1931
1932 err = bt_procfs_init(&init_net, "l2cap", &l2cap_sk_list,
1933 NULL);
1934 if (err < 0) {
1935 BT_ERR("Failed to create L2CAP proc file");
1936 bt_sock_unregister(BTPROTO_L2CAP);
1937 goto error;
1938 }
1939
1940 BT_INFO("L2CAP socket layer initialized");
1941
1942 return 0;
1943
1944error:
1945 proto_unregister(&l2cap_proto);
1946 return err;
1947}
1948
1949void l2cap_cleanup_sockets(void)
1950{
1951 bt_procfs_cleanup(&init_net, "l2cap");
1952 bt_sock_unregister(BTPROTO_L2CAP);
1953 proto_unregister(&l2cap_proto);
1954}
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5 Copyright (C) 2010 Google Inc.
6 Copyright (C) 2011 ProFUSION Embedded Systems
7
8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License version 2 as
12 published by the Free Software Foundation;
13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
17 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
18 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
23 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
24 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
25 SOFTWARE IS DISCLAIMED.
26*/
27
28/* Bluetooth L2CAP sockets. */
29
30#include <linux/module.h>
31#include <linux/export.h>
32
33#include <net/bluetooth/bluetooth.h>
34#include <net/bluetooth/hci_core.h>
35#include <net/bluetooth/l2cap.h>
36
37#include "smp.h"
38
39static struct bt_sock_list l2cap_sk_list = {
40 .lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
41};
42
43static const struct proto_ops l2cap_sock_ops;
44static void l2cap_sock_init(struct sock *sk, struct sock *parent);
45static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
46 int proto, gfp_t prio, int kern);
47
48bool l2cap_is_socket(struct socket *sock)
49{
50 return sock && sock->ops == &l2cap_sock_ops;
51}
52EXPORT_SYMBOL(l2cap_is_socket);
53
54static int l2cap_validate_bredr_psm(u16 psm)
55{
56 /* PSM must be odd and lsb of upper byte must be 0 */
57 if ((psm & 0x0101) != 0x0001)
58 return -EINVAL;
59
60 /* Restrict usage of well-known PSMs */
61 if (psm < L2CAP_PSM_DYN_START && !capable(CAP_NET_BIND_SERVICE))
62 return -EACCES;
63
64 return 0;
65}
66
67static int l2cap_validate_le_psm(u16 psm)
68{
69 /* Valid LE_PSM ranges are defined only until 0x00ff */
70 if (psm > L2CAP_PSM_LE_DYN_END)
71 return -EINVAL;
72
73 /* Restrict fixed, SIG assigned PSM values to CAP_NET_BIND_SERVICE */
74 if (psm < L2CAP_PSM_LE_DYN_START && !capable(CAP_NET_BIND_SERVICE))
75 return -EACCES;
76
77 return 0;
78}
79
80static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
81{
82 struct sock *sk = sock->sk;
83 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
84 struct sockaddr_l2 la;
85 int len, err = 0;
86
87 BT_DBG("sk %p", sk);
88
89 if (!addr || addr->sa_family != AF_BLUETOOTH)
90 return -EINVAL;
91
92 memset(&la, 0, sizeof(la));
93 len = min_t(unsigned int, sizeof(la), alen);
94 memcpy(&la, addr, len);
95
96 if (la.l2_cid && la.l2_psm)
97 return -EINVAL;
98
99 if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
100 return -EINVAL;
101
102 if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
103 /* We only allow ATT user space socket */
104 if (la.l2_cid &&
105 la.l2_cid != cpu_to_le16(L2CAP_CID_ATT))
106 return -EINVAL;
107 }
108
109 lock_sock(sk);
110
111 if (sk->sk_state != BT_OPEN) {
112 err = -EBADFD;
113 goto done;
114 }
115
116 if (la.l2_psm) {
117 __u16 psm = __le16_to_cpu(la.l2_psm);
118
119 if (la.l2_bdaddr_type == BDADDR_BREDR)
120 err = l2cap_validate_bredr_psm(psm);
121 else
122 err = l2cap_validate_le_psm(psm);
123
124 if (err)
125 goto done;
126 }
127
128 bacpy(&chan->src, &la.l2_bdaddr);
129 chan->src_type = la.l2_bdaddr_type;
130
131 if (la.l2_cid)
132 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
133 else
134 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
135
136 if (err < 0)
137 goto done;
138
139 switch (chan->chan_type) {
140 case L2CAP_CHAN_CONN_LESS:
141 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_3DSP)
142 chan->sec_level = BT_SECURITY_SDP;
143 break;
144 case L2CAP_CHAN_CONN_ORIENTED:
145 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP ||
146 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
147 chan->sec_level = BT_SECURITY_SDP;
148 break;
149 case L2CAP_CHAN_RAW:
150 chan->sec_level = BT_SECURITY_SDP;
151 break;
152 case L2CAP_CHAN_FIXED:
153 /* Fixed channels default to the L2CAP core not holding a
154 * hci_conn reference for them. For fixed channels mapping to
155 * L2CAP sockets we do want to hold a reference so set the
156 * appropriate flag to request it.
157 */
158 set_bit(FLAG_HOLD_HCI_CONN, &chan->flags);
159 break;
160 }
161
162 if (chan->psm && bdaddr_type_is_le(chan->src_type))
163 chan->mode = L2CAP_MODE_LE_FLOWCTL;
164
165 chan->state = BT_BOUND;
166 sk->sk_state = BT_BOUND;
167
168done:
169 release_sock(sk);
170 return err;
171}
172
173static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,
174 int alen, int flags)
175{
176 struct sock *sk = sock->sk;
177 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
178 struct sockaddr_l2 la;
179 int len, err = 0;
180
181 BT_DBG("sk %p", sk);
182
183 if (!addr || alen < sizeof(addr->sa_family) ||
184 addr->sa_family != AF_BLUETOOTH)
185 return -EINVAL;
186
187 memset(&la, 0, sizeof(la));
188 len = min_t(unsigned int, sizeof(la), alen);
189 memcpy(&la, addr, len);
190
191 if (la.l2_cid && la.l2_psm)
192 return -EINVAL;
193
194 if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
195 return -EINVAL;
196
197 /* Check that the socket wasn't bound to something that
198 * conflicts with the address given to connect(). If chan->src
199 * is BDADDR_ANY it means bind() was never used, in which case
200 * chan->src_type and la.l2_bdaddr_type do not need to match.
201 */
202 if (chan->src_type == BDADDR_BREDR && bacmp(&chan->src, BDADDR_ANY) &&
203 bdaddr_type_is_le(la.l2_bdaddr_type)) {
204 /* Old user space versions will try to incorrectly bind
205 * the ATT socket using BDADDR_BREDR. We need to accept
206 * this and fix up the source address type only when
207 * both the source CID and destination CID indicate
208 * ATT. Anything else is an invalid combination.
209 */
210 if (chan->scid != L2CAP_CID_ATT ||
211 la.l2_cid != cpu_to_le16(L2CAP_CID_ATT))
212 return -EINVAL;
213
214 /* We don't have the hdev available here to make a
215 * better decision on random vs public, but since all
216 * user space versions that exhibit this issue anyway do
217 * not support random local addresses assuming public
218 * here is good enough.
219 */
220 chan->src_type = BDADDR_LE_PUBLIC;
221 }
222
223 if (chan->src_type != BDADDR_BREDR && la.l2_bdaddr_type == BDADDR_BREDR)
224 return -EINVAL;
225
226 if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
227 /* We only allow ATT user space socket */
228 if (la.l2_cid &&
229 la.l2_cid != cpu_to_le16(L2CAP_CID_ATT))
230 return -EINVAL;
231 }
232
233 if (chan->psm && bdaddr_type_is_le(chan->src_type))
234 chan->mode = L2CAP_MODE_LE_FLOWCTL;
235
236 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
237 &la.l2_bdaddr, la.l2_bdaddr_type);
238 if (err)
239 return err;
240
241 lock_sock(sk);
242
243 err = bt_sock_wait_state(sk, BT_CONNECTED,
244 sock_sndtimeo(sk, flags & O_NONBLOCK));
245
246 release_sock(sk);
247
248 return err;
249}
250
251static int l2cap_sock_listen(struct socket *sock, int backlog)
252{
253 struct sock *sk = sock->sk;
254 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
255 int err = 0;
256
257 BT_DBG("sk %p backlog %d", sk, backlog);
258
259 lock_sock(sk);
260
261 if (sk->sk_state != BT_BOUND) {
262 err = -EBADFD;
263 goto done;
264 }
265
266 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
267 err = -EINVAL;
268 goto done;
269 }
270
271 switch (chan->mode) {
272 case L2CAP_MODE_BASIC:
273 case L2CAP_MODE_LE_FLOWCTL:
274 break;
275 case L2CAP_MODE_ERTM:
276 case L2CAP_MODE_STREAMING:
277 if (!disable_ertm)
278 break;
279 /* fall through */
280 default:
281 err = -EOPNOTSUPP;
282 goto done;
283 }
284
285 sk->sk_max_ack_backlog = backlog;
286 sk->sk_ack_backlog = 0;
287
288 /* Listening channels need to use nested locking in order not to
289 * cause lockdep warnings when the created child channels end up
290 * being locked in the same thread as the parent channel.
291 */
292 atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);
293
294 chan->state = BT_LISTEN;
295 sk->sk_state = BT_LISTEN;
296
297done:
298 release_sock(sk);
299 return err;
300}
301
302static int l2cap_sock_accept(struct socket *sock, struct socket *newsock,
303 int flags)
304{
305 DEFINE_WAIT_FUNC(wait, woken_wake_function);
306 struct sock *sk = sock->sk, *nsk;
307 long timeo;
308 int err = 0;
309
310 lock_sock_nested(sk, L2CAP_NESTING_PARENT);
311
312 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
313
314 BT_DBG("sk %p timeo %ld", sk, timeo);
315
316 /* Wait for an incoming connection. (wake-one). */
317 add_wait_queue_exclusive(sk_sleep(sk), &wait);
318 while (1) {
319 if (sk->sk_state != BT_LISTEN) {
320 err = -EBADFD;
321 break;
322 }
323
324 nsk = bt_accept_dequeue(sk, newsock);
325 if (nsk)
326 break;
327
328 if (!timeo) {
329 err = -EAGAIN;
330 break;
331 }
332
333 if (signal_pending(current)) {
334 err = sock_intr_errno(timeo);
335 break;
336 }
337
338 release_sock(sk);
339
340 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
341
342 lock_sock_nested(sk, L2CAP_NESTING_PARENT);
343 }
344 remove_wait_queue(sk_sleep(sk), &wait);
345
346 if (err)
347 goto done;
348
349 newsock->state = SS_CONNECTED;
350
351 BT_DBG("new socket %p", nsk);
352
353done:
354 release_sock(sk);
355 return err;
356}
357
358static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
359 int *len, int peer)
360{
361 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
362 struct sock *sk = sock->sk;
363 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
364
365 BT_DBG("sock %p, sk %p", sock, sk);
366
367 if (peer && sk->sk_state != BT_CONNECTED &&
368 sk->sk_state != BT_CONNECT && sk->sk_state != BT_CONNECT2 &&
369 sk->sk_state != BT_CONFIG)
370 return -ENOTCONN;
371
372 memset(la, 0, sizeof(struct sockaddr_l2));
373 addr->sa_family = AF_BLUETOOTH;
374 *len = sizeof(struct sockaddr_l2);
375
376 la->l2_psm = chan->psm;
377
378 if (peer) {
379 bacpy(&la->l2_bdaddr, &chan->dst);
380 la->l2_cid = cpu_to_le16(chan->dcid);
381 la->l2_bdaddr_type = chan->dst_type;
382 } else {
383 bacpy(&la->l2_bdaddr, &chan->src);
384 la->l2_cid = cpu_to_le16(chan->scid);
385 la->l2_bdaddr_type = chan->src_type;
386 }
387
388 return 0;
389}
390
391static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
392 char __user *optval, int __user *optlen)
393{
394 struct sock *sk = sock->sk;
395 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
396 struct l2cap_options opts;
397 struct l2cap_conninfo cinfo;
398 int len, err = 0;
399 u32 opt;
400
401 BT_DBG("sk %p", sk);
402
403 if (get_user(len, optlen))
404 return -EFAULT;
405
406 lock_sock(sk);
407
408 switch (optname) {
409 case L2CAP_OPTIONS:
410 /* LE sockets should use BT_SNDMTU/BT_RCVMTU, but since
411 * legacy ATT code depends on getsockopt for
412 * L2CAP_OPTIONS we need to let this pass.
413 */
414 if (bdaddr_type_is_le(chan->src_type) &&
415 chan->scid != L2CAP_CID_ATT) {
416 err = -EINVAL;
417 break;
418 }
419
420 memset(&opts, 0, sizeof(opts));
421 opts.imtu = chan->imtu;
422 opts.omtu = chan->omtu;
423 opts.flush_to = chan->flush_to;
424 opts.mode = chan->mode;
425 opts.fcs = chan->fcs;
426 opts.max_tx = chan->max_tx;
427 opts.txwin_size = chan->tx_win;
428
429 len = min_t(unsigned int, len, sizeof(opts));
430 if (copy_to_user(optval, (char *) &opts, len))
431 err = -EFAULT;
432
433 break;
434
435 case L2CAP_LM:
436 switch (chan->sec_level) {
437 case BT_SECURITY_LOW:
438 opt = L2CAP_LM_AUTH;
439 break;
440 case BT_SECURITY_MEDIUM:
441 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
442 break;
443 case BT_SECURITY_HIGH:
444 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
445 L2CAP_LM_SECURE;
446 break;
447 case BT_SECURITY_FIPS:
448 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
449 L2CAP_LM_SECURE | L2CAP_LM_FIPS;
450 break;
451 default:
452 opt = 0;
453 break;
454 }
455
456 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
457 opt |= L2CAP_LM_MASTER;
458
459 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
460 opt |= L2CAP_LM_RELIABLE;
461
462 if (put_user(opt, (u32 __user *) optval))
463 err = -EFAULT;
464
465 break;
466
467 case L2CAP_CONNINFO:
468 if (sk->sk_state != BT_CONNECTED &&
469 !(sk->sk_state == BT_CONNECT2 &&
470 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
471 err = -ENOTCONN;
472 break;
473 }
474
475 memset(&cinfo, 0, sizeof(cinfo));
476 cinfo.hci_handle = chan->conn->hcon->handle;
477 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
478
479 len = min_t(unsigned int, len, sizeof(cinfo));
480 if (copy_to_user(optval, (char *) &cinfo, len))
481 err = -EFAULT;
482
483 break;
484
485 default:
486 err = -ENOPROTOOPT;
487 break;
488 }
489
490 release_sock(sk);
491 return err;
492}
493
494static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
495 char __user *optval, int __user *optlen)
496{
497 struct sock *sk = sock->sk;
498 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
499 struct bt_security sec;
500 struct bt_power pwr;
501 int len, err = 0;
502
503 BT_DBG("sk %p", sk);
504
505 if (level == SOL_L2CAP)
506 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
507
508 if (level != SOL_BLUETOOTH)
509 return -ENOPROTOOPT;
510
511 if (get_user(len, optlen))
512 return -EFAULT;
513
514 lock_sock(sk);
515
516 switch (optname) {
517 case BT_SECURITY:
518 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
519 chan->chan_type != L2CAP_CHAN_FIXED &&
520 chan->chan_type != L2CAP_CHAN_RAW) {
521 err = -EINVAL;
522 break;
523 }
524
525 memset(&sec, 0, sizeof(sec));
526 if (chan->conn) {
527 sec.level = chan->conn->hcon->sec_level;
528
529 if (sk->sk_state == BT_CONNECTED)
530 sec.key_size = chan->conn->hcon->enc_key_size;
531 } else {
532 sec.level = chan->sec_level;
533 }
534
535 len = min_t(unsigned int, len, sizeof(sec));
536 if (copy_to_user(optval, (char *) &sec, len))
537 err = -EFAULT;
538
539 break;
540
541 case BT_DEFER_SETUP:
542 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
543 err = -EINVAL;
544 break;
545 }
546
547 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
548 (u32 __user *) optval))
549 err = -EFAULT;
550
551 break;
552
553 case BT_FLUSHABLE:
554 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
555 (u32 __user *) optval))
556 err = -EFAULT;
557
558 break;
559
560 case BT_POWER:
561 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
562 && sk->sk_type != SOCK_RAW) {
563 err = -EINVAL;
564 break;
565 }
566
567 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
568
569 len = min_t(unsigned int, len, sizeof(pwr));
570 if (copy_to_user(optval, (char *) &pwr, len))
571 err = -EFAULT;
572
573 break;
574
575 case BT_CHANNEL_POLICY:
576 if (put_user(chan->chan_policy, (u32 __user *) optval))
577 err = -EFAULT;
578 break;
579
580 case BT_SNDMTU:
581 if (!bdaddr_type_is_le(chan->src_type)) {
582 err = -EINVAL;
583 break;
584 }
585
586 if (sk->sk_state != BT_CONNECTED) {
587 err = -ENOTCONN;
588 break;
589 }
590
591 if (put_user(chan->omtu, (u16 __user *) optval))
592 err = -EFAULT;
593 break;
594
595 case BT_RCVMTU:
596 if (!bdaddr_type_is_le(chan->src_type)) {
597 err = -EINVAL;
598 break;
599 }
600
601 if (put_user(chan->imtu, (u16 __user *) optval))
602 err = -EFAULT;
603 break;
604
605 default:
606 err = -ENOPROTOOPT;
607 break;
608 }
609
610 release_sock(sk);
611 return err;
612}
613
614static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
615{
616 switch (chan->scid) {
617 case L2CAP_CID_ATT:
618 if (mtu < L2CAP_LE_MIN_MTU)
619 return false;
620 break;
621
622 default:
623 if (mtu < L2CAP_DEFAULT_MIN_MTU)
624 return false;
625 }
626
627 return true;
628}
629
630static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
631 char __user *optval, unsigned int optlen)
632{
633 struct sock *sk = sock->sk;
634 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
635 struct l2cap_options opts;
636 int len, err = 0;
637 u32 opt;
638
639 BT_DBG("sk %p", sk);
640
641 lock_sock(sk);
642
643 switch (optname) {
644 case L2CAP_OPTIONS:
645 if (bdaddr_type_is_le(chan->src_type)) {
646 err = -EINVAL;
647 break;
648 }
649
650 if (sk->sk_state == BT_CONNECTED) {
651 err = -EINVAL;
652 break;
653 }
654
655 opts.imtu = chan->imtu;
656 opts.omtu = chan->omtu;
657 opts.flush_to = chan->flush_to;
658 opts.mode = chan->mode;
659 opts.fcs = chan->fcs;
660 opts.max_tx = chan->max_tx;
661 opts.txwin_size = chan->tx_win;
662
663 len = min_t(unsigned int, sizeof(opts), optlen);
664 if (copy_from_user((char *) &opts, optval, len)) {
665 err = -EFAULT;
666 break;
667 }
668
669 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
670 err = -EINVAL;
671 break;
672 }
673
674 if (!l2cap_valid_mtu(chan, opts.imtu)) {
675 err = -EINVAL;
676 break;
677 }
678
679 chan->mode = opts.mode;
680 switch (chan->mode) {
681 case L2CAP_MODE_LE_FLOWCTL:
682 break;
683 case L2CAP_MODE_BASIC:
684 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
685 break;
686 case L2CAP_MODE_ERTM:
687 case L2CAP_MODE_STREAMING:
688 if (!disable_ertm)
689 break;
690 /* fall through */
691 default:
692 err = -EINVAL;
693 break;
694 }
695
696 chan->imtu = opts.imtu;
697 chan->omtu = opts.omtu;
698 chan->fcs = opts.fcs;
699 chan->max_tx = opts.max_tx;
700 chan->tx_win = opts.txwin_size;
701 chan->flush_to = opts.flush_to;
702 break;
703
704 case L2CAP_LM:
705 if (get_user(opt, (u32 __user *) optval)) {
706 err = -EFAULT;
707 break;
708 }
709
710 if (opt & L2CAP_LM_FIPS) {
711 err = -EINVAL;
712 break;
713 }
714
715 if (opt & L2CAP_LM_AUTH)
716 chan->sec_level = BT_SECURITY_LOW;
717 if (opt & L2CAP_LM_ENCRYPT)
718 chan->sec_level = BT_SECURITY_MEDIUM;
719 if (opt & L2CAP_LM_SECURE)
720 chan->sec_level = BT_SECURITY_HIGH;
721
722 if (opt & L2CAP_LM_MASTER)
723 set_bit(FLAG_ROLE_SWITCH, &chan->flags);
724 else
725 clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
726
727 if (opt & L2CAP_LM_RELIABLE)
728 set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
729 else
730 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
731 break;
732
733 default:
734 err = -ENOPROTOOPT;
735 break;
736 }
737
738 release_sock(sk);
739 return err;
740}
741
742static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
743 char __user *optval, unsigned int optlen)
744{
745 struct sock *sk = sock->sk;
746 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
747 struct bt_security sec;
748 struct bt_power pwr;
749 struct l2cap_conn *conn;
750 int len, err = 0;
751 u32 opt;
752
753 BT_DBG("sk %p", sk);
754
755 if (level == SOL_L2CAP)
756 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
757
758 if (level != SOL_BLUETOOTH)
759 return -ENOPROTOOPT;
760
761 lock_sock(sk);
762
763 switch (optname) {
764 case BT_SECURITY:
765 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
766 chan->chan_type != L2CAP_CHAN_FIXED &&
767 chan->chan_type != L2CAP_CHAN_RAW) {
768 err = -EINVAL;
769 break;
770 }
771
772 sec.level = BT_SECURITY_LOW;
773
774 len = min_t(unsigned int, sizeof(sec), optlen);
775 if (copy_from_user((char *) &sec, optval, len)) {
776 err = -EFAULT;
777 break;
778 }
779
780 if (sec.level < BT_SECURITY_LOW ||
781 sec.level > BT_SECURITY_HIGH) {
782 err = -EINVAL;
783 break;
784 }
785
786 chan->sec_level = sec.level;
787
788 if (!chan->conn)
789 break;
790
791 conn = chan->conn;
792
793 /*change security for LE channels */
794 if (chan->scid == L2CAP_CID_ATT) {
795 if (smp_conn_security(conn->hcon, sec.level))
796 break;
797 set_bit(FLAG_PENDING_SECURITY, &chan->flags);
798 sk->sk_state = BT_CONFIG;
799 chan->state = BT_CONFIG;
800
801 /* or for ACL link */
802 } else if ((sk->sk_state == BT_CONNECT2 &&
803 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
804 sk->sk_state == BT_CONNECTED) {
805 if (!l2cap_chan_check_security(chan, true))
806 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
807 else
808 sk->sk_state_change(sk);
809 } else {
810 err = -EINVAL;
811 }
812 break;
813
814 case BT_DEFER_SETUP:
815 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
816 err = -EINVAL;
817 break;
818 }
819
820 if (get_user(opt, (u32 __user *) optval)) {
821 err = -EFAULT;
822 break;
823 }
824
825 if (opt) {
826 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
827 set_bit(FLAG_DEFER_SETUP, &chan->flags);
828 } else {
829 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
830 clear_bit(FLAG_DEFER_SETUP, &chan->flags);
831 }
832 break;
833
834 case BT_FLUSHABLE:
835 if (get_user(opt, (u32 __user *) optval)) {
836 err = -EFAULT;
837 break;
838 }
839
840 if (opt > BT_FLUSHABLE_ON) {
841 err = -EINVAL;
842 break;
843 }
844
845 if (opt == BT_FLUSHABLE_OFF) {
846 conn = chan->conn;
847 /* proceed further only when we have l2cap_conn and
848 No Flush support in the LM */
849 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
850 err = -EINVAL;
851 break;
852 }
853 }
854
855 if (opt)
856 set_bit(FLAG_FLUSHABLE, &chan->flags);
857 else
858 clear_bit(FLAG_FLUSHABLE, &chan->flags);
859 break;
860
861 case BT_POWER:
862 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
863 chan->chan_type != L2CAP_CHAN_RAW) {
864 err = -EINVAL;
865 break;
866 }
867
868 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
869
870 len = min_t(unsigned int, sizeof(pwr), optlen);
871 if (copy_from_user((char *) &pwr, optval, len)) {
872 err = -EFAULT;
873 break;
874 }
875
876 if (pwr.force_active)
877 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
878 else
879 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
880 break;
881
882 case BT_CHANNEL_POLICY:
883 if (get_user(opt, (u32 __user *) optval)) {
884 err = -EFAULT;
885 break;
886 }
887
888 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
889 err = -EINVAL;
890 break;
891 }
892
893 if (chan->mode != L2CAP_MODE_ERTM &&
894 chan->mode != L2CAP_MODE_STREAMING) {
895 err = -EOPNOTSUPP;
896 break;
897 }
898
899 chan->chan_policy = (u8) opt;
900
901 if (sk->sk_state == BT_CONNECTED &&
902 chan->move_role == L2CAP_MOVE_ROLE_NONE)
903 l2cap_move_start(chan);
904
905 break;
906
907 case BT_SNDMTU:
908 if (!bdaddr_type_is_le(chan->src_type)) {
909 err = -EINVAL;
910 break;
911 }
912
913 /* Setting is not supported as it's the remote side that
914 * decides this.
915 */
916 err = -EPERM;
917 break;
918
919 case BT_RCVMTU:
920 if (!bdaddr_type_is_le(chan->src_type)) {
921 err = -EINVAL;
922 break;
923 }
924
925 if (sk->sk_state == BT_CONNECTED) {
926 err = -EISCONN;
927 break;
928 }
929
930 if (get_user(opt, (u32 __user *) optval)) {
931 err = -EFAULT;
932 break;
933 }
934
935 chan->imtu = opt;
936 break;
937
938 default:
939 err = -ENOPROTOOPT;
940 break;
941 }
942
943 release_sock(sk);
944 return err;
945}
946
947static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg,
948 size_t len)
949{
950 struct sock *sk = sock->sk;
951 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
952 int err;
953
954 BT_DBG("sock %p, sk %p", sock, sk);
955
956 err = sock_error(sk);
957 if (err)
958 return err;
959
960 if (msg->msg_flags & MSG_OOB)
961 return -EOPNOTSUPP;
962
963 if (sk->sk_state != BT_CONNECTED)
964 return -ENOTCONN;
965
966 lock_sock(sk);
967 err = bt_sock_wait_ready(sk, msg->msg_flags);
968 release_sock(sk);
969 if (err)
970 return err;
971
972 l2cap_chan_lock(chan);
973 err = l2cap_chan_send(chan, msg, len);
974 l2cap_chan_unlock(chan);
975
976 return err;
977}
978
979static int l2cap_sock_recvmsg(struct socket *sock, struct msghdr *msg,
980 size_t len, int flags)
981{
982 struct sock *sk = sock->sk;
983 struct l2cap_pinfo *pi = l2cap_pi(sk);
984 int err;
985
986 lock_sock(sk);
987
988 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
989 &bt_sk(sk)->flags)) {
990 if (bdaddr_type_is_le(pi->chan->src_type)) {
991 sk->sk_state = BT_CONNECTED;
992 pi->chan->state = BT_CONNECTED;
993 __l2cap_le_connect_rsp_defer(pi->chan);
994 } else {
995 sk->sk_state = BT_CONFIG;
996 pi->chan->state = BT_CONFIG;
997 __l2cap_connect_rsp_defer(pi->chan);
998 }
999
1000 err = 0;
1001 goto done;
1002 }
1003
1004 release_sock(sk);
1005
1006 if (sock->type == SOCK_STREAM)
1007 err = bt_sock_stream_recvmsg(sock, msg, len, flags);
1008 else
1009 err = bt_sock_recvmsg(sock, msg, len, flags);
1010
1011 if (pi->chan->mode != L2CAP_MODE_ERTM)
1012 return err;
1013
1014 /* Attempt to put pending rx data in the socket buffer */
1015
1016 lock_sock(sk);
1017
1018 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
1019 goto done;
1020
1021 if (pi->rx_busy_skb) {
1022 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
1023 pi->rx_busy_skb = NULL;
1024 else
1025 goto done;
1026 }
1027
1028 /* Restore data flow when half of the receive buffer is
1029 * available. This avoids resending large numbers of
1030 * frames.
1031 */
1032 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
1033 l2cap_chan_busy(pi->chan, 0);
1034
1035done:
1036 release_sock(sk);
1037 return err;
1038}
1039
1040/* Kill socket (only if zapped and orphan)
1041 * Must be called on unlocked socket.
1042 */
1043static void l2cap_sock_kill(struct sock *sk)
1044{
1045 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
1046 return;
1047
1048 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
1049
1050 /* Kill poor orphan */
1051
1052 l2cap_chan_put(l2cap_pi(sk)->chan);
1053 sock_set_flag(sk, SOCK_DEAD);
1054 sock_put(sk);
1055}
1056
1057static int __l2cap_wait_ack(struct sock *sk, struct l2cap_chan *chan)
1058{
1059 DECLARE_WAITQUEUE(wait, current);
1060 int err = 0;
1061 int timeo = L2CAP_WAIT_ACK_POLL_PERIOD;
1062 /* Timeout to prevent infinite loop */
1063 unsigned long timeout = jiffies + L2CAP_WAIT_ACK_TIMEOUT;
1064
1065 add_wait_queue(sk_sleep(sk), &wait);
1066 set_current_state(TASK_INTERRUPTIBLE);
1067 do {
1068 BT_DBG("Waiting for %d ACKs, timeout %04d ms",
1069 chan->unacked_frames, time_after(jiffies, timeout) ? 0 :
1070 jiffies_to_msecs(timeout - jiffies));
1071
1072 if (!timeo)
1073 timeo = L2CAP_WAIT_ACK_POLL_PERIOD;
1074
1075 if (signal_pending(current)) {
1076 err = sock_intr_errno(timeo);
1077 break;
1078 }
1079
1080 release_sock(sk);
1081 timeo = schedule_timeout(timeo);
1082 lock_sock(sk);
1083 set_current_state(TASK_INTERRUPTIBLE);
1084
1085 err = sock_error(sk);
1086 if (err)
1087 break;
1088
1089 if (time_after(jiffies, timeout)) {
1090 err = -ENOLINK;
1091 break;
1092 }
1093
1094 } while (chan->unacked_frames > 0 &&
1095 chan->state == BT_CONNECTED);
1096
1097 set_current_state(TASK_RUNNING);
1098 remove_wait_queue(sk_sleep(sk), &wait);
1099 return err;
1100}
1101
1102static int l2cap_sock_shutdown(struct socket *sock, int how)
1103{
1104 struct sock *sk = sock->sk;
1105 struct l2cap_chan *chan;
1106 struct l2cap_conn *conn;
1107 int err = 0;
1108
1109 BT_DBG("sock %p, sk %p", sock, sk);
1110
1111 if (!sk)
1112 return 0;
1113
1114 lock_sock(sk);
1115
1116 if (sk->sk_shutdown)
1117 goto shutdown_already;
1118
1119 BT_DBG("Handling sock shutdown");
1120
1121 /* prevent sk structure from being freed whilst unlocked */
1122 sock_hold(sk);
1123
1124 chan = l2cap_pi(sk)->chan;
1125 /* prevent chan structure from being freed whilst unlocked */
1126 l2cap_chan_hold(chan);
1127
1128 BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
1129
1130 if (chan->mode == L2CAP_MODE_ERTM &&
1131 chan->unacked_frames > 0 &&
1132 chan->state == BT_CONNECTED) {
1133 err = __l2cap_wait_ack(sk, chan);
1134
1135 /* After waiting for ACKs, check whether shutdown
1136 * has already been actioned to close the L2CAP
1137 * link such as by l2cap_disconnection_req().
1138 */
1139 if (sk->sk_shutdown)
1140 goto has_shutdown;
1141 }
1142
1143 sk->sk_shutdown = SHUTDOWN_MASK;
1144 release_sock(sk);
1145
1146 l2cap_chan_lock(chan);
1147 conn = chan->conn;
1148 if (conn)
1149 /* prevent conn structure from being freed */
1150 l2cap_conn_get(conn);
1151 l2cap_chan_unlock(chan);
1152
1153 if (conn)
1154 /* mutex lock must be taken before l2cap_chan_lock() */
1155 mutex_lock(&conn->chan_lock);
1156
1157 l2cap_chan_lock(chan);
1158 l2cap_chan_close(chan, 0);
1159 l2cap_chan_unlock(chan);
1160
1161 if (conn) {
1162 mutex_unlock(&conn->chan_lock);
1163 l2cap_conn_put(conn);
1164 }
1165
1166 lock_sock(sk);
1167
1168 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1169 !(current->flags & PF_EXITING))
1170 err = bt_sock_wait_state(sk, BT_CLOSED,
1171 sk->sk_lingertime);
1172
1173has_shutdown:
1174 l2cap_chan_put(chan);
1175 sock_put(sk);
1176
1177shutdown_already:
1178 if (!err && sk->sk_err)
1179 err = -sk->sk_err;
1180
1181 release_sock(sk);
1182
1183 BT_DBG("Sock shutdown complete err: %d", err);
1184
1185 return err;
1186}
1187
1188static int l2cap_sock_release(struct socket *sock)
1189{
1190 struct sock *sk = sock->sk;
1191 int err;
1192
1193 BT_DBG("sock %p, sk %p", sock, sk);
1194
1195 if (!sk)
1196 return 0;
1197
1198 bt_sock_unlink(&l2cap_sk_list, sk);
1199
1200 err = l2cap_sock_shutdown(sock, 2);
1201
1202 sock_orphan(sk);
1203 l2cap_sock_kill(sk);
1204 return err;
1205}
1206
1207static void l2cap_sock_cleanup_listen(struct sock *parent)
1208{
1209 struct sock *sk;
1210
1211 BT_DBG("parent %p state %s", parent,
1212 state_to_string(parent->sk_state));
1213
1214 /* Close not yet accepted channels */
1215 while ((sk = bt_accept_dequeue(parent, NULL))) {
1216 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1217
1218 BT_DBG("child chan %p state %s", chan,
1219 state_to_string(chan->state));
1220
1221 l2cap_chan_lock(chan);
1222 __clear_chan_timer(chan);
1223 l2cap_chan_close(chan, ECONNRESET);
1224 l2cap_chan_unlock(chan);
1225
1226 l2cap_sock_kill(sk);
1227 }
1228}
1229
1230static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
1231{
1232 struct sock *sk, *parent = chan->data;
1233
1234 lock_sock(parent);
1235
1236 /* Check for backlog size */
1237 if (sk_acceptq_is_full(parent)) {
1238 BT_DBG("backlog full %d", parent->sk_ack_backlog);
1239 release_sock(parent);
1240 return NULL;
1241 }
1242
1243 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
1244 GFP_ATOMIC, 0);
1245 if (!sk) {
1246 release_sock(parent);
1247 return NULL;
1248 }
1249
1250 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
1251
1252 l2cap_sock_init(sk, parent);
1253
1254 bt_accept_enqueue(parent, sk);
1255
1256 release_sock(parent);
1257
1258 return l2cap_pi(sk)->chan;
1259}
1260
1261static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
1262{
1263 struct sock *sk = chan->data;
1264 int err;
1265
1266 lock_sock(sk);
1267
1268 if (l2cap_pi(sk)->rx_busy_skb) {
1269 err = -ENOMEM;
1270 goto done;
1271 }
1272
1273 err = sock_queue_rcv_skb(sk, skb);
1274
1275 /* For ERTM, handle one skb that doesn't fit into the recv
1276 * buffer. This is important to do because the data frames
1277 * have already been acked, so the skb cannot be discarded.
1278 *
1279 * Notify the l2cap core that the buffer is full, so the
1280 * LOCAL_BUSY state is entered and no more frames are
1281 * acked and reassembled until there is buffer space
1282 * available.
1283 */
1284 if (err < 0 && chan->mode == L2CAP_MODE_ERTM) {
1285 l2cap_pi(sk)->rx_busy_skb = skb;
1286 l2cap_chan_busy(chan, 1);
1287 err = 0;
1288 }
1289
1290done:
1291 release_sock(sk);
1292
1293 return err;
1294}
1295
1296static void l2cap_sock_close_cb(struct l2cap_chan *chan)
1297{
1298 struct sock *sk = chan->data;
1299
1300 l2cap_sock_kill(sk);
1301}
1302
1303static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
1304{
1305 struct sock *sk = chan->data;
1306 struct sock *parent;
1307
1308 BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
1309
1310 /* This callback can be called both for server (BT_LISTEN)
1311 * sockets as well as "normal" ones. To avoid lockdep warnings
1312 * with child socket locking (through l2cap_sock_cleanup_listen)
1313 * we need separation into separate nesting levels. The simplest
1314 * way to accomplish this is to inherit the nesting level used
1315 * for the channel.
1316 */
1317 lock_sock_nested(sk, atomic_read(&chan->nesting));
1318
1319 parent = bt_sk(sk)->parent;
1320
1321 sock_set_flag(sk, SOCK_ZAPPED);
1322
1323 switch (chan->state) {
1324 case BT_OPEN:
1325 case BT_BOUND:
1326 case BT_CLOSED:
1327 break;
1328 case BT_LISTEN:
1329 l2cap_sock_cleanup_listen(sk);
1330 sk->sk_state = BT_CLOSED;
1331 chan->state = BT_CLOSED;
1332
1333 break;
1334 default:
1335 sk->sk_state = BT_CLOSED;
1336 chan->state = BT_CLOSED;
1337
1338 sk->sk_err = err;
1339
1340 if (parent) {
1341 bt_accept_unlink(sk);
1342 parent->sk_data_ready(parent);
1343 } else {
1344 sk->sk_state_change(sk);
1345 }
1346
1347 break;
1348 }
1349
1350 release_sock(sk);
1351}
1352
1353static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state,
1354 int err)
1355{
1356 struct sock *sk = chan->data;
1357
1358 sk->sk_state = state;
1359
1360 if (err)
1361 sk->sk_err = err;
1362}
1363
1364static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
1365 unsigned long hdr_len,
1366 unsigned long len, int nb)
1367{
1368 struct sock *sk = chan->data;
1369 struct sk_buff *skb;
1370 int err;
1371
1372 l2cap_chan_unlock(chan);
1373 skb = bt_skb_send_alloc(sk, hdr_len + len, nb, &err);
1374 l2cap_chan_lock(chan);
1375
1376 if (!skb)
1377 return ERR_PTR(err);
1378
1379 skb->priority = sk->sk_priority;
1380
1381 bt_cb(skb)->l2cap.chan = chan;
1382
1383 return skb;
1384}
1385
1386static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
1387{
1388 struct sock *sk = chan->data;
1389 struct sock *parent;
1390
1391 lock_sock(sk);
1392
1393 parent = bt_sk(sk)->parent;
1394
1395 BT_DBG("sk %p, parent %p", sk, parent);
1396
1397 sk->sk_state = BT_CONNECTED;
1398 sk->sk_state_change(sk);
1399
1400 if (parent)
1401 parent->sk_data_ready(parent);
1402
1403 release_sock(sk);
1404}
1405
1406static void l2cap_sock_defer_cb(struct l2cap_chan *chan)
1407{
1408 struct sock *parent, *sk = chan->data;
1409
1410 lock_sock(sk);
1411
1412 parent = bt_sk(sk)->parent;
1413 if (parent)
1414 parent->sk_data_ready(parent);
1415
1416 release_sock(sk);
1417}
1418
1419static void l2cap_sock_resume_cb(struct l2cap_chan *chan)
1420{
1421 struct sock *sk = chan->data;
1422
1423 if (test_and_clear_bit(FLAG_PENDING_SECURITY, &chan->flags)) {
1424 sk->sk_state = BT_CONNECTED;
1425 chan->state = BT_CONNECTED;
1426 }
1427
1428 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
1429 sk->sk_state_change(sk);
1430}
1431
1432static void l2cap_sock_set_shutdown_cb(struct l2cap_chan *chan)
1433{
1434 struct sock *sk = chan->data;
1435
1436 lock_sock(sk);
1437 sk->sk_shutdown = SHUTDOWN_MASK;
1438 release_sock(sk);
1439}
1440
1441static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan)
1442{
1443 struct sock *sk = chan->data;
1444
1445 return sk->sk_sndtimeo;
1446}
1447
1448static void l2cap_sock_suspend_cb(struct l2cap_chan *chan)
1449{
1450 struct sock *sk = chan->data;
1451
1452 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
1453 sk->sk_state_change(sk);
1454}
1455
1456static const struct l2cap_ops l2cap_chan_ops = {
1457 .name = "L2CAP Socket Interface",
1458 .new_connection = l2cap_sock_new_connection_cb,
1459 .recv = l2cap_sock_recv_cb,
1460 .close = l2cap_sock_close_cb,
1461 .teardown = l2cap_sock_teardown_cb,
1462 .state_change = l2cap_sock_state_change_cb,
1463 .ready = l2cap_sock_ready_cb,
1464 .defer = l2cap_sock_defer_cb,
1465 .resume = l2cap_sock_resume_cb,
1466 .suspend = l2cap_sock_suspend_cb,
1467 .set_shutdown = l2cap_sock_set_shutdown_cb,
1468 .get_sndtimeo = l2cap_sock_get_sndtimeo_cb,
1469 .alloc_skb = l2cap_sock_alloc_skb_cb,
1470};
1471
1472static void l2cap_sock_destruct(struct sock *sk)
1473{
1474 BT_DBG("sk %p", sk);
1475
1476 if (l2cap_pi(sk)->chan)
1477 l2cap_chan_put(l2cap_pi(sk)->chan);
1478
1479 if (l2cap_pi(sk)->rx_busy_skb) {
1480 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
1481 l2cap_pi(sk)->rx_busy_skb = NULL;
1482 }
1483
1484 skb_queue_purge(&sk->sk_receive_queue);
1485 skb_queue_purge(&sk->sk_write_queue);
1486}
1487
1488static void l2cap_skb_msg_name(struct sk_buff *skb, void *msg_name,
1489 int *msg_namelen)
1490{
1491 DECLARE_SOCKADDR(struct sockaddr_l2 *, la, msg_name);
1492
1493 memset(la, 0, sizeof(struct sockaddr_l2));
1494 la->l2_family = AF_BLUETOOTH;
1495 la->l2_psm = bt_cb(skb)->l2cap.psm;
1496 bacpy(&la->l2_bdaddr, &bt_cb(skb)->l2cap.bdaddr);
1497
1498 *msg_namelen = sizeof(struct sockaddr_l2);
1499}
1500
1501static void l2cap_sock_init(struct sock *sk, struct sock *parent)
1502{
1503 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1504
1505 BT_DBG("sk %p", sk);
1506
1507 if (parent) {
1508 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
1509
1510 sk->sk_type = parent->sk_type;
1511 bt_sk(sk)->flags = bt_sk(parent)->flags;
1512
1513 chan->chan_type = pchan->chan_type;
1514 chan->imtu = pchan->imtu;
1515 chan->omtu = pchan->omtu;
1516 chan->conf_state = pchan->conf_state;
1517 chan->mode = pchan->mode;
1518 chan->fcs = pchan->fcs;
1519 chan->max_tx = pchan->max_tx;
1520 chan->tx_win = pchan->tx_win;
1521 chan->tx_win_max = pchan->tx_win_max;
1522 chan->sec_level = pchan->sec_level;
1523 chan->flags = pchan->flags;
1524 chan->tx_credits = pchan->tx_credits;
1525 chan->rx_credits = pchan->rx_credits;
1526
1527 if (chan->chan_type == L2CAP_CHAN_FIXED) {
1528 chan->scid = pchan->scid;
1529 chan->dcid = pchan->scid;
1530 }
1531
1532 security_sk_clone(parent, sk);
1533 } else {
1534 switch (sk->sk_type) {
1535 case SOCK_RAW:
1536 chan->chan_type = L2CAP_CHAN_RAW;
1537 break;
1538 case SOCK_DGRAM:
1539 chan->chan_type = L2CAP_CHAN_CONN_LESS;
1540 bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name;
1541 break;
1542 case SOCK_SEQPACKET:
1543 case SOCK_STREAM:
1544 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
1545 break;
1546 }
1547
1548 chan->imtu = L2CAP_DEFAULT_MTU;
1549 chan->omtu = 0;
1550 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
1551 chan->mode = L2CAP_MODE_ERTM;
1552 set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
1553 } else {
1554 chan->mode = L2CAP_MODE_BASIC;
1555 }
1556
1557 l2cap_chan_set_defaults(chan);
1558 }
1559
1560 /* Default config options */
1561 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1562
1563 chan->data = sk;
1564 chan->ops = &l2cap_chan_ops;
1565}
1566
1567static struct proto l2cap_proto = {
1568 .name = "L2CAP",
1569 .owner = THIS_MODULE,
1570 .obj_size = sizeof(struct l2cap_pinfo)
1571};
1572
1573static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
1574 int proto, gfp_t prio, int kern)
1575{
1576 struct sock *sk;
1577 struct l2cap_chan *chan;
1578
1579 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto, kern);
1580 if (!sk)
1581 return NULL;
1582
1583 sock_init_data(sock, sk);
1584 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1585
1586 sk->sk_destruct = l2cap_sock_destruct;
1587 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1588
1589 sock_reset_flag(sk, SOCK_ZAPPED);
1590
1591 sk->sk_protocol = proto;
1592 sk->sk_state = BT_OPEN;
1593
1594 chan = l2cap_chan_create();
1595 if (!chan) {
1596 sk_free(sk);
1597 return NULL;
1598 }
1599
1600 l2cap_chan_hold(chan);
1601
1602 l2cap_pi(sk)->chan = chan;
1603
1604 return sk;
1605}
1606
1607static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1608 int kern)
1609{
1610 struct sock *sk;
1611
1612 BT_DBG("sock %p", sock);
1613
1614 sock->state = SS_UNCONNECTED;
1615
1616 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1617 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1618 return -ESOCKTNOSUPPORT;
1619
1620 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1621 return -EPERM;
1622
1623 sock->ops = &l2cap_sock_ops;
1624
1625 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
1626 if (!sk)
1627 return -ENOMEM;
1628
1629 l2cap_sock_init(sk, NULL);
1630 bt_sock_link(&l2cap_sk_list, sk);
1631 return 0;
1632}
1633
1634static const struct proto_ops l2cap_sock_ops = {
1635 .family = PF_BLUETOOTH,
1636 .owner = THIS_MODULE,
1637 .release = l2cap_sock_release,
1638 .bind = l2cap_sock_bind,
1639 .connect = l2cap_sock_connect,
1640 .listen = l2cap_sock_listen,
1641 .accept = l2cap_sock_accept,
1642 .getname = l2cap_sock_getname,
1643 .sendmsg = l2cap_sock_sendmsg,
1644 .recvmsg = l2cap_sock_recvmsg,
1645 .poll = bt_sock_poll,
1646 .ioctl = bt_sock_ioctl,
1647 .mmap = sock_no_mmap,
1648 .socketpair = sock_no_socketpair,
1649 .shutdown = l2cap_sock_shutdown,
1650 .setsockopt = l2cap_sock_setsockopt,
1651 .getsockopt = l2cap_sock_getsockopt
1652};
1653
1654static const struct net_proto_family l2cap_sock_family_ops = {
1655 .family = PF_BLUETOOTH,
1656 .owner = THIS_MODULE,
1657 .create = l2cap_sock_create,
1658};
1659
1660int __init l2cap_init_sockets(void)
1661{
1662 int err;
1663
1664 BUILD_BUG_ON(sizeof(struct sockaddr_l2) > sizeof(struct sockaddr));
1665
1666 err = proto_register(&l2cap_proto, 0);
1667 if (err < 0)
1668 return err;
1669
1670 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1671 if (err < 0) {
1672 BT_ERR("L2CAP socket registration failed");
1673 goto error;
1674 }
1675
1676 err = bt_procfs_init(&init_net, "l2cap", &l2cap_sk_list,
1677 NULL);
1678 if (err < 0) {
1679 BT_ERR("Failed to create L2CAP proc file");
1680 bt_sock_unregister(BTPROTO_L2CAP);
1681 goto error;
1682 }
1683
1684 BT_INFO("L2CAP socket layer initialized");
1685
1686 return 0;
1687
1688error:
1689 proto_unregister(&l2cap_proto);
1690 return err;
1691}
1692
1693void l2cap_cleanup_sockets(void)
1694{
1695 bt_procfs_cleanup(&init_net, "l2cap");
1696 bt_sock_unregister(BTPROTO_L2CAP);
1697 proto_unregister(&l2cap_proto);
1698}