blob: a29782a0083ad8a0ddbe1a2b9ee1176e0255298f [file] [log] [blame]
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001/*
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>
Gustavo F. Padovan33575df2011-02-04 02:48:48 -020030#include <net/bluetooth/hci_core.h>
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -020031#include <net/bluetooth/l2cap.h>
32
Gustavo F. Padovan6ddc0482011-02-04 03:23:31 -020033/* ---- L2CAP timers ---- */
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -020034static void l2cap_sock_timeout(unsigned long arg)
35{
36 struct sock *sk = (struct sock *) arg;
37 int reason;
38
39 BT_DBG("sock %p state %d", sk, sk->sk_state);
40
41 bh_lock_sock(sk);
42
43 if (sock_owned_by_user(sk)) {
44 /* sk is owned by user. Try again later */
45 l2cap_sock_set_timer(sk, HZ / 5);
46 bh_unlock_sock(sk);
47 sock_put(sk);
48 return;
49 }
50
51 if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONFIG)
52 reason = ECONNREFUSED;
53 else if (sk->sk_state == BT_CONNECT &&
54 l2cap_pi(sk)->sec_level != BT_SECURITY_SDP)
55 reason = ECONNREFUSED;
56 else
57 reason = ETIMEDOUT;
58
59 __l2cap_sock_close(sk, reason);
60
61 bh_unlock_sock(sk);
62
63 l2cap_sock_kill(sk);
64 sock_put(sk);
65}
66
Gustavo F. Padovan6ddc0482011-02-04 03:23:31 -020067void l2cap_sock_set_timer(struct sock *sk, long timeout)
68{
69 BT_DBG("sk %p state %d timeout %ld", sk, sk->sk_state, timeout);
70 sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
71}
72
73void l2cap_sock_clear_timer(struct sock *sk)
74{
75 BT_DBG("sock %p state %d", sk, sk->sk_state);
76 sk_stop_timer(sk, &sk->sk_timer);
77}
78
Gustavo F. Padovanaf6bcd82011-02-04 02:40:28 -020079static struct sock *__l2cap_get_sock_by_addr(__le16 psm, bdaddr_t *src)
80{
81 struct sock *sk;
82 struct hlist_node *node;
83 sk_for_each(sk, node, &l2cap_sk_list.head)
84 if (l2cap_pi(sk)->sport == psm && !bacmp(&bt_sk(sk)->src, src))
85 goto found;
86 sk = NULL;
87found:
88 return sk;
89}
90
91static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
92{
93 struct sock *sk = sock->sk;
94 struct sockaddr_l2 la;
95 int len, err = 0;
96
97 BT_DBG("sk %p", sk);
98
99 if (!addr || addr->sa_family != AF_BLUETOOTH)
100 return -EINVAL;
101
102 memset(&la, 0, sizeof(la));
103 len = min_t(unsigned int, sizeof(la), alen);
104 memcpy(&la, addr, len);
105
Ville Tervob62f3282011-02-10 22:38:50 -0300106 if (la.l2_cid && la.l2_psm)
Gustavo F. Padovanaf6bcd82011-02-04 02:40:28 -0200107 return -EINVAL;
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 /* PSM must be odd and lsb of upper byte must be 0 */
120 if ((psm & 0x0101) != 0x0001) {
121 err = -EINVAL;
122 goto done;
123 }
124
125 /* Restrict usage of well-known PSMs */
126 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
127 err = -EACCES;
128 goto done;
129 }
130 }
131
132 write_lock_bh(&l2cap_sk_list.lock);
133
134 if (la.l2_psm && __l2cap_get_sock_by_addr(la.l2_psm, &la.l2_bdaddr)) {
135 err = -EADDRINUSE;
136 } else {
137 /* Save source address */
138 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
139 l2cap_pi(sk)->psm = la.l2_psm;
140 l2cap_pi(sk)->sport = la.l2_psm;
141 sk->sk_state = BT_BOUND;
142
143 if (__le16_to_cpu(la.l2_psm) == 0x0001 ||
144 __le16_to_cpu(la.l2_psm) == 0x0003)
145 l2cap_pi(sk)->sec_level = BT_SECURITY_SDP;
146 }
147
Ville Tervob62f3282011-02-10 22:38:50 -0300148 if (la.l2_cid)
149 l2cap_pi(sk)->scid = la.l2_cid;
150
Gustavo F. Padovanaf6bcd82011-02-04 02:40:28 -0200151 write_unlock_bh(&l2cap_sk_list.lock);
152
153done:
154 release_sock(sk);
155 return err;
156}
157
Gustavo F. Padovan4e34c502011-02-04 02:56:13 -0200158static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
159{
160 struct sock *sk = sock->sk;
161 struct sockaddr_l2 la;
162 int len, err = 0;
163
164 BT_DBG("sk %p", sk);
165
166 if (!addr || alen < sizeof(addr->sa_family) ||
167 addr->sa_family != AF_BLUETOOTH)
168 return -EINVAL;
169
170 memset(&la, 0, sizeof(la));
171 len = min_t(unsigned int, sizeof(la), alen);
172 memcpy(&la, addr, len);
173
Ville Tervoacd7d372011-02-10 22:38:49 -0300174 if (la.l2_cid && la.l2_psm)
Gustavo F. Padovan4e34c502011-02-04 02:56:13 -0200175 return -EINVAL;
176
177 lock_sock(sk);
178
179 if ((sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM)
Ville Tervoacd7d372011-02-10 22:38:49 -0300180 && !(la.l2_psm || la.l2_cid)) {
Gustavo F. Padovan4e34c502011-02-04 02:56:13 -0200181 err = -EINVAL;
182 goto done;
183 }
184
185 switch (l2cap_pi(sk)->mode) {
186 case L2CAP_MODE_BASIC:
187 break;
188 case L2CAP_MODE_ERTM:
189 case L2CAP_MODE_STREAMING:
190 if (!disable_ertm)
191 break;
192 /* fall through */
193 default:
194 err = -ENOTSUPP;
195 goto done;
196 }
197
198 switch (sk->sk_state) {
199 case BT_CONNECT:
200 case BT_CONNECT2:
201 case BT_CONFIG:
202 /* Already connecting */
203 goto wait;
204
205 case BT_CONNECTED:
206 /* Already connected */
207 err = -EISCONN;
208 goto done;
209
210 case BT_OPEN:
211 case BT_BOUND:
212 /* Can connect */
213 break;
214
215 default:
216 err = -EBADFD;
217 goto done;
218 }
219
220 /* PSM must be odd and lsb of upper byte must be 0 */
221 if ((__le16_to_cpu(la.l2_psm) & 0x0101) != 0x0001 &&
Ville Tervoacd7d372011-02-10 22:38:49 -0300222 sk->sk_type != SOCK_RAW && !la.l2_cid) {
Gustavo F. Padovan4e34c502011-02-04 02:56:13 -0200223 err = -EINVAL;
224 goto done;
225 }
226
227 /* Set destination address and psm */
228 bacpy(&bt_sk(sk)->dst, &la.l2_bdaddr);
229 l2cap_pi(sk)->psm = la.l2_psm;
Ville Tervoacd7d372011-02-10 22:38:49 -0300230 l2cap_pi(sk)->dcid = la.l2_cid;
Gustavo F. Padovan4e34c502011-02-04 02:56:13 -0200231
Gustavo F. Padovan5d41ce12011-04-08 15:40:02 -0300232 err = l2cap_do_connect(l2cap_pi(sk)->chan);
Gustavo F. Padovan4e34c502011-02-04 02:56:13 -0200233 if (err)
234 goto done;
235
236wait:
237 err = bt_sock_wait_state(sk, BT_CONNECTED,
238 sock_sndtimeo(sk, flags & O_NONBLOCK));
239done:
240 release_sock(sk);
241 return err;
242}
243
Gustavo F. Padovanaf6bcd82011-02-04 02:40:28 -0200244static int l2cap_sock_listen(struct socket *sock, int backlog)
245{
246 struct sock *sk = sock->sk;
247 int err = 0;
248
249 BT_DBG("sk %p backlog %d", sk, backlog);
250
251 lock_sock(sk);
252
253 if ((sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM)
254 || sk->sk_state != BT_BOUND) {
255 err = -EBADFD;
256 goto done;
257 }
258
259 switch (l2cap_pi(sk)->mode) {
260 case L2CAP_MODE_BASIC:
261 break;
262 case L2CAP_MODE_ERTM:
263 case L2CAP_MODE_STREAMING:
264 if (!disable_ertm)
265 break;
266 /* fall through */
267 default:
268 err = -ENOTSUPP;
269 goto done;
270 }
271
Gustavo F. Padovancd69a032011-04-05 15:24:40 -0300272 if (!l2cap_pi(sk)->psm && !l2cap_pi(sk)->scid) {
Gustavo F. Padovanaf6bcd82011-02-04 02:40:28 -0200273 bdaddr_t *src = &bt_sk(sk)->src;
274 u16 psm;
275
276 err = -EINVAL;
277
278 write_lock_bh(&l2cap_sk_list.lock);
279
280 for (psm = 0x1001; psm < 0x1100; psm += 2)
281 if (!__l2cap_get_sock_by_addr(cpu_to_le16(psm), src)) {
282 l2cap_pi(sk)->psm = cpu_to_le16(psm);
283 l2cap_pi(sk)->sport = cpu_to_le16(psm);
284 err = 0;
285 break;
286 }
287
288 write_unlock_bh(&l2cap_sk_list.lock);
289
290 if (err < 0)
291 goto done;
292 }
293
294 sk->sk_max_ack_backlog = backlog;
295 sk->sk_ack_backlog = 0;
296 sk->sk_state = BT_LISTEN;
297
298done:
299 release_sock(sk);
300 return err;
301}
302
Gustavo F. Padovanc47b7c72011-02-04 02:42:23 -0200303static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
304{
305 DECLARE_WAITQUEUE(wait, current);
306 struct sock *sk = sock->sk, *nsk;
307 long timeo;
308 int err = 0;
309
310 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
311
312 if (sk->sk_state != BT_LISTEN) {
313 err = -EBADFD;
314 goto done;
315 }
316
317 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
318
319 BT_DBG("sk %p timeo %ld", sk, timeo);
320
321 /* Wait for an incoming connection. (wake-one). */
322 add_wait_queue_exclusive(sk_sleep(sk), &wait);
323 while (!(nsk = bt_accept_dequeue(sk, newsock))) {
324 set_current_state(TASK_INTERRUPTIBLE);
325 if (!timeo) {
326 err = -EAGAIN;
327 break;
328 }
329
330 release_sock(sk);
331 timeo = schedule_timeout(timeo);
332 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
333
334 if (sk->sk_state != BT_LISTEN) {
335 err = -EBADFD;
336 break;
337 }
338
339 if (signal_pending(current)) {
340 err = sock_intr_errno(timeo);
341 break;
342 }
343 }
344 set_current_state(TASK_RUNNING);
345 remove_wait_queue(sk_sleep(sk), &wait);
346
347 if (err)
348 goto done;
349
350 newsock->state = SS_CONNECTED;
351
352 BT_DBG("new socket %p", nsk);
353
354done:
355 release_sock(sk);
356 return err;
357}
358
Gustavo F. Padovand7175d52011-02-04 02:43:46 -0200359static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
360{
361 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
362 struct sock *sk = sock->sk;
363
364 BT_DBG("sock %p, sk %p", sock, sk);
365
366 addr->sa_family = AF_BLUETOOTH;
367 *len = sizeof(struct sockaddr_l2);
368
369 if (peer) {
370 la->l2_psm = l2cap_pi(sk)->psm;
371 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
372 la->l2_cid = cpu_to_le16(l2cap_pi(sk)->dcid);
373 } else {
374 la->l2_psm = l2cap_pi(sk)->sport;
375 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
376 la->l2_cid = cpu_to_le16(l2cap_pi(sk)->scid);
377 }
378
379 return 0;
380}
381
Gustavo F. Padovan99f48082011-02-04 02:52:55 -0200382static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
383{
384 struct sock *sk = sock->sk;
385 struct l2cap_options opts;
386 struct l2cap_conninfo cinfo;
387 int len, err = 0;
388 u32 opt;
389
390 BT_DBG("sk %p", sk);
391
392 if (get_user(len, optlen))
393 return -EFAULT;
394
395 lock_sock(sk);
396
397 switch (optname) {
398 case L2CAP_OPTIONS:
Vasiliy Kulikove3fb5922011-02-10 20:59:42 +0300399 memset(&opts, 0, sizeof(opts));
Gustavo F. Padovan99f48082011-02-04 02:52:55 -0200400 opts.imtu = l2cap_pi(sk)->imtu;
401 opts.omtu = l2cap_pi(sk)->omtu;
402 opts.flush_to = l2cap_pi(sk)->flush_to;
403 opts.mode = l2cap_pi(sk)->mode;
404 opts.fcs = l2cap_pi(sk)->fcs;
405 opts.max_tx = l2cap_pi(sk)->max_tx;
406 opts.txwin_size = (__u16)l2cap_pi(sk)->tx_win;
407
408 len = min_t(unsigned int, len, sizeof(opts));
409 if (copy_to_user(optval, (char *) &opts, len))
410 err = -EFAULT;
411
412 break;
413
414 case L2CAP_LM:
415 switch (l2cap_pi(sk)->sec_level) {
416 case BT_SECURITY_LOW:
417 opt = L2CAP_LM_AUTH;
418 break;
419 case BT_SECURITY_MEDIUM:
420 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
421 break;
422 case BT_SECURITY_HIGH:
423 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
424 L2CAP_LM_SECURE;
425 break;
426 default:
427 opt = 0;
428 break;
429 }
430
431 if (l2cap_pi(sk)->role_switch)
432 opt |= L2CAP_LM_MASTER;
433
434 if (l2cap_pi(sk)->force_reliable)
435 opt |= L2CAP_LM_RELIABLE;
436
437 if (put_user(opt, (u32 __user *) optval))
438 err = -EFAULT;
439 break;
440
441 case L2CAP_CONNINFO:
442 if (sk->sk_state != BT_CONNECTED &&
443 !(sk->sk_state == BT_CONNECT2 &&
444 bt_sk(sk)->defer_setup)) {
445 err = -ENOTCONN;
446 break;
447 }
448
449 cinfo.hci_handle = l2cap_pi(sk)->conn->hcon->handle;
450 memcpy(cinfo.dev_class, l2cap_pi(sk)->conn->hcon->dev_class, 3);
451
452 len = min_t(unsigned int, len, sizeof(cinfo));
453 if (copy_to_user(optval, (char *) &cinfo, len))
454 err = -EFAULT;
455
456 break;
457
458 default:
459 err = -ENOPROTOOPT;
460 break;
461 }
462
463 release_sock(sk);
464 return err;
465}
466
467static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
468{
469 struct sock *sk = sock->sk;
470 struct bt_security sec;
471 int len, err = 0;
472
473 BT_DBG("sk %p", sk);
474
475 if (level == SOL_L2CAP)
476 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
477
478 if (level != SOL_BLUETOOTH)
479 return -ENOPROTOOPT;
480
481 if (get_user(len, optlen))
482 return -EFAULT;
483
484 lock_sock(sk);
485
486 switch (optname) {
487 case BT_SECURITY:
488 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
489 && sk->sk_type != SOCK_RAW) {
490 err = -EINVAL;
491 break;
492 }
493
494 sec.level = l2cap_pi(sk)->sec_level;
495
496 len = min_t(unsigned int, len, sizeof(sec));
497 if (copy_to_user(optval, (char *) &sec, len))
498 err = -EFAULT;
499
500 break;
501
502 case BT_DEFER_SETUP:
503 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
504 err = -EINVAL;
505 break;
506 }
507
508 if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
509 err = -EFAULT;
510
511 break;
512
513 case BT_FLUSHABLE:
514 if (put_user(l2cap_pi(sk)->flushable, (u32 __user *) optval))
515 err = -EFAULT;
516
517 break;
518
519 default:
520 err = -ENOPROTOOPT;
521 break;
522 }
523
524 release_sock(sk);
525 return err;
526}
527
Gustavo F. Padovan33575df2011-02-04 02:48:48 -0200528static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
529{
530 struct sock *sk = sock->sk;
Gustavo F. Padovanb4450032011-04-12 18:15:09 -0300531 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
Gustavo F. Padovan33575df2011-02-04 02:48:48 -0200532 struct l2cap_options opts;
533 int len, err = 0;
534 u32 opt;
535
536 BT_DBG("sk %p", sk);
537
538 lock_sock(sk);
539
540 switch (optname) {
541 case L2CAP_OPTIONS:
542 if (sk->sk_state == BT_CONNECTED) {
543 err = -EINVAL;
544 break;
545 }
546
547 opts.imtu = l2cap_pi(sk)->imtu;
548 opts.omtu = l2cap_pi(sk)->omtu;
549 opts.flush_to = l2cap_pi(sk)->flush_to;
550 opts.mode = l2cap_pi(sk)->mode;
551 opts.fcs = l2cap_pi(sk)->fcs;
552 opts.max_tx = l2cap_pi(sk)->max_tx;
553 opts.txwin_size = (__u16)l2cap_pi(sk)->tx_win;
554
555 len = min_t(unsigned int, sizeof(opts), optlen);
556 if (copy_from_user((char *) &opts, optval, len)) {
557 err = -EFAULT;
558 break;
559 }
560
561 if (opts.txwin_size > L2CAP_DEFAULT_TX_WINDOW) {
562 err = -EINVAL;
563 break;
564 }
565
566 l2cap_pi(sk)->mode = opts.mode;
567 switch (l2cap_pi(sk)->mode) {
568 case L2CAP_MODE_BASIC:
Gustavo F. Padovanb4450032011-04-12 18:15:09 -0300569 chan->conf_state &= ~L2CAP_CONF_STATE2_DEVICE;
Gustavo F. Padovan33575df2011-02-04 02:48:48 -0200570 break;
571 case L2CAP_MODE_ERTM:
572 case L2CAP_MODE_STREAMING:
573 if (!disable_ertm)
574 break;
575 /* fall through */
576 default:
577 err = -EINVAL;
578 break;
579 }
580
581 l2cap_pi(sk)->imtu = opts.imtu;
582 l2cap_pi(sk)->omtu = opts.omtu;
583 l2cap_pi(sk)->fcs = opts.fcs;
584 l2cap_pi(sk)->max_tx = opts.max_tx;
585 l2cap_pi(sk)->tx_win = (__u8)opts.txwin_size;
586 break;
587
588 case L2CAP_LM:
589 if (get_user(opt, (u32 __user *) optval)) {
590 err = -EFAULT;
591 break;
592 }
593
594 if (opt & L2CAP_LM_AUTH)
595 l2cap_pi(sk)->sec_level = BT_SECURITY_LOW;
596 if (opt & L2CAP_LM_ENCRYPT)
597 l2cap_pi(sk)->sec_level = BT_SECURITY_MEDIUM;
598 if (opt & L2CAP_LM_SECURE)
599 l2cap_pi(sk)->sec_level = BT_SECURITY_HIGH;
600
601 l2cap_pi(sk)->role_switch = (opt & L2CAP_LM_MASTER);
602 l2cap_pi(sk)->force_reliable = (opt & L2CAP_LM_RELIABLE);
603 break;
604
605 default:
606 err = -ENOPROTOOPT;
607 break;
608 }
609
610 release_sock(sk);
611 return err;
612}
613
614static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
615{
616 struct sock *sk = sock->sk;
617 struct bt_security sec;
618 int len, err = 0;
619 u32 opt;
620
621 BT_DBG("sk %p", sk);
622
623 if (level == SOL_L2CAP)
624 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
625
626 if (level != SOL_BLUETOOTH)
627 return -ENOPROTOOPT;
628
629 lock_sock(sk);
630
631 switch (optname) {
632 case BT_SECURITY:
633 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
634 && sk->sk_type != SOCK_RAW) {
635 err = -EINVAL;
636 break;
637 }
638
639 sec.level = BT_SECURITY_LOW;
640
641 len = min_t(unsigned int, sizeof(sec), optlen);
642 if (copy_from_user((char *) &sec, optval, len)) {
643 err = -EFAULT;
644 break;
645 }
646
647 if (sec.level < BT_SECURITY_LOW ||
648 sec.level > BT_SECURITY_HIGH) {
649 err = -EINVAL;
650 break;
651 }
652
653 l2cap_pi(sk)->sec_level = sec.level;
654 break;
655
656 case BT_DEFER_SETUP:
657 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
658 err = -EINVAL;
659 break;
660 }
661
662 if (get_user(opt, (u32 __user *) optval)) {
663 err = -EFAULT;
664 break;
665 }
666
667 bt_sk(sk)->defer_setup = opt;
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) {
682 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
683 /* proceed futher only when we have l2cap_conn and
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
691 l2cap_pi(sk)->flushable = opt;
692 break;
693
694 default:
695 err = -ENOPROTOOPT;
696 break;
697 }
698
699 release_sock(sk);
700 return err;
701}
702
Gustavo F. Padovanfd83ccd2011-02-04 03:20:52 -0200703static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
704{
705 struct sock *sk = sock->sk;
706 struct l2cap_pinfo *pi = l2cap_pi(sk);
707 struct sk_buff *skb;
708 u16 control;
709 int err;
710
711 BT_DBG("sock %p, sk %p", sock, sk);
712
713 err = sock_error(sk);
714 if (err)
715 return err;
716
717 if (msg->msg_flags & MSG_OOB)
718 return -EOPNOTSUPP;
719
720 lock_sock(sk);
721
722 if (sk->sk_state != BT_CONNECTED) {
723 err = -ENOTCONN;
724 goto done;
725 }
726
727 /* Connectionless channel */
728 if (sk->sk_type == SOCK_DGRAM) {
729 skb = l2cap_create_connless_pdu(sk, msg, len);
730 if (IS_ERR(skb)) {
731 err = PTR_ERR(skb);
732 } else {
733 l2cap_do_send(sk, skb);
734 err = len;
735 }
736 goto done;
737 }
738
739 switch (pi->mode) {
740 case L2CAP_MODE_BASIC:
741 /* Check outgoing MTU */
742 if (len > pi->omtu) {
743 err = -EMSGSIZE;
744 goto done;
745 }
746
747 /* Create a basic PDU */
748 skb = l2cap_create_basic_pdu(sk, msg, len);
749 if (IS_ERR(skb)) {
750 err = PTR_ERR(skb);
751 goto done;
752 }
753
754 l2cap_do_send(sk, skb);
755 err = len;
756 break;
757
758 case L2CAP_MODE_ERTM:
759 case L2CAP_MODE_STREAMING:
760 /* Entire SDU fits into one PDU */
Gustavo F. Padovan2c03a7a2011-03-25 20:15:28 -0300761 if (len <= pi->chan->remote_mps) {
Gustavo F. Padovanfd83ccd2011-02-04 03:20:52 -0200762 control = L2CAP_SDU_UNSEGMENTED;
763 skb = l2cap_create_iframe_pdu(sk, msg, len, control, 0);
764 if (IS_ERR(skb)) {
765 err = PTR_ERR(skb);
766 goto done;
767 }
Gustavo F. Padovan58d35f82011-04-04 16:16:44 -0300768 __skb_queue_tail(&pi->chan->tx_q, skb);
Gustavo F. Padovanfd83ccd2011-02-04 03:20:52 -0200769
Gustavo F. Padovan58d35f82011-04-04 16:16:44 -0300770 if (pi->chan->tx_send_head == NULL)
771 pi->chan->tx_send_head = skb;
Gustavo F. Padovanfd83ccd2011-02-04 03:20:52 -0200772
773 } else {
774 /* Segment SDU into multiples PDUs */
Gustavo F. Padovan2c03a7a2011-03-25 20:15:28 -0300775 err = l2cap_sar_segment_sdu(pi->chan, msg, len);
Gustavo F. Padovanfd83ccd2011-02-04 03:20:52 -0200776 if (err < 0)
777 goto done;
778 }
779
780 if (pi->mode == L2CAP_MODE_STREAMING) {
Gustavo F. Padovan42e5c802011-03-25 19:58:34 -0300781 l2cap_streaming_send(pi->chan);
Gustavo F. Padovan525cd182011-03-25 19:43:39 -0300782 err = len;
783 break;
Gustavo F. Padovanfd83ccd2011-02-04 03:20:52 -0200784 }
785
Gustavo F. Padovan525cd182011-03-25 19:43:39 -0300786 if ((pi->chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
787 (pi->chan->conn_state & L2CAP_CONN_WAIT_F)) {
788 err = len;
789 break;
790 }
791 err = l2cap_ertm_send(pi->chan);
792
Gustavo F. Padovanfd83ccd2011-02-04 03:20:52 -0200793 if (err >= 0)
794 err = len;
795 break;
796
797 default:
798 BT_DBG("bad state %1.1x", pi->mode);
799 err = -EBADFD;
800 }
801
802done:
803 release_sock(sk);
804 return err;
805}
806
Gustavo F. Padovan68983252011-02-04 03:02:31 -0200807static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
808{
809 struct sock *sk = sock->sk;
810
811 lock_sock(sk);
812
813 if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
Gustavo F. Padovan710f9b02011-03-25 14:30:37 -0300814 __l2cap_connect_rsp_defer(sk);
Gustavo F. Padovan68983252011-02-04 03:02:31 -0200815 release_sock(sk);
816 return 0;
817 }
818
819 release_sock(sk);
820
821 if (sock->type == SOCK_STREAM)
822 return bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
823
824 return bt_sock_recvmsg(iocb, sock, msg, len, flags);
825}
826
Gustavo F. Padovan05fc1572011-02-04 03:26:01 -0200827/* Kill socket (only if zapped and orphan)
828 * Must be called on unlocked socket.
829 */
830void l2cap_sock_kill(struct sock *sk)
831{
832 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
833 return;
834
835 BT_DBG("sk %p state %d", sk, sk->sk_state);
836
837 /* Kill poor orphan */
838 bt_sock_unlink(&l2cap_sk_list, sk);
839 sock_set_flag(sk, SOCK_DEAD);
840 sock_put(sk);
841}
842
Gustavo F. Padovan6de07022011-02-04 03:35:20 -0200843/* Must be called on unlocked socket. */
844static void l2cap_sock_close(struct sock *sk)
845{
846 l2cap_sock_clear_timer(sk);
847 lock_sock(sk);
848 __l2cap_sock_close(sk, ECONNRESET);
849 release_sock(sk);
850 l2cap_sock_kill(sk);
851}
852
853static void l2cap_sock_cleanup_listen(struct sock *parent)
854{
855 struct sock *sk;
856
857 BT_DBG("parent %p", parent);
858
859 /* Close not yet accepted channels */
860 while ((sk = bt_accept_dequeue(parent, NULL)))
861 l2cap_sock_close(sk);
862
863 parent->sk_state = BT_CLOSED;
864 sock_set_flag(parent, SOCK_ZAPPED);
865}
866
867void __l2cap_sock_close(struct sock *sk, int reason)
868{
Ville Tervo5589fa92011-02-10 22:38:51 -0300869 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
Gustavo F. Padovane92c8e72011-04-01 00:53:45 -0300870 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
Ville Tervo5589fa92011-02-10 22:38:51 -0300871
Gustavo F. Padovan6de07022011-02-04 03:35:20 -0200872 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
873
874 switch (sk->sk_state) {
875 case BT_LISTEN:
876 l2cap_sock_cleanup_listen(sk);
877 break;
878
879 case BT_CONNECTED:
880 case BT_CONFIG:
Ville Tervo5589fa92011-02-10 22:38:51 -0300881 if ((sk->sk_type == SOCK_SEQPACKET ||
882 sk->sk_type == SOCK_STREAM) &&
883 conn->hcon->type == ACL_LINK) {
Gustavo F. Padovan6de07022011-02-04 03:35:20 -0200884 l2cap_sock_set_timer(sk, sk->sk_sndtimeo);
Gustavo F. Padovane92c8e72011-04-01 00:53:45 -0300885 l2cap_send_disconn_req(conn, chan, reason);
Gustavo F. Padovan6de07022011-02-04 03:35:20 -0200886 } else
Gustavo F. Padovane92c8e72011-04-01 00:53:45 -0300887 l2cap_chan_del(chan, reason);
Gustavo F. Padovan6de07022011-02-04 03:35:20 -0200888 break;
889
890 case BT_CONNECT2:
Ville Tervo5589fa92011-02-10 22:38:51 -0300891 if ((sk->sk_type == SOCK_SEQPACKET ||
892 sk->sk_type == SOCK_STREAM) &&
893 conn->hcon->type == ACL_LINK) {
Gustavo F. Padovan6de07022011-02-04 03:35:20 -0200894 struct l2cap_conn_rsp rsp;
895 __u16 result;
896
897 if (bt_sk(sk)->defer_setup)
898 result = L2CAP_CR_SEC_BLOCK;
899 else
900 result = L2CAP_CR_BAD_PSM;
901
902 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid);
903 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid);
904 rsp.result = cpu_to_le16(result);
905 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
Gustavo F. Padovane92c8e72011-04-01 00:53:45 -0300906 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
907 sizeof(rsp), &rsp);
Andrei Emeltchenko34bd0272011-03-24 17:16:08 +0200908 }
909
Gustavo F. Padovane92c8e72011-04-01 00:53:45 -0300910 l2cap_chan_del(chan, reason);
Gustavo F. Padovan6de07022011-02-04 03:35:20 -0200911 break;
912
913 case BT_CONNECT:
914 case BT_DISCONN:
Gustavo F. Padovane92c8e72011-04-01 00:53:45 -0300915 l2cap_chan_del(chan, reason);
Gustavo F. Padovan6de07022011-02-04 03:35:20 -0200916 break;
917
918 default:
919 sock_set_flag(sk, SOCK_ZAPPED);
920 break;
921 }
922}
923
Gustavo F. Padovandcba0db2011-02-04 03:08:36 -0200924static int l2cap_sock_shutdown(struct socket *sock, int how)
925{
926 struct sock *sk = sock->sk;
927 int err = 0;
928
929 BT_DBG("sock %p, sk %p", sock, sk);
930
931 if (!sk)
932 return 0;
933
934 lock_sock(sk);
935 if (!sk->sk_shutdown) {
936 if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM)
937 err = __l2cap_wait_ack(sk);
938
939 sk->sk_shutdown = SHUTDOWN_MASK;
940 l2cap_sock_clear_timer(sk);
941 __l2cap_sock_close(sk, 0);
942
943 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
944 err = bt_sock_wait_state(sk, BT_CLOSED,
945 sk->sk_lingertime);
946 }
947
948 if (!err && sk->sk_err)
949 err = -sk->sk_err;
950
951 release_sock(sk);
952 return err;
953}
954
Gustavo F. Padovan554f05b2011-02-04 02:36:42 -0200955static int l2cap_sock_release(struct socket *sock)
956{
957 struct sock *sk = sock->sk;
958 int err;
959
960 BT_DBG("sock %p, sk %p", sock, sk);
961
962 if (!sk)
963 return 0;
964
965 err = l2cap_sock_shutdown(sock, 2);
966
967 sock_orphan(sk);
968 l2cap_sock_kill(sk);
969 return err;
970}
971
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -0200972static void l2cap_sock_destruct(struct sock *sk)
973{
974 BT_DBG("sk %p", sk);
975
976 skb_queue_purge(&sk->sk_receive_queue);
977 skb_queue_purge(&sk->sk_write_queue);
978}
979
980void l2cap_sock_init(struct sock *sk, struct sock *parent)
981{
982 struct l2cap_pinfo *pi = l2cap_pi(sk);
Gustavo F. Padovanb4450032011-04-12 18:15:09 -0300983 struct l2cap_chan *chan = pi->chan;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -0200984
985 BT_DBG("sk %p", sk);
986
987 if (parent) {
Gustavo F. Padovanb4450032011-04-12 18:15:09 -0300988 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
989
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -0200990 sk->sk_type = parent->sk_type;
991 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
992
993 pi->imtu = l2cap_pi(parent)->imtu;
994 pi->omtu = l2cap_pi(parent)->omtu;
Gustavo F. Padovanb4450032011-04-12 18:15:09 -0300995 chan->conf_state = pchan->conf_state;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -0200996 pi->mode = l2cap_pi(parent)->mode;
997 pi->fcs = l2cap_pi(parent)->fcs;
998 pi->max_tx = l2cap_pi(parent)->max_tx;
999 pi->tx_win = l2cap_pi(parent)->tx_win;
1000 pi->sec_level = l2cap_pi(parent)->sec_level;
1001 pi->role_switch = l2cap_pi(parent)->role_switch;
1002 pi->force_reliable = l2cap_pi(parent)->force_reliable;
1003 pi->flushable = l2cap_pi(parent)->flushable;
1004 } else {
1005 pi->imtu = L2CAP_DEFAULT_MTU;
1006 pi->omtu = 0;
1007 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
1008 pi->mode = L2CAP_MODE_ERTM;
Gustavo F. Padovanb4450032011-04-12 18:15:09 -03001009 chan->conf_state |= L2CAP_CONF_STATE2_DEVICE;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001010 } else {
1011 pi->mode = L2CAP_MODE_BASIC;
1012 }
1013 pi->max_tx = L2CAP_DEFAULT_MAX_TX;
1014 pi->fcs = L2CAP_FCS_CRC16;
1015 pi->tx_win = L2CAP_DEFAULT_TX_WINDOW;
1016 pi->sec_level = BT_SECURITY_LOW;
1017 pi->role_switch = 0;
1018 pi->force_reliable = 0;
1019 pi->flushable = BT_FLUSHABLE_OFF;
1020 }
1021
1022 /* Default config options */
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001023 pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001024}
1025
1026static struct proto l2cap_proto = {
1027 .name = "L2CAP",
1028 .owner = THIS_MODULE,
1029 .obj_size = sizeof(struct l2cap_pinfo)
1030};
1031
1032struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
1033{
1034 struct sock *sk;
1035
1036 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1037 if (!sk)
1038 return NULL;
1039
1040 sock_init_data(sock, sk);
1041 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1042
1043 sk->sk_destruct = l2cap_sock_destruct;
1044 sk->sk_sndtimeo = msecs_to_jiffies(L2CAP_CONN_TIMEOUT);
1045
1046 sock_reset_flag(sk, SOCK_ZAPPED);
1047
1048 sk->sk_protocol = proto;
1049 sk->sk_state = BT_OPEN;
1050
1051 setup_timer(&sk->sk_timer, l2cap_sock_timeout, (unsigned long) sk);
1052
1053 bt_sock_link(&l2cap_sk_list, sk);
1054 return sk;
1055}
1056
1057static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1058 int kern)
1059{
1060 struct sock *sk;
Gustavo F. Padovan5d41ce12011-04-08 15:40:02 -03001061 struct l2cap_chan *chan;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001062
1063 BT_DBG("sock %p", sock);
1064
1065 sock->state = SS_UNCONNECTED;
1066
1067 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1068 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1069 return -ESOCKTNOSUPPORT;
1070
1071 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1072 return -EPERM;
1073
1074 sock->ops = &l2cap_sock_ops;
1075
1076 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
1077 if (!sk)
1078 return -ENOMEM;
1079
Gustavo F. Padovan5d41ce12011-04-08 15:40:02 -03001080 chan = l2cap_chan_alloc(sk);
1081 if (!chan) {
1082 l2cap_sock_kill(sk);
1083 return -ENOMEM;
1084 }
1085
1086 l2cap_pi(sk)->chan = chan;
1087
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001088 l2cap_sock_init(sk, NULL);
1089 return 0;
1090}
1091
Gustavo F. Padovan65390582011-02-04 02:33:56 -02001092const struct proto_ops l2cap_sock_ops = {
1093 .family = PF_BLUETOOTH,
1094 .owner = THIS_MODULE,
1095 .release = l2cap_sock_release,
1096 .bind = l2cap_sock_bind,
1097 .connect = l2cap_sock_connect,
1098 .listen = l2cap_sock_listen,
1099 .accept = l2cap_sock_accept,
1100 .getname = l2cap_sock_getname,
1101 .sendmsg = l2cap_sock_sendmsg,
1102 .recvmsg = l2cap_sock_recvmsg,
1103 .poll = bt_sock_poll,
1104 .ioctl = bt_sock_ioctl,
1105 .mmap = sock_no_mmap,
1106 .socketpair = sock_no_socketpair,
1107 .shutdown = l2cap_sock_shutdown,
1108 .setsockopt = l2cap_sock_setsockopt,
1109 .getsockopt = l2cap_sock_getsockopt
1110};
1111
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001112static const struct net_proto_family l2cap_sock_family_ops = {
1113 .family = PF_BLUETOOTH,
1114 .owner = THIS_MODULE,
1115 .create = l2cap_sock_create,
1116};
1117
1118int __init l2cap_init_sockets(void)
1119{
Gustavo F. Padovane2174ca2011-02-17 19:16:55 -03001120 int err;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001121
Gustavo F. Padovane2174ca2011-02-17 19:16:55 -03001122 err = proto_register(&l2cap_proto, 0);
1123 if (err < 0)
1124 return err;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001125
Gustavo F. Padovane2174ca2011-02-17 19:16:55 -03001126 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1127 if (err < 0)
1128 goto error;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001129
Gustavo F. Padovane2174ca2011-02-17 19:16:55 -03001130 BT_INFO("L2CAP socket layer initialized");
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001131
Gustavo F. Padovane2174ca2011-02-17 19:16:55 -03001132 return 0;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001133
1134error:
Gustavo F. Padovane2174ca2011-02-17 19:16:55 -03001135 BT_ERR("L2CAP socket registration failed");
1136 proto_unregister(&l2cap_proto);
1137 return err;
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001138}
1139
1140void l2cap_cleanup_sockets(void)
1141{
Gustavo F. Padovane2174ca2011-02-17 19:16:55 -03001142 if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
1143 BT_ERR("L2CAP socket unregistration failed");
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001144
Gustavo F. Padovane2174ca2011-02-17 19:16:55 -03001145 proto_unregister(&l2cap_proto);
Gustavo F. Padovanbb58f742011-02-03 20:50:35 -02001146}