Bluetooth: Remove debug statements
[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.
6
7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License version 2 as
11 published by the Free Software Foundation;
12
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21
22 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24 SOFTWARE IS DISCLAIMED.
25*/
26
27/* Bluetooth L2CAP sockets. */
28
29#include <net/bluetooth/bluetooth.h>
33575df7 30#include <net/bluetooth/hci_core.h>
bb58f747
GP
31#include <net/bluetooth/l2cap.h>
32
cf2f90f5 33static const struct proto_ops l2cap_sock_ops;
80808e43
GP
34static void l2cap_sock_init(struct sock *sk, struct sock *parent);
35static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio);
cf2f90f5 36
af6bcd82
GP
37static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
38{
39 struct sock *sk = sock->sk;
4343478f 40 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
af6bcd82
GP
41 struct sockaddr_l2 la;
42 int len, err = 0;
43
44 BT_DBG("sk %p", sk);
45
46 if (!addr || addr->sa_family != AF_BLUETOOTH)
47 return -EINVAL;
48
49 memset(&la, 0, sizeof(la));
50 len = min_t(unsigned int, sizeof(la), alen);
51 memcpy(&la, addr, len);
52
b62f328b 53 if (la.l2_cid && la.l2_psm)
af6bcd82
GP
54 return -EINVAL;
55
56 lock_sock(sk);
57
58 if (sk->sk_state != BT_OPEN) {
59 err = -EBADFD;
60 goto done;
61 }
62
63 if (la.l2_psm) {
64 __u16 psm = __le16_to_cpu(la.l2_psm);
65
66 /* PSM must be odd and lsb of upper byte must be 0 */
67 if ((psm & 0x0101) != 0x0001) {
68 err = -EINVAL;
69 goto done;
70 }
71
72 /* Restrict usage of well-known PSMs */
73 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
74 err = -EACCES;
75 goto done;
76 }
77 }
78
9e4425ff
GP
79 if (la.l2_cid)
80 err = l2cap_add_scid(chan, la.l2_cid);
81 else
82 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
af6bcd82 83
9e4425ff
GP
84 if (err < 0)
85 goto done;
af6bcd82 86
9e4425ff
GP
87 if (__le16_to_cpu(la.l2_psm) == 0x0001 ||
88 __le16_to_cpu(la.l2_psm) == 0x0003)
89 chan->sec_level = BT_SECURITY_SDP;
b62f328b 90
9e4425ff 91 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
89bc500e
GP
92
93 chan->state = BT_BOUND;
9e4425ff 94 sk->sk_state = BT_BOUND;
af6bcd82
GP
95
96done:
97 release_sock(sk);
98 return err;
99}
100
4e34c50b
GP
101static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
102{
103 struct sock *sk = sock->sk;
0c1bc5c6 104 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
4e34c50b
GP
105 struct sockaddr_l2 la;
106 int len, err = 0;
107
108 BT_DBG("sk %p", sk);
109
110 if (!addr || alen < sizeof(addr->sa_family) ||
111 addr->sa_family != AF_BLUETOOTH)
112 return -EINVAL;
113
114 memset(&la, 0, sizeof(la));
115 len = min_t(unsigned int, sizeof(la), alen);
116 memcpy(&la, addr, len);
117
acd7d370 118 if (la.l2_cid && la.l2_psm)
4e34c50b
GP
119 return -EINVAL;
120
121 lock_sock(sk);
122
715ec005 123 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED
acd7d370 124 && !(la.l2_psm || la.l2_cid)) {
4e34c50b
GP
125 err = -EINVAL;
126 goto done;
127 }
128
0c1bc5c6 129 switch (chan->mode) {
4e34c50b
GP
130 case L2CAP_MODE_BASIC:
131 break;
132 case L2CAP_MODE_ERTM:
133 case L2CAP_MODE_STREAMING:
134 if (!disable_ertm)
135 break;
136 /* fall through */
137 default:
138 err = -ENOTSUPP;
139 goto done;
140 }
141
142 switch (sk->sk_state) {
143 case BT_CONNECT:
144 case BT_CONNECT2:
145 case BT_CONFIG:
146 /* Already connecting */
147 goto wait;
148
149 case BT_CONNECTED:
150 /* Already connected */
151 err = -EISCONN;
152 goto done;
153
154 case BT_OPEN:
155 case BT_BOUND:
156 /* Can connect */
157 break;
158
159 default:
160 err = -EBADFD;
161 goto done;
162 }
163
164 /* PSM must be odd and lsb of upper byte must be 0 */
715ec005
GP
165 if ((__le16_to_cpu(la.l2_psm) & 0x0101) != 0x0001 && !la.l2_cid &&
166 chan->chan_type != L2CAP_CHAN_RAW) {
4e34c50b
GP
167 err = -EINVAL;
168 goto done;
169 }
170
171 /* Set destination address and psm */
172 bacpy(&bt_sk(sk)->dst, &la.l2_bdaddr);
fe4128e0
GP
173 chan->psm = la.l2_psm;
174 chan->dcid = la.l2_cid;
4e34c50b 175
77a74c7e 176 err = l2cap_chan_connect(l2cap_pi(sk)->chan);
4e34c50b
GP
177 if (err)
178 goto done;
179
180wait:
181 err = bt_sock_wait_state(sk, BT_CONNECTED,
182 sock_sndtimeo(sk, flags & O_NONBLOCK));
183done:
184 release_sock(sk);
185 return err;
186}
187
af6bcd82
GP
188static int l2cap_sock_listen(struct socket *sock, int backlog)
189{
190 struct sock *sk = sock->sk;
0c1bc5c6 191 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
af6bcd82
GP
192 int err = 0;
193
194 BT_DBG("sk %p backlog %d", sk, backlog);
195
196 lock_sock(sk);
197
198 if ((sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM)
199 || sk->sk_state != BT_BOUND) {
200 err = -EBADFD;
201 goto done;
202 }
203
0c1bc5c6 204 switch (chan->mode) {
af6bcd82
GP
205 case L2CAP_MODE_BASIC:
206 break;
207 case L2CAP_MODE_ERTM:
208 case L2CAP_MODE_STREAMING:
209 if (!disable_ertm)
210 break;
211 /* fall through */
212 default:
213 err = -ENOTSUPP;
214 goto done;
215 }
216
af6bcd82
GP
217 sk->sk_max_ack_backlog = backlog;
218 sk->sk_ack_backlog = 0;
89bc500e
GP
219
220 chan->state = BT_LISTEN;
af6bcd82
GP
221 sk->sk_state = BT_LISTEN;
222
223done:
224 release_sock(sk);
225 return err;
226}
227
c47b7c72
GP
228static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
229{
230 DECLARE_WAITQUEUE(wait, current);
231 struct sock *sk = sock->sk, *nsk;
232 long timeo;
233 int err = 0;
234
235 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
236
237 if (sk->sk_state != BT_LISTEN) {
238 err = -EBADFD;
239 goto done;
240 }
241
242 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
243
244 BT_DBG("sk %p timeo %ld", sk, timeo);
245
246 /* Wait for an incoming connection. (wake-one). */
247 add_wait_queue_exclusive(sk_sleep(sk), &wait);
248 while (!(nsk = bt_accept_dequeue(sk, newsock))) {
249 set_current_state(TASK_INTERRUPTIBLE);
250 if (!timeo) {
251 err = -EAGAIN;
252 break;
253 }
254
255 release_sock(sk);
256 timeo = schedule_timeout(timeo);
257 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
258
259 if (sk->sk_state != BT_LISTEN) {
260 err = -EBADFD;
261 break;
262 }
263
264 if (signal_pending(current)) {
265 err = sock_intr_errno(timeo);
266 break;
267 }
268 }
269 set_current_state(TASK_RUNNING);
270 remove_wait_queue(sk_sleep(sk), &wait);
271
272 if (err)
273 goto done;
274
275 newsock->state = SS_CONNECTED;
276
277 BT_DBG("new socket %p", nsk);
278
279done:
280 release_sock(sk);
281 return err;
282}
283
d7175d55
GP
284static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
285{
286 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
287 struct sock *sk = sock->sk;
0c1bc5c6 288 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
d7175d55
GP
289
290 BT_DBG("sock %p, sk %p", sock, sk);
291
292 addr->sa_family = AF_BLUETOOTH;
293 *len = sizeof(struct sockaddr_l2);
294
295 if (peer) {
fe4128e0 296 la->l2_psm = chan->psm;
d7175d55 297 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
fe4128e0 298 la->l2_cid = cpu_to_le16(chan->dcid);
d7175d55 299 } else {
0c1bc5c6 300 la->l2_psm = chan->sport;
d7175d55 301 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
fe4128e0 302 la->l2_cid = cpu_to_le16(chan->scid);
d7175d55
GP
303 }
304
305 return 0;
306}
307
99f4808d
GP
308static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
309{
310 struct sock *sk = sock->sk;
4343478f 311 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
99f4808d
GP
312 struct l2cap_options opts;
313 struct l2cap_conninfo cinfo;
314 int len, err = 0;
315 u32 opt;
316
317 BT_DBG("sk %p", sk);
318
319 if (get_user(len, optlen))
320 return -EFAULT;
321
322 lock_sock(sk);
323
324 switch (optname) {
325 case L2CAP_OPTIONS:
e3fb592b 326 memset(&opts, 0, sizeof(opts));
0c1bc5c6
GP
327 opts.imtu = chan->imtu;
328 opts.omtu = chan->omtu;
329 opts.flush_to = chan->flush_to;
330 opts.mode = chan->mode;
47d1ec61
GP
331 opts.fcs = chan->fcs;
332 opts.max_tx = chan->max_tx;
333 opts.txwin_size = (__u16)chan->tx_win;
99f4808d
GP
334
335 len = min_t(unsigned int, len, sizeof(opts));
336 if (copy_to_user(optval, (char *) &opts, len))
337 err = -EFAULT;
338
339 break;
340
341 case L2CAP_LM:
4343478f 342 switch (chan->sec_level) {
99f4808d
GP
343 case BT_SECURITY_LOW:
344 opt = L2CAP_LM_AUTH;
345 break;
346 case BT_SECURITY_MEDIUM:
347 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
348 break;
349 case BT_SECURITY_HIGH:
350 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
351 L2CAP_LM_SECURE;
352 break;
353 default:
354 opt = 0;
355 break;
356 }
357
4343478f 358 if (chan->role_switch)
99f4808d
GP
359 opt |= L2CAP_LM_MASTER;
360
4343478f 361 if (chan->force_reliable)
99f4808d
GP
362 opt |= L2CAP_LM_RELIABLE;
363
364 if (put_user(opt, (u32 __user *) optval))
365 err = -EFAULT;
366 break;
367
368 case L2CAP_CONNINFO:
369 if (sk->sk_state != BT_CONNECTED &&
370 !(sk->sk_state == BT_CONNECT2 &&
371 bt_sk(sk)->defer_setup)) {
372 err = -ENOTCONN;
373 break;
374 }
375
8d03e971 376 memset(&cinfo, 0, sizeof(cinfo));
8c1d787b
GP
377 cinfo.hci_handle = chan->conn->hcon->handle;
378 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
99f4808d
GP
379
380 len = min_t(unsigned int, len, sizeof(cinfo));
381 if (copy_to_user(optval, (char *) &cinfo, len))
382 err = -EFAULT;
383
384 break;
385
386 default:
387 err = -ENOPROTOOPT;
388 break;
389 }
390
391 release_sock(sk);
392 return err;
393}
394
395static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
396{
397 struct sock *sk = sock->sk;
4343478f 398 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
99f4808d 399 struct bt_security sec;
14b12d0b 400 struct bt_power pwr;
99f4808d
GP
401 int len, err = 0;
402
403 BT_DBG("sk %p", sk);
404
405 if (level == SOL_L2CAP)
406 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
407
408 if (level != SOL_BLUETOOTH)
409 return -ENOPROTOOPT;
410
411 if (get_user(len, optlen))
412 return -EFAULT;
413
414 lock_sock(sk);
415
416 switch (optname) {
417 case BT_SECURITY:
715ec005
GP
418 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
419 chan->chan_type != L2CAP_CHAN_RAW) {
99f4808d
GP
420 err = -EINVAL;
421 break;
422 }
423
4343478f 424 sec.level = chan->sec_level;
99f4808d
GP
425
426 len = min_t(unsigned int, len, sizeof(sec));
427 if (copy_to_user(optval, (char *) &sec, len))
428 err = -EFAULT;
429
430 break;
431
432 case BT_DEFER_SETUP:
433 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
434 err = -EINVAL;
435 break;
436 }
437
438 if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
439 err = -EFAULT;
440
441 break;
442
443 case BT_FLUSHABLE:
4343478f 444 if (put_user(chan->flushable, (u32 __user *) optval))
99f4808d
GP
445 err = -EFAULT;
446
447 break;
448
14b12d0b
JG
449 case BT_POWER:
450 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
451 && sk->sk_type != SOCK_RAW) {
452 err = -EINVAL;
453 break;
454 }
455
456 pwr.force_active = chan->force_active;
457
458 len = min_t(unsigned int, len, sizeof(pwr));
459 if (copy_to_user(optval, (char *) &pwr, len))
460 err = -EFAULT;
461
462 break;
463
99f4808d
GP
464 default:
465 err = -ENOPROTOOPT;
466 break;
467 }
468
469 release_sock(sk);
470 return err;
471}
472
33575df7
GP
473static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
474{
475 struct sock *sk = sock->sk;
b4450035 476 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
33575df7
GP
477 struct l2cap_options opts;
478 int len, err = 0;
479 u32 opt;
480
481 BT_DBG("sk %p", sk);
482
483 lock_sock(sk);
484
485 switch (optname) {
486 case L2CAP_OPTIONS:
487 if (sk->sk_state == BT_CONNECTED) {
488 err = -EINVAL;
489 break;
490 }
491
0c1bc5c6
GP
492 opts.imtu = chan->imtu;
493 opts.omtu = chan->omtu;
494 opts.flush_to = chan->flush_to;
495 opts.mode = chan->mode;
47d1ec61
GP
496 opts.fcs = chan->fcs;
497 opts.max_tx = chan->max_tx;
498 opts.txwin_size = (__u16)chan->tx_win;
33575df7
GP
499
500 len = min_t(unsigned int, sizeof(opts), optlen);
501 if (copy_from_user((char *) &opts, optval, len)) {
502 err = -EFAULT;
503 break;
504 }
505
506 if (opts.txwin_size > L2CAP_DEFAULT_TX_WINDOW) {
507 err = -EINVAL;
508 break;
509 }
510
0c1bc5c6
GP
511 chan->mode = opts.mode;
512 switch (chan->mode) {
33575df7 513 case L2CAP_MODE_BASIC:
b4450035 514 chan->conf_state &= ~L2CAP_CONF_STATE2_DEVICE;
33575df7
GP
515 break;
516 case L2CAP_MODE_ERTM:
517 case L2CAP_MODE_STREAMING:
518 if (!disable_ertm)
519 break;
520 /* fall through */
521 default:
522 err = -EINVAL;
523 break;
524 }
525
0c1bc5c6
GP
526 chan->imtu = opts.imtu;
527 chan->omtu = opts.omtu;
47d1ec61
GP
528 chan->fcs = opts.fcs;
529 chan->max_tx = opts.max_tx;
530 chan->tx_win = (__u8)opts.txwin_size;
33575df7
GP
531 break;
532
533 case L2CAP_LM:
534 if (get_user(opt, (u32 __user *) optval)) {
535 err = -EFAULT;
536 break;
537 }
538
539 if (opt & L2CAP_LM_AUTH)
4343478f 540 chan->sec_level = BT_SECURITY_LOW;
33575df7 541 if (opt & L2CAP_LM_ENCRYPT)
4343478f 542 chan->sec_level = BT_SECURITY_MEDIUM;
33575df7 543 if (opt & L2CAP_LM_SECURE)
4343478f 544 chan->sec_level = BT_SECURITY_HIGH;
33575df7 545
4343478f
GP
546 chan->role_switch = (opt & L2CAP_LM_MASTER);
547 chan->force_reliable = (opt & L2CAP_LM_RELIABLE);
33575df7
GP
548 break;
549
550 default:
551 err = -ENOPROTOOPT;
552 break;
553 }
554
555 release_sock(sk);
556 return err;
557}
558
559static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
560{
561 struct sock *sk = sock->sk;
4343478f 562 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
33575df7 563 struct bt_security sec;
14b12d0b 564 struct bt_power pwr;
33575df7
GP
565 int len, err = 0;
566 u32 opt;
567
568 BT_DBG("sk %p", sk);
569
570 if (level == SOL_L2CAP)
571 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
572
573 if (level != SOL_BLUETOOTH)
574 return -ENOPROTOOPT;
575
576 lock_sock(sk);
577
578 switch (optname) {
579 case BT_SECURITY:
715ec005
GP
580 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
581 chan->chan_type != L2CAP_CHAN_RAW) {
33575df7
GP
582 err = -EINVAL;
583 break;
584 }
585
586 sec.level = BT_SECURITY_LOW;
587
588 len = min_t(unsigned int, sizeof(sec), optlen);
589 if (copy_from_user((char *) &sec, optval, len)) {
590 err = -EFAULT;
591 break;
592 }
593
594 if (sec.level < BT_SECURITY_LOW ||
595 sec.level > BT_SECURITY_HIGH) {
596 err = -EINVAL;
597 break;
598 }
599
4343478f 600 chan->sec_level = sec.level;
33575df7
GP
601 break;
602
603 case BT_DEFER_SETUP:
604 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
605 err = -EINVAL;
606 break;
607 }
608
609 if (get_user(opt, (u32 __user *) optval)) {
610 err = -EFAULT;
611 break;
612 }
613
614 bt_sk(sk)->defer_setup = opt;
615 break;
616
617 case BT_FLUSHABLE:
618 if (get_user(opt, (u32 __user *) optval)) {
619 err = -EFAULT;
620 break;
621 }
622
623 if (opt > BT_FLUSHABLE_ON) {
624 err = -EINVAL;
625 break;
626 }
627
628 if (opt == BT_FLUSHABLE_OFF) {
8c1d787b 629 struct l2cap_conn *conn = chan->conn;
25985edc 630 /* proceed further only when we have l2cap_conn and
33575df7
GP
631 No Flush support in the LM */
632 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
633 err = -EINVAL;
634 break;
635 }
636 }
637
4343478f 638 chan->flushable = opt;
33575df7
GP
639 break;
640
14b12d0b
JG
641 case BT_POWER:
642 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
643 chan->chan_type != L2CAP_CHAN_RAW) {
644 err = -EINVAL;
645 break;
646 }
647
648 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
649
650 len = min_t(unsigned int, sizeof(pwr), optlen);
651 if (copy_from_user((char *) &pwr, optval, len)) {
652 err = -EFAULT;
653 break;
654 }
655 chan->force_active = pwr.force_active;
656 break;
657
33575df7
GP
658 default:
659 err = -ENOPROTOOPT;
660 break;
661 }
662
663 release_sock(sk);
664 return err;
665}
fd83ccdb
GP
666
667static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
668{
669 struct sock *sk = sock->sk;
0c1bc5c6 670 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
fd83ccdb
GP
671 int err;
672
673 BT_DBG("sock %p, sk %p", sock, sk);
674
675 err = sock_error(sk);
676 if (err)
677 return err;
678
679 if (msg->msg_flags & MSG_OOB)
680 return -EOPNOTSUPP;
681
682 lock_sock(sk);
683
684 if (sk->sk_state != BT_CONNECTED) {
9a91a04a
GP
685 release_sock(sk);
686 return -ENOTCONN;
fd83ccdb
GP
687 }
688
9a91a04a 689 err = l2cap_chan_send(chan, msg, len);
fd83ccdb 690
fd83ccdb
GP
691 release_sock(sk);
692 return err;
693}
33575df7 694
68983259
GP
695static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
696{
697 struct sock *sk = sock->sk;
698
699 lock_sock(sk);
700
701 if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
8c1d787b
GP
702 sk->sk_state = BT_CONFIG;
703
704 __l2cap_connect_rsp_defer(l2cap_pi(sk)->chan);
68983259
GP
705 release_sock(sk);
706 return 0;
707 }
708
709 release_sock(sk);
710
711 if (sock->type == SOCK_STREAM)
712 return bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
713
714 return bt_sock_recvmsg(iocb, sock, msg, len, flags);
715}
716
05fc1576
GP
717/* Kill socket (only if zapped and orphan)
718 * Must be called on unlocked socket.
719 */
ba3bd0ee 720static void l2cap_sock_kill(struct sock *sk)
05fc1576
GP
721{
722 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
723 return;
724
725 BT_DBG("sk %p state %d", sk, sk->sk_state);
726
727 /* Kill poor orphan */
6ff5abbf 728
23691d75 729 l2cap_chan_destroy(l2cap_pi(sk)->chan);
05fc1576
GP
730 sock_set_flag(sk, SOCK_DEAD);
731 sock_put(sk);
732}
733
dcba0dba
GP
734static int l2cap_sock_shutdown(struct socket *sock, int how)
735{
736 struct sock *sk = sock->sk;
0c1bc5c6 737 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
dcba0dba
GP
738 int err = 0;
739
740 BT_DBG("sock %p, sk %p", sock, sk);
741
742 if (!sk)
743 return 0;
744
745 lock_sock(sk);
746 if (!sk->sk_shutdown) {
0c1bc5c6 747 if (chan->mode == L2CAP_MODE_ERTM)
dcba0dba
GP
748 err = __l2cap_wait_ack(sk);
749
750 sk->sk_shutdown = SHUTDOWN_MASK;
0f852724 751 l2cap_chan_close(chan, 0);
dcba0dba
GP
752
753 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
754 err = bt_sock_wait_state(sk, BT_CLOSED,
755 sk->sk_lingertime);
756 }
757
758 if (!err && sk->sk_err)
759 err = -sk->sk_err;
760
761 release_sock(sk);
762 return err;
763}
764
554f05bb
GP
765static int l2cap_sock_release(struct socket *sock)
766{
767 struct sock *sk = sock->sk;
768 int err;
769
770 BT_DBG("sock %p, sk %p", sock, sk);
771
772 if (!sk)
773 return 0;
774
775 err = l2cap_sock_shutdown(sock, 2);
776
777 sock_orphan(sk);
778 l2cap_sock_kill(sk);
779 return err;
780}
781
80808e43
GP
782static struct l2cap_chan *l2cap_sock_new_connection_cb(void *data)
783{
784 struct sock *sk, *parent = data;
785
786 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
787 GFP_ATOMIC);
788 if (!sk)
789 return NULL;
790
791 l2cap_sock_init(sk, parent);
792
793 return l2cap_pi(sk)->chan;
794}
795
23070494
GP
796static int l2cap_sock_recv_cb(void *data, struct sk_buff *skb)
797{
798 struct sock *sk = data;
799
800 return sock_queue_rcv_skb(sk, skb);
801}
802
ba3bd0ee
GP
803static void l2cap_sock_close_cb(void *data)
804{
805 struct sock *sk = data;
806
807 l2cap_sock_kill(sk);
808}
809
89bc500e
GP
810static void l2cap_sock_state_change_cb(void *data, int state)
811{
812 struct sock *sk = data;
813
814 sk->sk_state = state;
815}
816
80808e43
GP
817static struct l2cap_ops l2cap_chan_ops = {
818 .name = "L2CAP Socket Interface",
819 .new_connection = l2cap_sock_new_connection_cb,
23070494 820 .recv = l2cap_sock_recv_cb,
ba3bd0ee 821 .close = l2cap_sock_close_cb,
89bc500e 822 .state_change = l2cap_sock_state_change_cb,
80808e43
GP
823};
824
bb58f747
GP
825static void l2cap_sock_destruct(struct sock *sk)
826{
827 BT_DBG("sk %p", sk);
828
829 skb_queue_purge(&sk->sk_receive_queue);
830 skb_queue_purge(&sk->sk_write_queue);
831}
832
80808e43 833static void l2cap_sock_init(struct sock *sk, struct sock *parent)
bb58f747
GP
834{
835 struct l2cap_pinfo *pi = l2cap_pi(sk);
b4450035 836 struct l2cap_chan *chan = pi->chan;
bb58f747
GP
837
838 BT_DBG("sk %p", sk);
839
840 if (parent) {
b4450035
GP
841 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
842
bb58f747
GP
843 sk->sk_type = parent->sk_type;
844 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
845
715ec005 846 chan->chan_type = pchan->chan_type;
0c1bc5c6
GP
847 chan->imtu = pchan->imtu;
848 chan->omtu = pchan->omtu;
b4450035 849 chan->conf_state = pchan->conf_state;
0c1bc5c6 850 chan->mode = pchan->mode;
47d1ec61
GP
851 chan->fcs = pchan->fcs;
852 chan->max_tx = pchan->max_tx;
853 chan->tx_win = pchan->tx_win;
4343478f
GP
854 chan->sec_level = pchan->sec_level;
855 chan->role_switch = pchan->role_switch;
856 chan->force_reliable = pchan->force_reliable;
857 chan->flushable = pchan->flushable;
14b12d0b 858 chan->force_active = pchan->force_active;
bb58f747 859 } else {
715ec005
GP
860
861 switch (sk->sk_type) {
862 case SOCK_RAW:
863 chan->chan_type = L2CAP_CHAN_RAW;
864 break;
865 case SOCK_DGRAM:
866 chan->chan_type = L2CAP_CHAN_CONN_LESS;
867 break;
868 case SOCK_SEQPACKET:
869 case SOCK_STREAM:
870 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
871 break;
872 }
873
0c1bc5c6
GP
874 chan->imtu = L2CAP_DEFAULT_MTU;
875 chan->omtu = 0;
bb58f747 876 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
0c1bc5c6 877 chan->mode = L2CAP_MODE_ERTM;
b4450035 878 chan->conf_state |= L2CAP_CONF_STATE2_DEVICE;
bb58f747 879 } else {
0c1bc5c6 880 chan->mode = L2CAP_MODE_BASIC;
bb58f747 881 }
47d1ec61
GP
882 chan->max_tx = L2CAP_DEFAULT_MAX_TX;
883 chan->fcs = L2CAP_FCS_CRC16;
884 chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
4343478f
GP
885 chan->sec_level = BT_SECURITY_LOW;
886 chan->role_switch = 0;
887 chan->force_reliable = 0;
888 chan->flushable = BT_FLUSHABLE_OFF;
14b12d0b 889 chan->force_active = BT_POWER_FORCE_ACTIVE_ON;
80808e43 890
bb58f747
GP
891 }
892
893 /* Default config options */
0c1bc5c6 894 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
80808e43
GP
895
896 chan->data = sk;
897 chan->ops = &l2cap_chan_ops;
bb58f747
GP
898}
899
900static struct proto l2cap_proto = {
901 .name = "L2CAP",
902 .owner = THIS_MODULE,
903 .obj_size = sizeof(struct l2cap_pinfo)
904};
905
80808e43 906static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
bb58f747
GP
907{
908 struct sock *sk;
dc50a06d 909 struct l2cap_chan *chan;
bb58f747
GP
910
911 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
912 if (!sk)
913 return NULL;
914
915 sock_init_data(sock, sk);
916 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
917
918 sk->sk_destruct = l2cap_sock_destruct;
919 sk->sk_sndtimeo = msecs_to_jiffies(L2CAP_CONN_TIMEOUT);
920
921 sock_reset_flag(sk, SOCK_ZAPPED);
922
923 sk->sk_protocol = proto;
924 sk->sk_state = BT_OPEN;
925
dc50a06d
GP
926 chan = l2cap_chan_create(sk);
927 if (!chan) {
928 l2cap_sock_kill(sk);
929 return NULL;
930 }
931
932 l2cap_pi(sk)->chan = chan;
933
bb58f747
GP
934 return sk;
935}
936
937static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
938 int kern)
939{
940 struct sock *sk;
941
942 BT_DBG("sock %p", sock);
943
944 sock->state = SS_UNCONNECTED;
945
946 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
947 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
948 return -ESOCKTNOSUPPORT;
949
950 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
951 return -EPERM;
952
953 sock->ops = &l2cap_sock_ops;
954
955 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
956 if (!sk)
957 return -ENOMEM;
958
959 l2cap_sock_init(sk, NULL);
960 return 0;
961}
962
cf2f90f5 963static const struct proto_ops l2cap_sock_ops = {
65390587
GP
964 .family = PF_BLUETOOTH,
965 .owner = THIS_MODULE,
966 .release = l2cap_sock_release,
967 .bind = l2cap_sock_bind,
968 .connect = l2cap_sock_connect,
969 .listen = l2cap_sock_listen,
970 .accept = l2cap_sock_accept,
971 .getname = l2cap_sock_getname,
972 .sendmsg = l2cap_sock_sendmsg,
973 .recvmsg = l2cap_sock_recvmsg,
974 .poll = bt_sock_poll,
975 .ioctl = bt_sock_ioctl,
976 .mmap = sock_no_mmap,
977 .socketpair = sock_no_socketpair,
978 .shutdown = l2cap_sock_shutdown,
979 .setsockopt = l2cap_sock_setsockopt,
980 .getsockopt = l2cap_sock_getsockopt
981};
982
bb58f747
GP
983static const struct net_proto_family l2cap_sock_family_ops = {
984 .family = PF_BLUETOOTH,
985 .owner = THIS_MODULE,
986 .create = l2cap_sock_create,
987};
988
989int __init l2cap_init_sockets(void)
990{
e2174ca4 991 int err;
bb58f747 992
e2174ca4
GP
993 err = proto_register(&l2cap_proto, 0);
994 if (err < 0)
995 return err;
bb58f747 996
e2174ca4
GP
997 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
998 if (err < 0)
999 goto error;
bb58f747 1000
e2174ca4 1001 BT_INFO("L2CAP socket layer initialized");
bb58f747 1002
e2174ca4 1003 return 0;
bb58f747
GP
1004
1005error:
e2174ca4
GP
1006 BT_ERR("L2CAP socket registration failed");
1007 proto_unregister(&l2cap_proto);
1008 return err;
bb58f747
GP
1009}
1010
1011void l2cap_cleanup_sockets(void)
1012{
e2174ca4
GP
1013 if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
1014 BT_ERR("L2CAP socket unregistration failed");
bb58f747 1015
e2174ca4 1016 proto_unregister(&l2cap_proto);
bb58f747 1017}
This page took 0.102317 seconds and 5 git commands to generate.