Bluetooth: Fix PSM value for L2CAP connectionless data packets
[deliverable/linux.git] / net / bluetooth / l2cap_sock.c
CommitLineData
bb58f747
GP
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.
590051de 6 Copyright (C) 2011 ProFUSION Embedded Systems
bb58f747
GP
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
bc3b2d7f 30#include <linux/export.h>
6230c9b4 31
bb58f747 32#include <net/bluetooth/bluetooth.h>
33575df7 33#include <net/bluetooth/hci_core.h>
bb58f747 34#include <net/bluetooth/l2cap.h>
ac4b7236
MH
35
36#include "smp.h"
bb58f747 37
5b28d95c
MY
38static struct bt_sock_list l2cap_sk_list = {
39 .lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
40};
41
cf2f90f5 42static const struct proto_ops l2cap_sock_ops;
80808e43 43static void l2cap_sock_init(struct sock *sk, struct sock *parent);
2d792818
GP
44static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
45 int proto, gfp_t prio);
cf2f90f5 46
b3916db3
DH
47bool l2cap_is_socket(struct socket *sock)
48{
49 return sock && sock->ops == &l2cap_sock_ops;
50}
51EXPORT_SYMBOL(l2cap_is_socket);
52
af6bcd82
GP
53static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
54{
55 struct sock *sk = sock->sk;
4343478f 56 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
af6bcd82
GP
57 struct sockaddr_l2 la;
58 int len, err = 0;
59
60 BT_DBG("sk %p", sk);
61
62 if (!addr || addr->sa_family != AF_BLUETOOTH)
63 return -EINVAL;
64
65 memset(&la, 0, sizeof(la));
66 len = min_t(unsigned int, sizeof(la), alen);
67 memcpy(&la, addr, len);
68
b62f328b 69 if (la.l2_cid && la.l2_psm)
af6bcd82
GP
70 return -EINVAL;
71
72 lock_sock(sk);
73
74 if (sk->sk_state != BT_OPEN) {
75 err = -EBADFD;
76 goto done;
77 }
78
79 if (la.l2_psm) {
80 __u16 psm = __le16_to_cpu(la.l2_psm);
81
82 /* PSM must be odd and lsb of upper byte must be 0 */
83 if ((psm & 0x0101) != 0x0001) {
84 err = -EINVAL;
85 goto done;
86 }
87
88 /* Restrict usage of well-known PSMs */
89 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
90 err = -EACCES;
91 goto done;
92 }
93 }
94
9e4425ff 95 if (la.l2_cid)
6e4aff10 96 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
9e4425ff
GP
97 else
98 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
af6bcd82 99
9e4425ff
GP
100 if (err < 0)
101 goto done;
af6bcd82 102
2983fd68
AE
103 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP ||
104 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
9e4425ff 105 chan->sec_level = BT_SECURITY_SDP;
b62f328b 106
9e4425ff 107 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
89bc500e
GP
108
109 chan->state = BT_BOUND;
9e4425ff 110 sk->sk_state = BT_BOUND;
af6bcd82
GP
111
112done:
113 release_sock(sk);
114 return err;
115}
116
2d792818
GP
117static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,
118 int alen, int flags)
4e34c50b
GP
119{
120 struct sock *sk = sock->sk;
0c1bc5c6 121 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
4e34c50b
GP
122 struct sockaddr_l2 la;
123 int len, err = 0;
124
125 BT_DBG("sk %p", sk);
126
127 if (!addr || alen < sizeof(addr->sa_family) ||
128 addr->sa_family != AF_BLUETOOTH)
129 return -EINVAL;
130
131 memset(&la, 0, sizeof(la));
132 len = min_t(unsigned int, sizeof(la), alen);
133 memcpy(&la, addr, len);
134
acd7d370 135 if (la.l2_cid && la.l2_psm)
4e34c50b
GP
136 return -EINVAL;
137
6e4aff10 138 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
8e9f9892 139 &la.l2_bdaddr, la.l2_bdaddr_type);
4e34c50b 140 if (err)
b3fb611e 141 return err;
4e34c50b 142
6be36555
AE
143 lock_sock(sk);
144
4e34c50b 145 err = bt_sock_wait_state(sk, BT_CONNECTED,
2d792818 146 sock_sndtimeo(sk, flags & O_NONBLOCK));
b3fb611e
AE
147
148 release_sock(sk);
149
4e34c50b
GP
150 return err;
151}
152
af6bcd82
GP
153static int l2cap_sock_listen(struct socket *sock, int backlog)
154{
155 struct sock *sk = sock->sk;
0c1bc5c6 156 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
af6bcd82
GP
157 int err = 0;
158
159 BT_DBG("sk %p backlog %d", sk, backlog);
160
161 lock_sock(sk);
162
6b3af733 163 if (sk->sk_state != BT_BOUND) {
af6bcd82
GP
164 err = -EBADFD;
165 goto done;
166 }
167
6b3af733
MH
168 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
169 err = -EINVAL;
170 goto done;
171 }
172
0c1bc5c6 173 switch (chan->mode) {
af6bcd82
GP
174 case L2CAP_MODE_BASIC:
175 break;
176 case L2CAP_MODE_ERTM:
177 case L2CAP_MODE_STREAMING:
178 if (!disable_ertm)
179 break;
180 /* fall through */
181 default:
182 err = -ENOTSUPP;
183 goto done;
184 }
185
af6bcd82
GP
186 sk->sk_max_ack_backlog = backlog;
187 sk->sk_ack_backlog = 0;
89bc500e
GP
188
189 chan->state = BT_LISTEN;
af6bcd82
GP
190 sk->sk_state = BT_LISTEN;
191
192done:
193 release_sock(sk);
194 return err;
195}
196
2d792818
GP
197static int l2cap_sock_accept(struct socket *sock, struct socket *newsock,
198 int flags)
c47b7c72
GP
199{
200 DECLARE_WAITQUEUE(wait, current);
201 struct sock *sk = sock->sk, *nsk;
202 long timeo;
203 int err = 0;
204
205 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
206
c47b7c72
GP
207 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
208
209 BT_DBG("sk %p timeo %ld", sk, timeo);
210
211 /* Wait for an incoming connection. (wake-one). */
212 add_wait_queue_exclusive(sk_sleep(sk), &wait);
f9a3c20a 213 while (1) {
c47b7c72 214 set_current_state(TASK_INTERRUPTIBLE);
f9a3c20a
PH
215
216 if (sk->sk_state != BT_LISTEN) {
217 err = -EBADFD;
c47b7c72
GP
218 break;
219 }
220
f9a3c20a
PH
221 nsk = bt_accept_dequeue(sk, newsock);
222 if (nsk)
223 break;
c47b7c72 224
f9a3c20a
PH
225 if (!timeo) {
226 err = -EAGAIN;
c47b7c72
GP
227 break;
228 }
229
230 if (signal_pending(current)) {
231 err = sock_intr_errno(timeo);
232 break;
233 }
f9a3c20a
PH
234
235 release_sock(sk);
236 timeo = schedule_timeout(timeo);
237 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
c47b7c72 238 }
f9a3c20a 239 __set_current_state(TASK_RUNNING);
c47b7c72
GP
240 remove_wait_queue(sk_sleep(sk), &wait);
241
242 if (err)
243 goto done;
244
245 newsock->state = SS_CONNECTED;
246
247 BT_DBG("new socket %p", nsk);
248
249done:
250 release_sock(sk);
251 return err;
252}
253
2d792818
GP
254static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
255 int *len, int peer)
d7175d55
GP
256{
257 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
258 struct sock *sk = sock->sk;
0c1bc5c6 259 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
d7175d55
GP
260
261 BT_DBG("sock %p, sk %p", sock, sk);
262
792039c7 263 memset(la, 0, sizeof(struct sockaddr_l2));
d7175d55
GP
264 addr->sa_family = AF_BLUETOOTH;
265 *len = sizeof(struct sockaddr_l2);
266
267 if (peer) {
fe4128e0 268 la->l2_psm = chan->psm;
d7175d55 269 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
fe4128e0 270 la->l2_cid = cpu_to_le16(chan->dcid);
d7175d55 271 } else {
0c1bc5c6 272 la->l2_psm = chan->sport;
d7175d55 273 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
fe4128e0 274 la->l2_cid = cpu_to_le16(chan->scid);
d7175d55
GP
275 }
276
277 return 0;
278}
279
2d792818
GP
280static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
281 char __user *optval, int __user *optlen)
99f4808d
GP
282{
283 struct sock *sk = sock->sk;
4343478f 284 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
99f4808d
GP
285 struct l2cap_options opts;
286 struct l2cap_conninfo cinfo;
287 int len, err = 0;
288 u32 opt;
289
290 BT_DBG("sk %p", sk);
291
292 if (get_user(len, optlen))
293 return -EFAULT;
294
295 lock_sock(sk);
296
297 switch (optname) {
298 case L2CAP_OPTIONS:
e3fb592b 299 memset(&opts, 0, sizeof(opts));
0c1bc5c6
GP
300 opts.imtu = chan->imtu;
301 opts.omtu = chan->omtu;
302 opts.flush_to = chan->flush_to;
303 opts.mode = chan->mode;
47d1ec61
GP
304 opts.fcs = chan->fcs;
305 opts.max_tx = chan->max_tx;
6327eb98 306 opts.txwin_size = chan->tx_win;
99f4808d
GP
307
308 len = min_t(unsigned int, len, sizeof(opts));
309 if (copy_to_user(optval, (char *) &opts, len))
310 err = -EFAULT;
311
312 break;
313
314 case L2CAP_LM:
4343478f 315 switch (chan->sec_level) {
99f4808d
GP
316 case BT_SECURITY_LOW:
317 opt = L2CAP_LM_AUTH;
318 break;
319 case BT_SECURITY_MEDIUM:
320 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
321 break;
322 case BT_SECURITY_HIGH:
323 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
2d792818 324 L2CAP_LM_SECURE;
99f4808d
GP
325 break;
326 default:
327 opt = 0;
328 break;
329 }
330
43bd0f32 331 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
99f4808d
GP
332 opt |= L2CAP_LM_MASTER;
333
ecf61bdb 334 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
99f4808d
GP
335 opt |= L2CAP_LM_RELIABLE;
336
337 if (put_user(opt, (u32 __user *) optval))
338 err = -EFAULT;
339 break;
340
341 case L2CAP_CONNINFO:
342 if (sk->sk_state != BT_CONNECTED &&
c5daa683
GP
343 !(sk->sk_state == BT_CONNECT2 &&
344 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
99f4808d
GP
345 err = -ENOTCONN;
346 break;
347 }
348
8d03e971 349 memset(&cinfo, 0, sizeof(cinfo));
8c1d787b
GP
350 cinfo.hci_handle = chan->conn->hcon->handle;
351 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
99f4808d
GP
352
353 len = min_t(unsigned int, len, sizeof(cinfo));
354 if (copy_to_user(optval, (char *) &cinfo, len))
355 err = -EFAULT;
356
357 break;
358
359 default:
360 err = -ENOPROTOOPT;
361 break;
362 }
363
364 release_sock(sk);
365 return err;
366}
367
2d792818
GP
368static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
369 char __user *optval, int __user *optlen)
99f4808d
GP
370{
371 struct sock *sk = sock->sk;
4343478f 372 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
99f4808d 373 struct bt_security sec;
14b12d0b 374 struct bt_power pwr;
99f4808d
GP
375 int len, err = 0;
376
377 BT_DBG("sk %p", sk);
378
379 if (level == SOL_L2CAP)
380 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
381
382 if (level != SOL_BLUETOOTH)
383 return -ENOPROTOOPT;
384
385 if (get_user(len, optlen))
386 return -EFAULT;
387
388 lock_sock(sk);
389
390 switch (optname) {
391 case BT_SECURITY:
715ec005 392 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
2d792818 393 chan->chan_type != L2CAP_CHAN_RAW) {
99f4808d
GP
394 err = -EINVAL;
395 break;
396 }
397
8f360119 398 memset(&sec, 0, sizeof(sec));
85e34368 399 if (chan->conn) {
c6585a4d 400 sec.level = chan->conn->hcon->sec_level;
99f4808d 401
85e34368
AE
402 if (sk->sk_state == BT_CONNECTED)
403 sec.key_size = chan->conn->hcon->enc_key_size;
404 } else {
405 sec.level = chan->sec_level;
406 }
8f360119 407
99f4808d
GP
408 len = min_t(unsigned int, len, sizeof(sec));
409 if (copy_to_user(optval, (char *) &sec, len))
410 err = -EFAULT;
411
412 break;
413
414 case BT_DEFER_SETUP:
415 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
416 err = -EINVAL;
417 break;
418 }
419
c5daa683
GP
420 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
421 (u32 __user *) optval))
99f4808d
GP
422 err = -EFAULT;
423
424 break;
425
426 case BT_FLUSHABLE:
d57b0e8b 427 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
2d792818 428 (u32 __user *) optval))
99f4808d
GP
429 err = -EFAULT;
430
431 break;
432
14b12d0b
JG
433 case BT_POWER:
434 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
2d792818 435 && sk->sk_type != SOCK_RAW) {
14b12d0b
JG
436 err = -EINVAL;
437 break;
438 }
439
15770b1a 440 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
14b12d0b
JG
441
442 len = min_t(unsigned int, len, sizeof(pwr));
443 if (copy_to_user(optval, (char *) &pwr, len))
444 err = -EFAULT;
445
446 break;
447
2ea66482 448 case BT_CHANNEL_POLICY:
2ea66482
MM
449 if (put_user(chan->chan_policy, (u32 __user *) optval))
450 err = -EFAULT;
451 break;
452
99f4808d
GP
453 default:
454 err = -ENOPROTOOPT;
455 break;
456 }
457
458 release_sock(sk);
459 return err;
460}
461
682877c3
AG
462static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
463{
464 switch (chan->scid) {
073d1cf3 465 case L2CAP_CID_ATT:
8c3a4f00 466 if (mtu < L2CAP_LE_MIN_MTU)
682877c3
AG
467 return false;
468 break;
469
470 default:
471 if (mtu < L2CAP_DEFAULT_MIN_MTU)
472 return false;
473 }
474
475 return true;
476}
477
2d792818
GP
478static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
479 char __user *optval, unsigned int optlen)
33575df7
GP
480{
481 struct sock *sk = sock->sk;
b4450035 482 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
33575df7
GP
483 struct l2cap_options opts;
484 int len, err = 0;
485 u32 opt;
486
487 BT_DBG("sk %p", sk);
488
489 lock_sock(sk);
490
491 switch (optname) {
492 case L2CAP_OPTIONS:
493 if (sk->sk_state == BT_CONNECTED) {
494 err = -EINVAL;
495 break;
496 }
497
0c1bc5c6
GP
498 opts.imtu = chan->imtu;
499 opts.omtu = chan->omtu;
500 opts.flush_to = chan->flush_to;
501 opts.mode = chan->mode;
47d1ec61
GP
502 opts.fcs = chan->fcs;
503 opts.max_tx = chan->max_tx;
6327eb98 504 opts.txwin_size = chan->tx_win;
33575df7
GP
505
506 len = min_t(unsigned int, sizeof(opts), optlen);
507 if (copy_from_user((char *) &opts, optval, len)) {
508 err = -EFAULT;
509 break;
510 }
511
6327eb98 512 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
33575df7
GP
513 err = -EINVAL;
514 break;
515 }
516
682877c3
AG
517 if (!l2cap_valid_mtu(chan, opts.imtu)) {
518 err = -EINVAL;
519 break;
520 }
521
0c1bc5c6
GP
522 chan->mode = opts.mode;
523 switch (chan->mode) {
33575df7 524 case L2CAP_MODE_BASIC:
c1360a1c 525 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
33575df7
GP
526 break;
527 case L2CAP_MODE_ERTM:
528 case L2CAP_MODE_STREAMING:
529 if (!disable_ertm)
530 break;
531 /* fall through */
532 default:
533 err = -EINVAL;
534 break;
535 }
536
0c1bc5c6
GP
537 chan->imtu = opts.imtu;
538 chan->omtu = opts.omtu;
47d1ec61
GP
539 chan->fcs = opts.fcs;
540 chan->max_tx = opts.max_tx;
6327eb98 541 chan->tx_win = opts.txwin_size;
12d59781 542 chan->flush_to = opts.flush_to;
33575df7
GP
543 break;
544
545 case L2CAP_LM:
546 if (get_user(opt, (u32 __user *) optval)) {
547 err = -EFAULT;
548 break;
549 }
550
551 if (opt & L2CAP_LM_AUTH)
4343478f 552 chan->sec_level = BT_SECURITY_LOW;
33575df7 553 if (opt & L2CAP_LM_ENCRYPT)
4343478f 554 chan->sec_level = BT_SECURITY_MEDIUM;
33575df7 555 if (opt & L2CAP_LM_SECURE)
4343478f 556 chan->sec_level = BT_SECURITY_HIGH;
33575df7 557
43bd0f32
AE
558 if (opt & L2CAP_LM_MASTER)
559 set_bit(FLAG_ROLE_SWITCH, &chan->flags);
560 else
561 clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
ecf61bdb
AE
562
563 if (opt & L2CAP_LM_RELIABLE)
564 set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
565 else
566 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
33575df7
GP
567 break;
568
569 default:
570 err = -ENOPROTOOPT;
571 break;
572 }
573
574 release_sock(sk);
575 return err;
576}
577
2d792818
GP
578static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
579 char __user *optval, unsigned int optlen)
33575df7
GP
580{
581 struct sock *sk = sock->sk;
4343478f 582 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
33575df7 583 struct bt_security sec;
14b12d0b 584 struct bt_power pwr;
f1cb9af5 585 struct l2cap_conn *conn;
33575df7
GP
586 int len, err = 0;
587 u32 opt;
588
589 BT_DBG("sk %p", sk);
590
591 if (level == SOL_L2CAP)
592 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
593
594 if (level != SOL_BLUETOOTH)
595 return -ENOPROTOOPT;
596
597 lock_sock(sk);
598
599 switch (optname) {
600 case BT_SECURITY:
715ec005 601 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
2d792818 602 chan->chan_type != L2CAP_CHAN_RAW) {
33575df7
GP
603 err = -EINVAL;
604 break;
605 }
606
607 sec.level = BT_SECURITY_LOW;
608
609 len = min_t(unsigned int, sizeof(sec), optlen);
610 if (copy_from_user((char *) &sec, optval, len)) {
611 err = -EFAULT;
612 break;
613 }
614
615 if (sec.level < BT_SECURITY_LOW ||
2d792818 616 sec.level > BT_SECURITY_HIGH) {
33575df7
GP
617 err = -EINVAL;
618 break;
619 }
620
4343478f 621 chan->sec_level = sec.level;
f1cb9af5 622
0bee1d60
GP
623 if (!chan->conn)
624 break;
625
f1cb9af5 626 conn = chan->conn;
0bee1d60
GP
627
628 /*change security for LE channels */
073d1cf3 629 if (chan->scid == L2CAP_CID_ATT) {
f1cb9af5
VCG
630 if (!conn->hcon->out) {
631 err = -EINVAL;
632 break;
633 }
634
cc110922 635 if (smp_conn_security(conn->hcon, sec.level))
f1cb9af5 636 break;
f1cb9af5 637 sk->sk_state = BT_CONFIG;
3542b854 638 chan->state = BT_CONFIG;
0bee1d60 639
a7d7723a
GP
640 /* or for ACL link */
641 } else if ((sk->sk_state == BT_CONNECT2 &&
2d792818 642 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
a7d7723a
GP
643 sk->sk_state == BT_CONNECTED) {
644 if (!l2cap_chan_check_security(chan))
c5daa683 645 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
a7d7723a
GP
646 else
647 sk->sk_state_change(sk);
0bee1d60
GP
648 } else {
649 err = -EINVAL;
f1cb9af5 650 }
33575df7
GP
651 break;
652
653 case BT_DEFER_SETUP:
654 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
655 err = -EINVAL;
656 break;
657 }
658
659 if (get_user(opt, (u32 __user *) optval)) {
660 err = -EFAULT;
661 break;
662 }
663
c5daa683
GP
664 if (opt)
665 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
666 else
667 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
33575df7
GP
668 break;
669
670 case BT_FLUSHABLE:
671 if (get_user(opt, (u32 __user *) optval)) {
672 err = -EFAULT;
673 break;
674 }
675
676 if (opt > BT_FLUSHABLE_ON) {
677 err = -EINVAL;
678 break;
679 }
680
681 if (opt == BT_FLUSHABLE_OFF) {
c1f23a2b 682 conn = chan->conn;
25985edc 683 /* proceed further only when we have l2cap_conn and
33575df7
GP
684 No Flush support in the LM */
685 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
686 err = -EINVAL;
687 break;
688 }
689 }
690
d57b0e8b
AE
691 if (opt)
692 set_bit(FLAG_FLUSHABLE, &chan->flags);
693 else
694 clear_bit(FLAG_FLUSHABLE, &chan->flags);
33575df7
GP
695 break;
696
14b12d0b
JG
697 case BT_POWER:
698 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
2d792818 699 chan->chan_type != L2CAP_CHAN_RAW) {
14b12d0b
JG
700 err = -EINVAL;
701 break;
702 }
703
704 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
705
706 len = min_t(unsigned int, sizeof(pwr), optlen);
707 if (copy_from_user((char *) &pwr, optval, len)) {
708 err = -EFAULT;
709 break;
710 }
15770b1a
AE
711
712 if (pwr.force_active)
713 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
714 else
715 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
14b12d0b
JG
716 break;
717
2ea66482 718 case BT_CHANNEL_POLICY:
2ea66482
MM
719 if (get_user(opt, (u32 __user *) optval)) {
720 err = -EFAULT;
721 break;
722 }
723
724 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
725 err = -EINVAL;
726 break;
727 }
728
729 if (chan->mode != L2CAP_MODE_ERTM &&
2d792818 730 chan->mode != L2CAP_MODE_STREAMING) {
2ea66482
MM
731 err = -EOPNOTSUPP;
732 break;
733 }
734
735 chan->chan_policy = (u8) opt;
3f7a56c4
MM
736
737 if (sk->sk_state == BT_CONNECTED &&
738 chan->move_role == L2CAP_MOVE_ROLE_NONE)
739 l2cap_move_start(chan);
740
14b12d0b
JG
741 break;
742
33575df7
GP
743 default:
744 err = -ENOPROTOOPT;
745 break;
746 }
747
748 release_sock(sk);
749 return err;
750}
fd83ccdb 751
2d792818
GP
752static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
753 struct msghdr *msg, size_t len)
fd83ccdb
GP
754{
755 struct sock *sk = sock->sk;
0c1bc5c6 756 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
fd83ccdb
GP
757 int err;
758
759 BT_DBG("sock %p, sk %p", sock, sk);
760
761 err = sock_error(sk);
762 if (err)
763 return err;
764
765 if (msg->msg_flags & MSG_OOB)
766 return -EOPNOTSUPP;
767
a6a5568c 768 if (sk->sk_state != BT_CONNECTED)
9a91a04a 769 return -ENOTCONN;
fd83ccdb 770
e793dcf0
JH
771 lock_sock(sk);
772 err = bt_sock_wait_ready(sk, msg->msg_flags);
773 release_sock(sk);
774 if (err)
775 return err;
776
a6a5568c 777 l2cap_chan_lock(chan);
5e59b791 778 err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
a6a5568c 779 l2cap_chan_unlock(chan);
fd83ccdb 780
fd83ccdb
GP
781 return err;
782}
33575df7 783
2d792818
GP
784static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
785 struct msghdr *msg, size_t len, int flags)
68983259
GP
786{
787 struct sock *sk = sock->sk;
e328140f
MM
788 struct l2cap_pinfo *pi = l2cap_pi(sk);
789 int err;
68983259
GP
790
791 lock_sock(sk);
792
c5daa683
GP
793 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
794 &bt_sk(sk)->flags)) {
8c1d787b 795 sk->sk_state = BT_CONFIG;
3542b854 796 pi->chan->state = BT_CONFIG;
8c1d787b 797
e328140f 798 __l2cap_connect_rsp_defer(pi->chan);
970871bc
JH
799 err = 0;
800 goto done;
68983259
GP
801 }
802
803 release_sock(sk);
804
805 if (sock->type == SOCK_STREAM)
e328140f
MM
806 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
807 else
808 err = bt_sock_recvmsg(iocb, sock, msg, len, flags);
809
810 if (pi->chan->mode != L2CAP_MODE_ERTM)
811 return err;
812
813 /* Attempt to put pending rx data in the socket buffer */
814
815 lock_sock(sk);
816
817 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
818 goto done;
819
820 if (pi->rx_busy_skb) {
821 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
822 pi->rx_busy_skb = NULL;
823 else
824 goto done;
825 }
826
827 /* Restore data flow when half of the receive buffer is
828 * available. This avoids resending large numbers of
829 * frames.
830 */
831 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
832 l2cap_chan_busy(pi->chan, 0);
68983259 833
e328140f
MM
834done:
835 release_sock(sk);
836 return err;
68983259
GP
837}
838
05fc1576
GP
839/* Kill socket (only if zapped and orphan)
840 * Must be called on unlocked socket.
841 */
ba3bd0ee 842static void l2cap_sock_kill(struct sock *sk)
05fc1576
GP
843{
844 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
845 return;
846
e05dcc32 847 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
05fc1576
GP
848
849 /* Kill poor orphan */
6ff5abbf 850
4af66c69 851 l2cap_chan_put(l2cap_pi(sk)->chan);
05fc1576
GP
852 sock_set_flag(sk, SOCK_DEAD);
853 sock_put(sk);
854}
855
dcba0dba
GP
856static int l2cap_sock_shutdown(struct socket *sock, int how)
857{
858 struct sock *sk = sock->sk;
7ddb6e0f 859 struct l2cap_chan *chan;
3df91ea2 860 struct l2cap_conn *conn;
dcba0dba
GP
861 int err = 0;
862
863 BT_DBG("sock %p, sk %p", sock, sk);
864
865 if (!sk)
866 return 0;
867
7ddb6e0f 868 chan = l2cap_pi(sk)->chan;
3df91ea2
AE
869 conn = chan->conn;
870
871 if (conn)
872 mutex_lock(&conn->chan_lock);
7ddb6e0f 873
6be36555 874 l2cap_chan_lock(chan);
dcba0dba 875 lock_sock(sk);
6be36555 876
dcba0dba 877 if (!sk->sk_shutdown) {
0c1bc5c6 878 if (chan->mode == L2CAP_MODE_ERTM)
dcba0dba
GP
879 err = __l2cap_wait_ack(sk);
880
881 sk->sk_shutdown = SHUTDOWN_MASK;
3df91ea2 882
6be36555 883 release_sock(sk);
0f852724 884 l2cap_chan_close(chan, 0);
6be36555 885 lock_sock(sk);
dcba0dba
GP
886
887 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
888 err = bt_sock_wait_state(sk, BT_CLOSED,
2d792818 889 sk->sk_lingertime);
dcba0dba
GP
890 }
891
892 if (!err && sk->sk_err)
893 err = -sk->sk_err;
894
895 release_sock(sk);
6be36555 896 l2cap_chan_unlock(chan);
3df91ea2
AE
897
898 if (conn)
899 mutex_unlock(&conn->chan_lock);
900
dcba0dba
GP
901 return err;
902}
903
554f05bb
GP
904static int l2cap_sock_release(struct socket *sock)
905{
906 struct sock *sk = sock->sk;
907 int err;
908
909 BT_DBG("sock %p, sk %p", sock, sk);
910
911 if (!sk)
912 return 0;
913
5b28d95c
MY
914 bt_sock_unlink(&l2cap_sk_list, sk);
915
554f05bb
GP
916 err = l2cap_sock_shutdown(sock, 2);
917
918 sock_orphan(sk);
919 l2cap_sock_kill(sk);
920 return err;
921}
922
c0df7f6e
AE
923static void l2cap_sock_cleanup_listen(struct sock *parent)
924{
925 struct sock *sk;
926
927 BT_DBG("parent %p", parent);
928
929 /* Close not yet accepted channels */
930 while ((sk = bt_accept_dequeue(parent, NULL))) {
931 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
932
933 l2cap_chan_lock(chan);
934 __clear_chan_timer(chan);
935 l2cap_chan_close(chan, ECONNRESET);
936 l2cap_chan_unlock(chan);
937
938 l2cap_sock_kill(sk);
939 }
940}
941
80b98027 942static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
80808e43 943{
80b98027 944 struct sock *sk, *parent = chan->data;
80808e43 945
53826692
GP
946 /* Check for backlog size */
947 if (sk_acceptq_is_full(parent)) {
948 BT_DBG("backlog full %d", parent->sk_ack_backlog);
949 return NULL;
950 }
951
80808e43 952 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
2d792818 953 GFP_ATOMIC);
80808e43
GP
954 if (!sk)
955 return NULL;
956
d22015aa
OP
957 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
958
80808e43
GP
959 l2cap_sock_init(sk, parent);
960
644912e1
GP
961 bt_accept_enqueue(parent, sk);
962
80808e43
GP
963 return l2cap_pi(sk)->chan;
964}
965
80b98027 966static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
23070494 967{
e328140f 968 int err;
80b98027 969 struct sock *sk = chan->data;
e328140f
MM
970 struct l2cap_pinfo *pi = l2cap_pi(sk);
971
6be36555
AE
972 lock_sock(sk);
973
974 if (pi->rx_busy_skb) {
975 err = -ENOMEM;
976 goto done;
977 }
e328140f
MM
978
979 err = sock_queue_rcv_skb(sk, skb);
980
981 /* For ERTM, handle one skb that doesn't fit into the recv
982 * buffer. This is important to do because the data frames
983 * have already been acked, so the skb cannot be discarded.
984 *
985 * Notify the l2cap core that the buffer is full, so the
986 * LOCAL_BUSY state is entered and no more frames are
987 * acked and reassembled until there is buffer space
988 * available.
989 */
990 if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) {
991 pi->rx_busy_skb = skb;
992 l2cap_chan_busy(pi->chan, 1);
993 err = 0;
994 }
23070494 995
6be36555
AE
996done:
997 release_sock(sk);
998
e328140f 999 return err;
23070494
GP
1000}
1001
80b98027 1002static void l2cap_sock_close_cb(struct l2cap_chan *chan)
ba3bd0ee 1003{
80b98027 1004 struct sock *sk = chan->data;
ba3bd0ee
GP
1005
1006 l2cap_sock_kill(sk);
1007}
1008
c0df7f6e
AE
1009static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
1010{
1011 struct sock *sk = chan->data;
1012 struct sock *parent;
1013
1014 lock_sock(sk);
1015
1016 parent = bt_sk(sk)->parent;
1017
1018 sock_set_flag(sk, SOCK_ZAPPED);
1019
1020 switch (chan->state) {
1021 case BT_OPEN:
1022 case BT_BOUND:
1023 case BT_CLOSED:
1024 break;
1025 case BT_LISTEN:
1026 l2cap_sock_cleanup_listen(sk);
1027 sk->sk_state = BT_CLOSED;
1028 chan->state = BT_CLOSED;
1029
1030 break;
1031 default:
1032 sk->sk_state = BT_CLOSED;
1033 chan->state = BT_CLOSED;
1034
1035 sk->sk_err = err;
1036
1037 if (parent) {
1038 bt_accept_unlink(sk);
1039 parent->sk_data_ready(parent, 0);
1040 } else {
1041 sk->sk_state_change(sk);
1042 }
1043
1044 break;
1045 }
1046
1047 release_sock(sk);
1048}
1049
80b98027 1050static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state)
89bc500e 1051{
80b98027 1052 struct sock *sk = chan->data;
89bc500e
GP
1053
1054 sk->sk_state = state;
1055}
1056
2f7719ce 1057static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
90338947 1058 unsigned long len, int nb)
2f7719ce 1059{
90338947
GP
1060 struct sk_buff *skb;
1061 int err;
1062
a6a5568c 1063 l2cap_chan_unlock(chan);
90338947 1064 skb = bt_skb_send_alloc(chan->sk, len, nb, &err);
a6a5568c
MM
1065 l2cap_chan_lock(chan);
1066
90338947
GP
1067 if (!skb)
1068 return ERR_PTR(err);
2f7719ce 1069
90338947 1070 return skb;
2f7719ce
AE
1071}
1072
54a59aa2
AE
1073static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
1074{
1075 struct sock *sk = chan->data;
1076 struct sock *parent;
1077
1078 lock_sock(sk);
1079
1080 parent = bt_sk(sk)->parent;
1081
1082 BT_DBG("sk %p, parent %p", sk, parent);
1083
1084 sk->sk_state = BT_CONNECTED;
1085 sk->sk_state_change(sk);
1086
1087 if (parent)
1088 parent->sk_data_ready(parent, 0);
1089
1090 release_sock(sk);
1091}
1092
2dc4e510
GP
1093static void l2cap_sock_defer_cb(struct l2cap_chan *chan)
1094{
1095 struct sock *sk = chan->data;
1096 struct sock *parent = bt_sk(sk)->parent;
1097
1098 if (parent)
1099 parent->sk_data_ready(parent, 0);
1100}
1101
80808e43
GP
1102static struct l2cap_ops l2cap_chan_ops = {
1103 .name = "L2CAP Socket Interface",
1104 .new_connection = l2cap_sock_new_connection_cb,
23070494 1105 .recv = l2cap_sock_recv_cb,
ba3bd0ee 1106 .close = l2cap_sock_close_cb,
c0df7f6e 1107 .teardown = l2cap_sock_teardown_cb,
89bc500e 1108 .state_change = l2cap_sock_state_change_cb,
54a59aa2 1109 .ready = l2cap_sock_ready_cb,
2dc4e510 1110 .defer = l2cap_sock_defer_cb,
2f7719ce 1111 .alloc_skb = l2cap_sock_alloc_skb_cb,
80808e43
GP
1112};
1113
bb58f747
GP
1114static void l2cap_sock_destruct(struct sock *sk)
1115{
1116 BT_DBG("sk %p", sk);
1117
23d3a869
SL
1118 if (l2cap_pi(sk)->chan)
1119 l2cap_chan_put(l2cap_pi(sk)->chan);
e328140f
MM
1120 if (l2cap_pi(sk)->rx_busy_skb) {
1121 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
1122 l2cap_pi(sk)->rx_busy_skb = NULL;
1123 }
1124
bb58f747
GP
1125 skb_queue_purge(&sk->sk_receive_queue);
1126 skb_queue_purge(&sk->sk_write_queue);
1127}
1128
80808e43 1129static void l2cap_sock_init(struct sock *sk, struct sock *parent)
bb58f747
GP
1130{
1131 struct l2cap_pinfo *pi = l2cap_pi(sk);
b4450035 1132 struct l2cap_chan *chan = pi->chan;
bb58f747
GP
1133
1134 BT_DBG("sk %p", sk);
1135
1136 if (parent) {
b4450035
GP
1137 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
1138
bb58f747 1139 sk->sk_type = parent->sk_type;
c5daa683 1140 bt_sk(sk)->flags = bt_sk(parent)->flags;
bb58f747 1141
715ec005 1142 chan->chan_type = pchan->chan_type;
0c1bc5c6
GP
1143 chan->imtu = pchan->imtu;
1144 chan->omtu = pchan->omtu;
b4450035 1145 chan->conf_state = pchan->conf_state;
0c1bc5c6 1146 chan->mode = pchan->mode;
47d1ec61
GP
1147 chan->fcs = pchan->fcs;
1148 chan->max_tx = pchan->max_tx;
1149 chan->tx_win = pchan->tx_win;
6b3c7104 1150 chan->tx_win_max = pchan->tx_win_max;
4343478f 1151 chan->sec_level = pchan->sec_level;
d57b0e8b 1152 chan->flags = pchan->flags;
6230c9b4
PM
1153
1154 security_sk_clone(parent, sk);
bb58f747 1155 } else {
715ec005
GP
1156
1157 switch (sk->sk_type) {
1158 case SOCK_RAW:
1159 chan->chan_type = L2CAP_CHAN_RAW;
1160 break;
1161 case SOCK_DGRAM:
1162 chan->chan_type = L2CAP_CHAN_CONN_LESS;
1163 break;
1164 case SOCK_SEQPACKET:
1165 case SOCK_STREAM:
1166 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
1167 break;
1168 }
1169
0c1bc5c6
GP
1170 chan->imtu = L2CAP_DEFAULT_MTU;
1171 chan->omtu = 0;
bb58f747 1172 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
0c1bc5c6 1173 chan->mode = L2CAP_MODE_ERTM;
c1360a1c 1174 set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
bb58f747 1175 } else {
0c1bc5c6 1176 chan->mode = L2CAP_MODE_BASIC;
bb58f747 1177 }
bd4b1653
AE
1178
1179 l2cap_chan_set_defaults(chan);
bb58f747
GP
1180 }
1181
1182 /* Default config options */
0c1bc5c6 1183 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
80808e43
GP
1184
1185 chan->data = sk;
1186 chan->ops = &l2cap_chan_ops;
bb58f747
GP
1187}
1188
1189static struct proto l2cap_proto = {
1190 .name = "L2CAP",
1191 .owner = THIS_MODULE,
1192 .obj_size = sizeof(struct l2cap_pinfo)
1193};
1194
2d792818
GP
1195static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
1196 int proto, gfp_t prio)
bb58f747
GP
1197{
1198 struct sock *sk;
dc50a06d 1199 struct l2cap_chan *chan;
bb58f747
GP
1200
1201 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1202 if (!sk)
1203 return NULL;
1204
1205 sock_init_data(sock, sk);
1206 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1207
1208 sk->sk_destruct = l2cap_sock_destruct;
ba13ccd9 1209 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
bb58f747
GP
1210
1211 sock_reset_flag(sk, SOCK_ZAPPED);
1212
1213 sk->sk_protocol = proto;
1214 sk->sk_state = BT_OPEN;
1215
eef1d9b6 1216 chan = l2cap_chan_create();
dc50a06d 1217 if (!chan) {
49dfbb91 1218 sk_free(sk);
dc50a06d
GP
1219 return NULL;
1220 }
1221
61d6ef3e
MM
1222 l2cap_chan_hold(chan);
1223
eef1d9b6
GP
1224 chan->sk = sk;
1225
dc50a06d
GP
1226 l2cap_pi(sk)->chan = chan;
1227
bb58f747
GP
1228 return sk;
1229}
1230
1231static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1232 int kern)
1233{
1234 struct sock *sk;
1235
1236 BT_DBG("sock %p", sock);
1237
1238 sock->state = SS_UNCONNECTED;
1239
1240 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
2d792818 1241 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
bb58f747
GP
1242 return -ESOCKTNOSUPPORT;
1243
1244 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1245 return -EPERM;
1246
1247 sock->ops = &l2cap_sock_ops;
1248
1249 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
1250 if (!sk)
1251 return -ENOMEM;
1252
1253 l2cap_sock_init(sk, NULL);
5b28d95c 1254 bt_sock_link(&l2cap_sk_list, sk);
bb58f747
GP
1255 return 0;
1256}
1257
cf2f90f5 1258static const struct proto_ops l2cap_sock_ops = {
65390587
GP
1259 .family = PF_BLUETOOTH,
1260 .owner = THIS_MODULE,
1261 .release = l2cap_sock_release,
1262 .bind = l2cap_sock_bind,
1263 .connect = l2cap_sock_connect,
1264 .listen = l2cap_sock_listen,
1265 .accept = l2cap_sock_accept,
1266 .getname = l2cap_sock_getname,
1267 .sendmsg = l2cap_sock_sendmsg,
1268 .recvmsg = l2cap_sock_recvmsg,
1269 .poll = bt_sock_poll,
1270 .ioctl = bt_sock_ioctl,
1271 .mmap = sock_no_mmap,
1272 .socketpair = sock_no_socketpair,
1273 .shutdown = l2cap_sock_shutdown,
1274 .setsockopt = l2cap_sock_setsockopt,
1275 .getsockopt = l2cap_sock_getsockopt
1276};
1277
bb58f747
GP
1278static const struct net_proto_family l2cap_sock_family_ops = {
1279 .family = PF_BLUETOOTH,
1280 .owner = THIS_MODULE,
1281 .create = l2cap_sock_create,
1282};
1283
1284int __init l2cap_init_sockets(void)
1285{
e2174ca4 1286 int err;
bb58f747 1287
e2174ca4
GP
1288 err = proto_register(&l2cap_proto, 0);
1289 if (err < 0)
1290 return err;
bb58f747 1291
e2174ca4 1292 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
5b28d95c
MY
1293 if (err < 0) {
1294 BT_ERR("L2CAP socket registration failed");
e2174ca4 1295 goto error;
5b28d95c
MY
1296 }
1297
b0316615 1298 err = bt_procfs_init(&init_net, "l2cap", &l2cap_sk_list,
2d792818 1299 NULL);
5b28d95c
MY
1300 if (err < 0) {
1301 BT_ERR("Failed to create L2CAP proc file");
1302 bt_sock_unregister(BTPROTO_L2CAP);
1303 goto error;
1304 }
bb58f747 1305
e2174ca4 1306 BT_INFO("L2CAP socket layer initialized");
bb58f747 1307
e2174ca4 1308 return 0;
bb58f747
GP
1309
1310error:
e2174ca4
GP
1311 proto_unregister(&l2cap_proto);
1312 return err;
bb58f747
GP
1313}
1314
1315void l2cap_cleanup_sockets(void)
1316{
5b28d95c 1317 bt_procfs_cleanup(&init_net, "l2cap");
5e9d7f86 1318 bt_sock_unregister(BTPROTO_L2CAP);
e2174ca4 1319 proto_unregister(&l2cap_proto);
bb58f747 1320}
This page took 0.257007 seconds and 5 git commands to generate.