Merge branch 'perf/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/acme...
[deliverable/linux.git] / net / bluetooth / l2cap_sock.c
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/security.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 #include <net/bluetooth/smp.h>
37
38 static const struct proto_ops l2cap_sock_ops;
39 static void l2cap_sock_init(struct sock *sk, struct sock *parent);
40 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio);
41
42 static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
43 {
44 struct sock *sk = sock->sk;
45 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
46 struct sockaddr_l2 la;
47 int len, err = 0;
48
49 BT_DBG("sk %p", sk);
50
51 if (!addr || addr->sa_family != AF_BLUETOOTH)
52 return -EINVAL;
53
54 memset(&la, 0, sizeof(la));
55 len = min_t(unsigned int, sizeof(la), alen);
56 memcpy(&la, addr, len);
57
58 if (la.l2_cid && la.l2_psm)
59 return -EINVAL;
60
61 lock_sock(sk);
62
63 if (sk->sk_state != BT_OPEN) {
64 err = -EBADFD;
65 goto done;
66 }
67
68 if (la.l2_psm) {
69 __u16 psm = __le16_to_cpu(la.l2_psm);
70
71 /* PSM must be odd and lsb of upper byte must be 0 */
72 if ((psm & 0x0101) != 0x0001) {
73 err = -EINVAL;
74 goto done;
75 }
76
77 /* Restrict usage of well-known PSMs */
78 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
79 err = -EACCES;
80 goto done;
81 }
82 }
83
84 if (la.l2_cid)
85 err = l2cap_add_scid(chan, la.l2_cid);
86 else
87 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
88
89 if (err < 0)
90 goto done;
91
92 if (__le16_to_cpu(la.l2_psm) == 0x0001 ||
93 __le16_to_cpu(la.l2_psm) == 0x0003)
94 chan->sec_level = BT_SECURITY_SDP;
95
96 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
97
98 chan->state = BT_BOUND;
99 sk->sk_state = BT_BOUND;
100
101 done:
102 release_sock(sk);
103 return err;
104 }
105
106 static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
107 {
108 struct sock *sk = sock->sk;
109 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
110 struct sockaddr_l2 la;
111 int len, err = 0;
112
113 BT_DBG("sk %p", sk);
114
115 if (!addr || alen < sizeof(addr->sa_family) ||
116 addr->sa_family != AF_BLUETOOTH)
117 return -EINVAL;
118
119 memset(&la, 0, sizeof(la));
120 len = min_t(unsigned int, sizeof(la), alen);
121 memcpy(&la, addr, len);
122
123 if (la.l2_cid && la.l2_psm)
124 return -EINVAL;
125
126 err = l2cap_chan_connect(chan, la.l2_psm, la.l2_cid, &la.l2_bdaddr);
127 if (err)
128 return err;
129
130 lock_sock(sk);
131
132 err = bt_sock_wait_state(sk, BT_CONNECTED,
133 sock_sndtimeo(sk, flags & O_NONBLOCK));
134
135 release_sock(sk);
136
137 return err;
138 }
139
140 static int l2cap_sock_listen(struct socket *sock, int backlog)
141 {
142 struct sock *sk = sock->sk;
143 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
144 int err = 0;
145
146 BT_DBG("sk %p backlog %d", sk, backlog);
147
148 lock_sock(sk);
149
150 if ((sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM)
151 || sk->sk_state != BT_BOUND) {
152 err = -EBADFD;
153 goto done;
154 }
155
156 switch (chan->mode) {
157 case L2CAP_MODE_BASIC:
158 break;
159 case L2CAP_MODE_ERTM:
160 case L2CAP_MODE_STREAMING:
161 if (!disable_ertm)
162 break;
163 /* fall through */
164 default:
165 err = -ENOTSUPP;
166 goto done;
167 }
168
169 sk->sk_max_ack_backlog = backlog;
170 sk->sk_ack_backlog = 0;
171
172 chan->state = BT_LISTEN;
173 sk->sk_state = BT_LISTEN;
174
175 done:
176 release_sock(sk);
177 return err;
178 }
179
180 static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
181 {
182 DECLARE_WAITQUEUE(wait, current);
183 struct sock *sk = sock->sk, *nsk;
184 long timeo;
185 int err = 0;
186
187 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
188
189 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
190
191 BT_DBG("sk %p timeo %ld", sk, timeo);
192
193 /* Wait for an incoming connection. (wake-one). */
194 add_wait_queue_exclusive(sk_sleep(sk), &wait);
195 while (1) {
196 set_current_state(TASK_INTERRUPTIBLE);
197
198 if (sk->sk_state != BT_LISTEN) {
199 err = -EBADFD;
200 break;
201 }
202
203 nsk = bt_accept_dequeue(sk, newsock);
204 if (nsk)
205 break;
206
207 if (!timeo) {
208 err = -EAGAIN;
209 break;
210 }
211
212 if (signal_pending(current)) {
213 err = sock_intr_errno(timeo);
214 break;
215 }
216
217 release_sock(sk);
218 timeo = schedule_timeout(timeo);
219 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
220 }
221 __set_current_state(TASK_RUNNING);
222 remove_wait_queue(sk_sleep(sk), &wait);
223
224 if (err)
225 goto done;
226
227 newsock->state = SS_CONNECTED;
228
229 BT_DBG("new socket %p", nsk);
230
231 done:
232 release_sock(sk);
233 return err;
234 }
235
236 static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
237 {
238 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
239 struct sock *sk = sock->sk;
240 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
241
242 BT_DBG("sock %p, sk %p", sock, sk);
243
244 addr->sa_family = AF_BLUETOOTH;
245 *len = sizeof(struct sockaddr_l2);
246
247 if (peer) {
248 la->l2_psm = chan->psm;
249 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
250 la->l2_cid = cpu_to_le16(chan->dcid);
251 } else {
252 la->l2_psm = chan->sport;
253 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
254 la->l2_cid = cpu_to_le16(chan->scid);
255 }
256
257 return 0;
258 }
259
260 static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
261 {
262 struct sock *sk = sock->sk;
263 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
264 struct l2cap_options opts;
265 struct l2cap_conninfo cinfo;
266 int len, err = 0;
267 u32 opt;
268
269 BT_DBG("sk %p", sk);
270
271 if (get_user(len, optlen))
272 return -EFAULT;
273
274 lock_sock(sk);
275
276 switch (optname) {
277 case L2CAP_OPTIONS:
278 memset(&opts, 0, sizeof(opts));
279 opts.imtu = chan->imtu;
280 opts.omtu = chan->omtu;
281 opts.flush_to = chan->flush_to;
282 opts.mode = chan->mode;
283 opts.fcs = chan->fcs;
284 opts.max_tx = chan->max_tx;
285 opts.txwin_size = chan->tx_win;
286
287 len = min_t(unsigned int, len, sizeof(opts));
288 if (copy_to_user(optval, (char *) &opts, len))
289 err = -EFAULT;
290
291 break;
292
293 case L2CAP_LM:
294 switch (chan->sec_level) {
295 case BT_SECURITY_LOW:
296 opt = L2CAP_LM_AUTH;
297 break;
298 case BT_SECURITY_MEDIUM:
299 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
300 break;
301 case BT_SECURITY_HIGH:
302 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
303 L2CAP_LM_SECURE;
304 break;
305 default:
306 opt = 0;
307 break;
308 }
309
310 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
311 opt |= L2CAP_LM_MASTER;
312
313 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
314 opt |= L2CAP_LM_RELIABLE;
315
316 if (put_user(opt, (u32 __user *) optval))
317 err = -EFAULT;
318 break;
319
320 case L2CAP_CONNINFO:
321 if (sk->sk_state != BT_CONNECTED &&
322 !(sk->sk_state == BT_CONNECT2 &&
323 bt_sk(sk)->defer_setup)) {
324 err = -ENOTCONN;
325 break;
326 }
327
328 memset(&cinfo, 0, sizeof(cinfo));
329 cinfo.hci_handle = chan->conn->hcon->handle;
330 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
331
332 len = min_t(unsigned int, len, sizeof(cinfo));
333 if (copy_to_user(optval, (char *) &cinfo, len))
334 err = -EFAULT;
335
336 break;
337
338 default:
339 err = -ENOPROTOOPT;
340 break;
341 }
342
343 release_sock(sk);
344 return err;
345 }
346
347 static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
348 {
349 struct sock *sk = sock->sk;
350 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
351 struct bt_security sec;
352 struct bt_power pwr;
353 int len, err = 0;
354
355 BT_DBG("sk %p", sk);
356
357 if (level == SOL_L2CAP)
358 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
359
360 if (level != SOL_BLUETOOTH)
361 return -ENOPROTOOPT;
362
363 if (get_user(len, optlen))
364 return -EFAULT;
365
366 lock_sock(sk);
367
368 switch (optname) {
369 case BT_SECURITY:
370 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
371 chan->chan_type != L2CAP_CHAN_RAW) {
372 err = -EINVAL;
373 break;
374 }
375
376 memset(&sec, 0, sizeof(sec));
377 sec.level = chan->sec_level;
378
379 if (sk->sk_state == BT_CONNECTED)
380 sec.key_size = chan->conn->hcon->enc_key_size;
381
382 len = min_t(unsigned int, len, sizeof(sec));
383 if (copy_to_user(optval, (char *) &sec, len))
384 err = -EFAULT;
385
386 break;
387
388 case BT_DEFER_SETUP:
389 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
390 err = -EINVAL;
391 break;
392 }
393
394 if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
395 err = -EFAULT;
396
397 break;
398
399 case BT_FLUSHABLE:
400 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
401 (u32 __user *) optval))
402 err = -EFAULT;
403
404 break;
405
406 case BT_POWER:
407 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
408 && sk->sk_type != SOCK_RAW) {
409 err = -EINVAL;
410 break;
411 }
412
413 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
414
415 len = min_t(unsigned int, len, sizeof(pwr));
416 if (copy_to_user(optval, (char *) &pwr, len))
417 err = -EFAULT;
418
419 break;
420
421 case BT_CHANNEL_POLICY:
422 if (!enable_hs) {
423 err = -ENOPROTOOPT;
424 break;
425 }
426
427 if (put_user(chan->chan_policy, (u32 __user *) optval))
428 err = -EFAULT;
429 break;
430
431 default:
432 err = -ENOPROTOOPT;
433 break;
434 }
435
436 release_sock(sk);
437 return err;
438 }
439
440 static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
441 {
442 struct sock *sk = sock->sk;
443 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
444 struct l2cap_options opts;
445 int len, err = 0;
446 u32 opt;
447
448 BT_DBG("sk %p", sk);
449
450 lock_sock(sk);
451
452 switch (optname) {
453 case L2CAP_OPTIONS:
454 if (sk->sk_state == BT_CONNECTED) {
455 err = -EINVAL;
456 break;
457 }
458
459 opts.imtu = chan->imtu;
460 opts.omtu = chan->omtu;
461 opts.flush_to = chan->flush_to;
462 opts.mode = chan->mode;
463 opts.fcs = chan->fcs;
464 opts.max_tx = chan->max_tx;
465 opts.txwin_size = chan->tx_win;
466
467 len = min_t(unsigned int, sizeof(opts), optlen);
468 if (copy_from_user((char *) &opts, optval, len)) {
469 err = -EFAULT;
470 break;
471 }
472
473 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
474 err = -EINVAL;
475 break;
476 }
477
478 chan->mode = opts.mode;
479 switch (chan->mode) {
480 case L2CAP_MODE_BASIC:
481 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
482 break;
483 case L2CAP_MODE_ERTM:
484 case L2CAP_MODE_STREAMING:
485 if (!disable_ertm)
486 break;
487 /* fall through */
488 default:
489 err = -EINVAL;
490 break;
491 }
492
493 chan->imtu = opts.imtu;
494 chan->omtu = opts.omtu;
495 chan->fcs = opts.fcs;
496 chan->max_tx = opts.max_tx;
497 chan->tx_win = opts.txwin_size;
498 break;
499
500 case L2CAP_LM:
501 if (get_user(opt, (u32 __user *) optval)) {
502 err = -EFAULT;
503 break;
504 }
505
506 if (opt & L2CAP_LM_AUTH)
507 chan->sec_level = BT_SECURITY_LOW;
508 if (opt & L2CAP_LM_ENCRYPT)
509 chan->sec_level = BT_SECURITY_MEDIUM;
510 if (opt & L2CAP_LM_SECURE)
511 chan->sec_level = BT_SECURITY_HIGH;
512
513 if (opt & L2CAP_LM_MASTER)
514 set_bit(FLAG_ROLE_SWITCH, &chan->flags);
515 else
516 clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
517
518 if (opt & L2CAP_LM_RELIABLE)
519 set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
520 else
521 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
522 break;
523
524 default:
525 err = -ENOPROTOOPT;
526 break;
527 }
528
529 release_sock(sk);
530 return err;
531 }
532
533 static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
534 {
535 struct sock *sk = sock->sk;
536 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
537 struct bt_security sec;
538 struct bt_power pwr;
539 struct l2cap_conn *conn;
540 int len, err = 0;
541 u32 opt;
542
543 BT_DBG("sk %p", sk);
544
545 if (level == SOL_L2CAP)
546 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
547
548 if (level != SOL_BLUETOOTH)
549 return -ENOPROTOOPT;
550
551 lock_sock(sk);
552
553 switch (optname) {
554 case BT_SECURITY:
555 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
556 chan->chan_type != L2CAP_CHAN_RAW) {
557 err = -EINVAL;
558 break;
559 }
560
561 sec.level = BT_SECURITY_LOW;
562
563 len = min_t(unsigned int, sizeof(sec), optlen);
564 if (copy_from_user((char *) &sec, optval, len)) {
565 err = -EFAULT;
566 break;
567 }
568
569 if (sec.level < BT_SECURITY_LOW ||
570 sec.level > BT_SECURITY_HIGH) {
571 err = -EINVAL;
572 break;
573 }
574
575 chan->sec_level = sec.level;
576
577 if (!chan->conn)
578 break;
579
580 conn = chan->conn;
581
582 /*change security for LE channels */
583 if (chan->scid == L2CAP_CID_LE_DATA) {
584 if (!conn->hcon->out) {
585 err = -EINVAL;
586 break;
587 }
588
589 if (smp_conn_security(conn, sec.level))
590 break;
591 sk->sk_state = BT_CONFIG;
592 chan->state = BT_CONFIG;
593
594 /* or for ACL link, under defer_setup time */
595 } else if (sk->sk_state == BT_CONNECT2 &&
596 bt_sk(sk)->defer_setup) {
597 err = l2cap_chan_check_security(chan);
598 } else {
599 err = -EINVAL;
600 }
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) {
629 struct l2cap_conn *conn = chan->conn;
630 /* proceed further only when we have l2cap_conn and
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
638 if (opt)
639 set_bit(FLAG_FLUSHABLE, &chan->flags);
640 else
641 clear_bit(FLAG_FLUSHABLE, &chan->flags);
642 break;
643
644 case BT_POWER:
645 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
646 chan->chan_type != L2CAP_CHAN_RAW) {
647 err = -EINVAL;
648 break;
649 }
650
651 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
652
653 len = min_t(unsigned int, sizeof(pwr), optlen);
654 if (copy_from_user((char *) &pwr, optval, len)) {
655 err = -EFAULT;
656 break;
657 }
658
659 if (pwr.force_active)
660 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
661 else
662 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
663 break;
664
665 case BT_CHANNEL_POLICY:
666 if (!enable_hs) {
667 err = -ENOPROTOOPT;
668 break;
669 }
670
671 if (get_user(opt, (u32 __user *) optval)) {
672 err = -EFAULT;
673 break;
674 }
675
676 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
677 err = -EINVAL;
678 break;
679 }
680
681 if (chan->mode != L2CAP_MODE_ERTM &&
682 chan->mode != L2CAP_MODE_STREAMING) {
683 err = -EOPNOTSUPP;
684 break;
685 }
686
687 chan->chan_policy = (u8) opt;
688 break;
689
690 default:
691 err = -ENOPROTOOPT;
692 break;
693 }
694
695 release_sock(sk);
696 return err;
697 }
698
699 static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
700 {
701 struct sock *sk = sock->sk;
702 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
703 int err;
704
705 BT_DBG("sock %p, sk %p", sock, sk);
706
707 err = sock_error(sk);
708 if (err)
709 return err;
710
711 if (msg->msg_flags & MSG_OOB)
712 return -EOPNOTSUPP;
713
714 lock_sock(sk);
715
716 if (sk->sk_state != BT_CONNECTED) {
717 release_sock(sk);
718 return -ENOTCONN;
719 }
720
721 err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
722
723 release_sock(sk);
724 return err;
725 }
726
727 static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
728 {
729 struct sock *sk = sock->sk;
730 struct l2cap_pinfo *pi = l2cap_pi(sk);
731 int err;
732
733 lock_sock(sk);
734
735 if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
736 sk->sk_state = BT_CONFIG;
737 pi->chan->state = BT_CONFIG;
738
739 __l2cap_connect_rsp_defer(pi->chan);
740 release_sock(sk);
741 return 0;
742 }
743
744 release_sock(sk);
745
746 if (sock->type == SOCK_STREAM)
747 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
748 else
749 err = bt_sock_recvmsg(iocb, sock, msg, len, flags);
750
751 if (pi->chan->mode != L2CAP_MODE_ERTM)
752 return err;
753
754 /* Attempt to put pending rx data in the socket buffer */
755
756 lock_sock(sk);
757
758 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
759 goto done;
760
761 if (pi->rx_busy_skb) {
762 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
763 pi->rx_busy_skb = NULL;
764 else
765 goto done;
766 }
767
768 /* Restore data flow when half of the receive buffer is
769 * available. This avoids resending large numbers of
770 * frames.
771 */
772 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
773 l2cap_chan_busy(pi->chan, 0);
774
775 done:
776 release_sock(sk);
777 return err;
778 }
779
780 /* Kill socket (only if zapped and orphan)
781 * Must be called on unlocked socket.
782 */
783 static void l2cap_sock_kill(struct sock *sk)
784 {
785 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
786 return;
787
788 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
789
790 /* Kill poor orphan */
791
792 l2cap_chan_destroy(l2cap_pi(sk)->chan);
793 sock_set_flag(sk, SOCK_DEAD);
794 sock_put(sk);
795 }
796
797 static int l2cap_sock_shutdown(struct socket *sock, int how)
798 {
799 struct sock *sk = sock->sk;
800 struct l2cap_chan *chan;
801 struct l2cap_conn *conn;
802 int err = 0;
803
804 BT_DBG("sock %p, sk %p", sock, sk);
805
806 if (!sk)
807 return 0;
808
809 chan = l2cap_pi(sk)->chan;
810 conn = chan->conn;
811
812 if (conn)
813 mutex_lock(&conn->chan_lock);
814
815 l2cap_chan_lock(chan);
816 lock_sock(sk);
817
818 if (!sk->sk_shutdown) {
819 if (chan->mode == L2CAP_MODE_ERTM)
820 err = __l2cap_wait_ack(sk);
821
822 sk->sk_shutdown = SHUTDOWN_MASK;
823
824 release_sock(sk);
825 l2cap_chan_close(chan, 0);
826 lock_sock(sk);
827
828 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
829 err = bt_sock_wait_state(sk, BT_CLOSED,
830 sk->sk_lingertime);
831 }
832
833 if (!err && sk->sk_err)
834 err = -sk->sk_err;
835
836 release_sock(sk);
837 l2cap_chan_unlock(chan);
838
839 if (conn)
840 mutex_unlock(&conn->chan_lock);
841
842 return err;
843 }
844
845 static int l2cap_sock_release(struct socket *sock)
846 {
847 struct sock *sk = sock->sk;
848 int err;
849
850 BT_DBG("sock %p, sk %p", sock, sk);
851
852 if (!sk)
853 return 0;
854
855 err = l2cap_sock_shutdown(sock, 2);
856
857 sock_orphan(sk);
858 l2cap_sock_kill(sk);
859 return err;
860 }
861
862 static struct l2cap_chan *l2cap_sock_new_connection_cb(void *data)
863 {
864 struct sock *sk, *parent = data;
865
866 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
867 GFP_ATOMIC);
868 if (!sk)
869 return NULL;
870
871 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
872
873 l2cap_sock_init(sk, parent);
874
875 return l2cap_pi(sk)->chan;
876 }
877
878 static int l2cap_sock_recv_cb(void *data, struct sk_buff *skb)
879 {
880 int err;
881 struct sock *sk = data;
882 struct l2cap_pinfo *pi = l2cap_pi(sk);
883
884 lock_sock(sk);
885
886 if (pi->rx_busy_skb) {
887 err = -ENOMEM;
888 goto done;
889 }
890
891 err = sock_queue_rcv_skb(sk, skb);
892
893 /* For ERTM, handle one skb that doesn't fit into the recv
894 * buffer. This is important to do because the data frames
895 * have already been acked, so the skb cannot be discarded.
896 *
897 * Notify the l2cap core that the buffer is full, so the
898 * LOCAL_BUSY state is entered and no more frames are
899 * acked and reassembled until there is buffer space
900 * available.
901 */
902 if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) {
903 pi->rx_busy_skb = skb;
904 l2cap_chan_busy(pi->chan, 1);
905 err = 0;
906 }
907
908 done:
909 release_sock(sk);
910
911 return err;
912 }
913
914 static void l2cap_sock_close_cb(void *data)
915 {
916 struct sock *sk = data;
917
918 l2cap_sock_kill(sk);
919 }
920
921 static void l2cap_sock_state_change_cb(void *data, int state)
922 {
923 struct sock *sk = data;
924
925 sk->sk_state = state;
926 }
927
928 static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
929 unsigned long len, int nb,
930 int *err)
931 {
932 struct sock *sk = chan->sk;
933
934 return bt_skb_send_alloc(sk, len, nb, err);
935 }
936
937 static struct l2cap_ops l2cap_chan_ops = {
938 .name = "L2CAP Socket Interface",
939 .new_connection = l2cap_sock_new_connection_cb,
940 .recv = l2cap_sock_recv_cb,
941 .close = l2cap_sock_close_cb,
942 .state_change = l2cap_sock_state_change_cb,
943 .alloc_skb = l2cap_sock_alloc_skb_cb,
944 };
945
946 static void l2cap_sock_destruct(struct sock *sk)
947 {
948 BT_DBG("sk %p", sk);
949
950 if (l2cap_pi(sk)->rx_busy_skb) {
951 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
952 l2cap_pi(sk)->rx_busy_skb = NULL;
953 }
954
955 skb_queue_purge(&sk->sk_receive_queue);
956 skb_queue_purge(&sk->sk_write_queue);
957 }
958
959 static void l2cap_sock_init(struct sock *sk, struct sock *parent)
960 {
961 struct l2cap_pinfo *pi = l2cap_pi(sk);
962 struct l2cap_chan *chan = pi->chan;
963
964 BT_DBG("sk %p", sk);
965
966 if (parent) {
967 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
968
969 sk->sk_type = parent->sk_type;
970 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
971
972 chan->chan_type = pchan->chan_type;
973 chan->imtu = pchan->imtu;
974 chan->omtu = pchan->omtu;
975 chan->conf_state = pchan->conf_state;
976 chan->mode = pchan->mode;
977 chan->fcs = pchan->fcs;
978 chan->max_tx = pchan->max_tx;
979 chan->tx_win = pchan->tx_win;
980 chan->tx_win_max = pchan->tx_win_max;
981 chan->sec_level = pchan->sec_level;
982 chan->flags = pchan->flags;
983
984 security_sk_clone(parent, sk);
985 } else {
986
987 switch (sk->sk_type) {
988 case SOCK_RAW:
989 chan->chan_type = L2CAP_CHAN_RAW;
990 break;
991 case SOCK_DGRAM:
992 chan->chan_type = L2CAP_CHAN_CONN_LESS;
993 break;
994 case SOCK_SEQPACKET:
995 case SOCK_STREAM:
996 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
997 break;
998 }
999
1000 chan->imtu = L2CAP_DEFAULT_MTU;
1001 chan->omtu = 0;
1002 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
1003 chan->mode = L2CAP_MODE_ERTM;
1004 set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
1005 } else {
1006 chan->mode = L2CAP_MODE_BASIC;
1007 }
1008 chan->max_tx = L2CAP_DEFAULT_MAX_TX;
1009 chan->fcs = L2CAP_FCS_CRC16;
1010 chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
1011 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
1012 chan->sec_level = BT_SECURITY_LOW;
1013 chan->flags = 0;
1014 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
1015 }
1016
1017 /* Default config options */
1018 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1019
1020 chan->data = sk;
1021 chan->ops = &l2cap_chan_ops;
1022 }
1023
1024 static struct proto l2cap_proto = {
1025 .name = "L2CAP",
1026 .owner = THIS_MODULE,
1027 .obj_size = sizeof(struct l2cap_pinfo)
1028 };
1029
1030 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
1031 {
1032 struct sock *sk;
1033 struct l2cap_chan *chan;
1034
1035 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1036 if (!sk)
1037 return NULL;
1038
1039 sock_init_data(sock, sk);
1040 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1041
1042 sk->sk_destruct = l2cap_sock_destruct;
1043 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1044
1045 sock_reset_flag(sk, SOCK_ZAPPED);
1046
1047 sk->sk_protocol = proto;
1048 sk->sk_state = BT_OPEN;
1049
1050 chan = l2cap_chan_create(sk);
1051 if (!chan) {
1052 l2cap_sock_kill(sk);
1053 return NULL;
1054 }
1055
1056 l2cap_pi(sk)->chan = chan;
1057
1058 return sk;
1059 }
1060
1061 static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1062 int kern)
1063 {
1064 struct sock *sk;
1065
1066 BT_DBG("sock %p", sock);
1067
1068 sock->state = SS_UNCONNECTED;
1069
1070 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1071 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1072 return -ESOCKTNOSUPPORT;
1073
1074 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1075 return -EPERM;
1076
1077 sock->ops = &l2cap_sock_ops;
1078
1079 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
1080 if (!sk)
1081 return -ENOMEM;
1082
1083 l2cap_sock_init(sk, NULL);
1084 return 0;
1085 }
1086
1087 static const struct proto_ops l2cap_sock_ops = {
1088 .family = PF_BLUETOOTH,
1089 .owner = THIS_MODULE,
1090 .release = l2cap_sock_release,
1091 .bind = l2cap_sock_bind,
1092 .connect = l2cap_sock_connect,
1093 .listen = l2cap_sock_listen,
1094 .accept = l2cap_sock_accept,
1095 .getname = l2cap_sock_getname,
1096 .sendmsg = l2cap_sock_sendmsg,
1097 .recvmsg = l2cap_sock_recvmsg,
1098 .poll = bt_sock_poll,
1099 .ioctl = bt_sock_ioctl,
1100 .mmap = sock_no_mmap,
1101 .socketpair = sock_no_socketpair,
1102 .shutdown = l2cap_sock_shutdown,
1103 .setsockopt = l2cap_sock_setsockopt,
1104 .getsockopt = l2cap_sock_getsockopt
1105 };
1106
1107 static const struct net_proto_family l2cap_sock_family_ops = {
1108 .family = PF_BLUETOOTH,
1109 .owner = THIS_MODULE,
1110 .create = l2cap_sock_create,
1111 };
1112
1113 int __init l2cap_init_sockets(void)
1114 {
1115 int err;
1116
1117 err = proto_register(&l2cap_proto, 0);
1118 if (err < 0)
1119 return err;
1120
1121 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1122 if (err < 0)
1123 goto error;
1124
1125 BT_INFO("L2CAP socket layer initialized");
1126
1127 return 0;
1128
1129 error:
1130 BT_ERR("L2CAP socket registration failed");
1131 proto_unregister(&l2cap_proto);
1132 return err;
1133 }
1134
1135 void l2cap_cleanup_sockets(void)
1136 {
1137 if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
1138 BT_ERR("L2CAP socket unregistration failed");
1139
1140 proto_unregister(&l2cap_proto);
1141 }
This page took 0.06821 seconds and 6 git commands to generate.