]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blob - net/bluetooth/l2cap.c
net: pass kern to net_proto_family create function
[mirror_ubuntu-eoan-kernel.git] / net / bluetooth / l2cap.c
1 /*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
10
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth L2CAP core and sockets. */
26
27 #include <linux/module.h>
28
29 #include <linux/types.h>
30 #include <linux/capability.h>
31 #include <linux/errno.h>
32 #include <linux/kernel.h>
33 #include <linux/sched.h>
34 #include <linux/slab.h>
35 #include <linux/poll.h>
36 #include <linux/fcntl.h>
37 #include <linux/init.h>
38 #include <linux/interrupt.h>
39 #include <linux/socket.h>
40 #include <linux/skbuff.h>
41 #include <linux/list.h>
42 #include <linux/device.h>
43 #include <linux/uaccess.h>
44 #include <linux/crc16.h>
45 #include <net/sock.h>
46
47 #include <asm/system.h>
48 #include <asm/unaligned.h>
49
50 #include <net/bluetooth/bluetooth.h>
51 #include <net/bluetooth/hci_core.h>
52 #include <net/bluetooth/l2cap.h>
53
54 #define VERSION "2.14"
55
56 static int enable_ertm = 0;
57
58 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
59 static u8 l2cap_fixed_chan[8] = { 0x02, };
60
61 static const struct proto_ops l2cap_sock_ops;
62
63 static struct bt_sock_list l2cap_sk_list = {
64 .lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
65 };
66
67 static void __l2cap_sock_close(struct sock *sk, int reason);
68 static void l2cap_sock_close(struct sock *sk);
69 static void l2cap_sock_kill(struct sock *sk);
70
71 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
72 u8 code, u8 ident, u16 dlen, void *data);
73
74 /* ---- L2CAP timers ---- */
75 static void l2cap_sock_timeout(unsigned long arg)
76 {
77 struct sock *sk = (struct sock *) arg;
78 int reason;
79
80 BT_DBG("sock %p state %d", sk, sk->sk_state);
81
82 bh_lock_sock(sk);
83
84 if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONFIG)
85 reason = ECONNREFUSED;
86 else if (sk->sk_state == BT_CONNECT &&
87 l2cap_pi(sk)->sec_level != BT_SECURITY_SDP)
88 reason = ECONNREFUSED;
89 else
90 reason = ETIMEDOUT;
91
92 __l2cap_sock_close(sk, reason);
93
94 bh_unlock_sock(sk);
95
96 l2cap_sock_kill(sk);
97 sock_put(sk);
98 }
99
100 static void l2cap_sock_set_timer(struct sock *sk, long timeout)
101 {
102 BT_DBG("sk %p state %d timeout %ld", sk, sk->sk_state, timeout);
103 sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
104 }
105
106 static void l2cap_sock_clear_timer(struct sock *sk)
107 {
108 BT_DBG("sock %p state %d", sk, sk->sk_state);
109 sk_stop_timer(sk, &sk->sk_timer);
110 }
111
112 /* ---- L2CAP channels ---- */
113 static struct sock *__l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, u16 cid)
114 {
115 struct sock *s;
116 for (s = l->head; s; s = l2cap_pi(s)->next_c) {
117 if (l2cap_pi(s)->dcid == cid)
118 break;
119 }
120 return s;
121 }
122
123 static struct sock *__l2cap_get_chan_by_scid(struct l2cap_chan_list *l, u16 cid)
124 {
125 struct sock *s;
126 for (s = l->head; s; s = l2cap_pi(s)->next_c) {
127 if (l2cap_pi(s)->scid == cid)
128 break;
129 }
130 return s;
131 }
132
133 /* Find channel with given SCID.
134 * Returns locked socket */
135 static inline struct sock *l2cap_get_chan_by_scid(struct l2cap_chan_list *l, u16 cid)
136 {
137 struct sock *s;
138 read_lock(&l->lock);
139 s = __l2cap_get_chan_by_scid(l, cid);
140 if (s)
141 bh_lock_sock(s);
142 read_unlock(&l->lock);
143 return s;
144 }
145
146 static struct sock *__l2cap_get_chan_by_ident(struct l2cap_chan_list *l, u8 ident)
147 {
148 struct sock *s;
149 for (s = l->head; s; s = l2cap_pi(s)->next_c) {
150 if (l2cap_pi(s)->ident == ident)
151 break;
152 }
153 return s;
154 }
155
156 static inline struct sock *l2cap_get_chan_by_ident(struct l2cap_chan_list *l, u8 ident)
157 {
158 struct sock *s;
159 read_lock(&l->lock);
160 s = __l2cap_get_chan_by_ident(l, ident);
161 if (s)
162 bh_lock_sock(s);
163 read_unlock(&l->lock);
164 return s;
165 }
166
167 static u16 l2cap_alloc_cid(struct l2cap_chan_list *l)
168 {
169 u16 cid = L2CAP_CID_DYN_START;
170
171 for (; cid < L2CAP_CID_DYN_END; cid++) {
172 if (!__l2cap_get_chan_by_scid(l, cid))
173 return cid;
174 }
175
176 return 0;
177 }
178
179 static inline void __l2cap_chan_link(struct l2cap_chan_list *l, struct sock *sk)
180 {
181 sock_hold(sk);
182
183 if (l->head)
184 l2cap_pi(l->head)->prev_c = sk;
185
186 l2cap_pi(sk)->next_c = l->head;
187 l2cap_pi(sk)->prev_c = NULL;
188 l->head = sk;
189 }
190
191 static inline void l2cap_chan_unlink(struct l2cap_chan_list *l, struct sock *sk)
192 {
193 struct sock *next = l2cap_pi(sk)->next_c, *prev = l2cap_pi(sk)->prev_c;
194
195 write_lock_bh(&l->lock);
196 if (sk == l->head)
197 l->head = next;
198
199 if (next)
200 l2cap_pi(next)->prev_c = prev;
201 if (prev)
202 l2cap_pi(prev)->next_c = next;
203 write_unlock_bh(&l->lock);
204
205 __sock_put(sk);
206 }
207
208 static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
209 {
210 struct l2cap_chan_list *l = &conn->chan_list;
211
212 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
213 l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
214
215 conn->disc_reason = 0x13;
216
217 l2cap_pi(sk)->conn = conn;
218
219 if (sk->sk_type == SOCK_SEQPACKET) {
220 /* Alloc CID for connection-oriented socket */
221 l2cap_pi(sk)->scid = l2cap_alloc_cid(l);
222 } else if (sk->sk_type == SOCK_DGRAM) {
223 /* Connectionless socket */
224 l2cap_pi(sk)->scid = L2CAP_CID_CONN_LESS;
225 l2cap_pi(sk)->dcid = L2CAP_CID_CONN_LESS;
226 l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
227 } else {
228 /* Raw socket can send/recv signalling messages only */
229 l2cap_pi(sk)->scid = L2CAP_CID_SIGNALING;
230 l2cap_pi(sk)->dcid = L2CAP_CID_SIGNALING;
231 l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
232 }
233
234 __l2cap_chan_link(l, sk);
235
236 if (parent)
237 bt_accept_enqueue(parent, sk);
238 }
239
240 /* Delete channel.
241 * Must be called on the locked socket. */
242 static void l2cap_chan_del(struct sock *sk, int err)
243 {
244 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
245 struct sock *parent = bt_sk(sk)->parent;
246
247 l2cap_sock_clear_timer(sk);
248
249 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
250
251 if (conn) {
252 /* Unlink from channel list */
253 l2cap_chan_unlink(&conn->chan_list, sk);
254 l2cap_pi(sk)->conn = NULL;
255 hci_conn_put(conn->hcon);
256 }
257
258 sk->sk_state = BT_CLOSED;
259 sock_set_flag(sk, SOCK_ZAPPED);
260
261 if (err)
262 sk->sk_err = err;
263
264 if (parent) {
265 bt_accept_unlink(sk);
266 parent->sk_data_ready(parent, 0);
267 } else
268 sk->sk_state_change(sk);
269 }
270
271 /* Service level security */
272 static inline int l2cap_check_security(struct sock *sk)
273 {
274 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
275 __u8 auth_type;
276
277 if (l2cap_pi(sk)->psm == cpu_to_le16(0x0001)) {
278 if (l2cap_pi(sk)->sec_level == BT_SECURITY_HIGH)
279 auth_type = HCI_AT_NO_BONDING_MITM;
280 else
281 auth_type = HCI_AT_NO_BONDING;
282
283 if (l2cap_pi(sk)->sec_level == BT_SECURITY_LOW)
284 l2cap_pi(sk)->sec_level = BT_SECURITY_SDP;
285 } else {
286 switch (l2cap_pi(sk)->sec_level) {
287 case BT_SECURITY_HIGH:
288 auth_type = HCI_AT_GENERAL_BONDING_MITM;
289 break;
290 case BT_SECURITY_MEDIUM:
291 auth_type = HCI_AT_GENERAL_BONDING;
292 break;
293 default:
294 auth_type = HCI_AT_NO_BONDING;
295 break;
296 }
297 }
298
299 return hci_conn_security(conn->hcon, l2cap_pi(sk)->sec_level,
300 auth_type);
301 }
302
303 static inline u8 l2cap_get_ident(struct l2cap_conn *conn)
304 {
305 u8 id;
306
307 /* Get next available identificator.
308 * 1 - 128 are used by kernel.
309 * 129 - 199 are reserved.
310 * 200 - 254 are used by utilities like l2ping, etc.
311 */
312
313 spin_lock_bh(&conn->lock);
314
315 if (++conn->tx_ident > 128)
316 conn->tx_ident = 1;
317
318 id = conn->tx_ident;
319
320 spin_unlock_bh(&conn->lock);
321
322 return id;
323 }
324
325 static inline int l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
326 {
327 struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
328
329 BT_DBG("code 0x%2.2x", code);
330
331 if (!skb)
332 return -ENOMEM;
333
334 return hci_send_acl(conn->hcon, skb, 0);
335 }
336
337 static inline int l2cap_send_sframe(struct l2cap_pinfo *pi, u16 control)
338 {
339 struct sk_buff *skb;
340 struct l2cap_hdr *lh;
341 struct l2cap_conn *conn = pi->conn;
342 int count, hlen = L2CAP_HDR_SIZE + 2;
343
344 if (pi->fcs == L2CAP_FCS_CRC16)
345 hlen += 2;
346
347 BT_DBG("pi %p, control 0x%2.2x", pi, control);
348
349 count = min_t(unsigned int, conn->mtu, hlen);
350 control |= L2CAP_CTRL_FRAME_TYPE;
351
352 skb = bt_skb_alloc(count, GFP_ATOMIC);
353 if (!skb)
354 return -ENOMEM;
355
356 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
357 lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
358 lh->cid = cpu_to_le16(pi->dcid);
359 put_unaligned_le16(control, skb_put(skb, 2));
360
361 if (pi->fcs == L2CAP_FCS_CRC16) {
362 u16 fcs = crc16(0, (u8 *)lh, count - 2);
363 put_unaligned_le16(fcs, skb_put(skb, 2));
364 }
365
366 return hci_send_acl(pi->conn->hcon, skb, 0);
367 }
368
369 static inline int l2cap_send_rr_or_rnr(struct l2cap_pinfo *pi, u16 control)
370 {
371 if (pi->conn_state & L2CAP_CONN_LOCAL_BUSY)
372 control |= L2CAP_SUPER_RCV_NOT_READY;
373 else
374 control |= L2CAP_SUPER_RCV_READY;
375
376 return l2cap_send_sframe(pi, control);
377 }
378
379 static void l2cap_do_start(struct sock *sk)
380 {
381 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
382
383 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
384 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
385 return;
386
387 if (l2cap_check_security(sk)) {
388 struct l2cap_conn_req req;
389 req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
390 req.psm = l2cap_pi(sk)->psm;
391
392 l2cap_pi(sk)->ident = l2cap_get_ident(conn);
393
394 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
395 L2CAP_CONN_REQ, sizeof(req), &req);
396 }
397 } else {
398 struct l2cap_info_req req;
399 req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
400
401 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
402 conn->info_ident = l2cap_get_ident(conn);
403
404 mod_timer(&conn->info_timer, jiffies +
405 msecs_to_jiffies(L2CAP_INFO_TIMEOUT));
406
407 l2cap_send_cmd(conn, conn->info_ident,
408 L2CAP_INFO_REQ, sizeof(req), &req);
409 }
410 }
411
412 static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct sock *sk)
413 {
414 struct l2cap_disconn_req req;
415
416 req.dcid = cpu_to_le16(l2cap_pi(sk)->dcid);
417 req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
418 l2cap_send_cmd(conn, l2cap_get_ident(conn),
419 L2CAP_DISCONN_REQ, sizeof(req), &req);
420 }
421
422 /* ---- L2CAP connections ---- */
423 static void l2cap_conn_start(struct l2cap_conn *conn)
424 {
425 struct l2cap_chan_list *l = &conn->chan_list;
426 struct sock *sk;
427
428 BT_DBG("conn %p", conn);
429
430 read_lock(&l->lock);
431
432 for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
433 bh_lock_sock(sk);
434
435 if (sk->sk_type != SOCK_SEQPACKET) {
436 bh_unlock_sock(sk);
437 continue;
438 }
439
440 if (sk->sk_state == BT_CONNECT) {
441 if (l2cap_check_security(sk)) {
442 struct l2cap_conn_req req;
443 req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
444 req.psm = l2cap_pi(sk)->psm;
445
446 l2cap_pi(sk)->ident = l2cap_get_ident(conn);
447
448 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
449 L2CAP_CONN_REQ, sizeof(req), &req);
450 }
451 } else if (sk->sk_state == BT_CONNECT2) {
452 struct l2cap_conn_rsp rsp;
453 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid);
454 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid);
455
456 if (l2cap_check_security(sk)) {
457 if (bt_sk(sk)->defer_setup) {
458 struct sock *parent = bt_sk(sk)->parent;
459 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
460 rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
461 parent->sk_data_ready(parent, 0);
462
463 } else {
464 sk->sk_state = BT_CONFIG;
465 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
466 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
467 }
468 } else {
469 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
470 rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
471 }
472
473 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
474 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
475 }
476
477 bh_unlock_sock(sk);
478 }
479
480 read_unlock(&l->lock);
481 }
482
483 static void l2cap_conn_ready(struct l2cap_conn *conn)
484 {
485 struct l2cap_chan_list *l = &conn->chan_list;
486 struct sock *sk;
487
488 BT_DBG("conn %p", conn);
489
490 read_lock(&l->lock);
491
492 for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
493 bh_lock_sock(sk);
494
495 if (sk->sk_type != SOCK_SEQPACKET) {
496 l2cap_sock_clear_timer(sk);
497 sk->sk_state = BT_CONNECTED;
498 sk->sk_state_change(sk);
499 } else if (sk->sk_state == BT_CONNECT)
500 l2cap_do_start(sk);
501
502 bh_unlock_sock(sk);
503 }
504
505 read_unlock(&l->lock);
506 }
507
508 /* Notify sockets that we cannot guaranty reliability anymore */
509 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
510 {
511 struct l2cap_chan_list *l = &conn->chan_list;
512 struct sock *sk;
513
514 BT_DBG("conn %p", conn);
515
516 read_lock(&l->lock);
517
518 for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
519 if (l2cap_pi(sk)->force_reliable)
520 sk->sk_err = err;
521 }
522
523 read_unlock(&l->lock);
524 }
525
526 static void l2cap_info_timeout(unsigned long arg)
527 {
528 struct l2cap_conn *conn = (void *) arg;
529
530 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
531 conn->info_ident = 0;
532
533 l2cap_conn_start(conn);
534 }
535
536 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
537 {
538 struct l2cap_conn *conn = hcon->l2cap_data;
539
540 if (conn || status)
541 return conn;
542
543 conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
544 if (!conn)
545 return NULL;
546
547 hcon->l2cap_data = conn;
548 conn->hcon = hcon;
549
550 BT_DBG("hcon %p conn %p", hcon, conn);
551
552 conn->mtu = hcon->hdev->acl_mtu;
553 conn->src = &hcon->hdev->bdaddr;
554 conn->dst = &hcon->dst;
555
556 conn->feat_mask = 0;
557
558 spin_lock_init(&conn->lock);
559 rwlock_init(&conn->chan_list.lock);
560
561 setup_timer(&conn->info_timer, l2cap_info_timeout,
562 (unsigned long) conn);
563
564 conn->disc_reason = 0x13;
565
566 return conn;
567 }
568
569 static void l2cap_conn_del(struct hci_conn *hcon, int err)
570 {
571 struct l2cap_conn *conn = hcon->l2cap_data;
572 struct sock *sk;
573
574 if (!conn)
575 return;
576
577 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
578
579 kfree_skb(conn->rx_skb);
580
581 /* Kill channels */
582 while ((sk = conn->chan_list.head)) {
583 bh_lock_sock(sk);
584 l2cap_chan_del(sk, err);
585 bh_unlock_sock(sk);
586 l2cap_sock_kill(sk);
587 }
588
589 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
590 del_timer_sync(&conn->info_timer);
591
592 hcon->l2cap_data = NULL;
593 kfree(conn);
594 }
595
596 static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
597 {
598 struct l2cap_chan_list *l = &conn->chan_list;
599 write_lock_bh(&l->lock);
600 __l2cap_chan_add(conn, sk, parent);
601 write_unlock_bh(&l->lock);
602 }
603
604 /* ---- Socket interface ---- */
605 static struct sock *__l2cap_get_sock_by_addr(__le16 psm, bdaddr_t *src)
606 {
607 struct sock *sk;
608 struct hlist_node *node;
609 sk_for_each(sk, node, &l2cap_sk_list.head)
610 if (l2cap_pi(sk)->sport == psm && !bacmp(&bt_sk(sk)->src, src))
611 goto found;
612 sk = NULL;
613 found:
614 return sk;
615 }
616
617 /* Find socket with psm and source bdaddr.
618 * Returns closest match.
619 */
620 static struct sock *__l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src)
621 {
622 struct sock *sk = NULL, *sk1 = NULL;
623 struct hlist_node *node;
624
625 sk_for_each(sk, node, &l2cap_sk_list.head) {
626 if (state && sk->sk_state != state)
627 continue;
628
629 if (l2cap_pi(sk)->psm == psm) {
630 /* Exact match. */
631 if (!bacmp(&bt_sk(sk)->src, src))
632 break;
633
634 /* Closest match */
635 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
636 sk1 = sk;
637 }
638 }
639 return node ? sk : sk1;
640 }
641
642 /* Find socket with given address (psm, src).
643 * Returns locked socket */
644 static inline struct sock *l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src)
645 {
646 struct sock *s;
647 read_lock(&l2cap_sk_list.lock);
648 s = __l2cap_get_sock_by_psm(state, psm, src);
649 if (s)
650 bh_lock_sock(s);
651 read_unlock(&l2cap_sk_list.lock);
652 return s;
653 }
654
655 static void l2cap_sock_destruct(struct sock *sk)
656 {
657 BT_DBG("sk %p", sk);
658
659 skb_queue_purge(&sk->sk_receive_queue);
660 skb_queue_purge(&sk->sk_write_queue);
661 }
662
663 static void l2cap_sock_cleanup_listen(struct sock *parent)
664 {
665 struct sock *sk;
666
667 BT_DBG("parent %p", parent);
668
669 /* Close not yet accepted channels */
670 while ((sk = bt_accept_dequeue(parent, NULL)))
671 l2cap_sock_close(sk);
672
673 parent->sk_state = BT_CLOSED;
674 sock_set_flag(parent, SOCK_ZAPPED);
675 }
676
677 /* Kill socket (only if zapped and orphan)
678 * Must be called on unlocked socket.
679 */
680 static void l2cap_sock_kill(struct sock *sk)
681 {
682 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
683 return;
684
685 BT_DBG("sk %p state %d", sk, sk->sk_state);
686
687 /* Kill poor orphan */
688 bt_sock_unlink(&l2cap_sk_list, sk);
689 sock_set_flag(sk, SOCK_DEAD);
690 sock_put(sk);
691 }
692
693 static void __l2cap_sock_close(struct sock *sk, int reason)
694 {
695 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
696
697 switch (sk->sk_state) {
698 case BT_LISTEN:
699 l2cap_sock_cleanup_listen(sk);
700 break;
701
702 case BT_CONNECTED:
703 case BT_CONFIG:
704 if (sk->sk_type == SOCK_SEQPACKET) {
705 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
706
707 sk->sk_state = BT_DISCONN;
708 l2cap_sock_set_timer(sk, sk->sk_sndtimeo);
709 l2cap_send_disconn_req(conn, sk);
710 } else
711 l2cap_chan_del(sk, reason);
712 break;
713
714 case BT_CONNECT2:
715 if (sk->sk_type == SOCK_SEQPACKET) {
716 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
717 struct l2cap_conn_rsp rsp;
718 __u16 result;
719
720 if (bt_sk(sk)->defer_setup)
721 result = L2CAP_CR_SEC_BLOCK;
722 else
723 result = L2CAP_CR_BAD_PSM;
724
725 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid);
726 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid);
727 rsp.result = cpu_to_le16(result);
728 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
729 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
730 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
731 } else
732 l2cap_chan_del(sk, reason);
733 break;
734
735 case BT_CONNECT:
736 case BT_DISCONN:
737 l2cap_chan_del(sk, reason);
738 break;
739
740 default:
741 sock_set_flag(sk, SOCK_ZAPPED);
742 break;
743 }
744 }
745
746 /* Must be called on unlocked socket. */
747 static void l2cap_sock_close(struct sock *sk)
748 {
749 l2cap_sock_clear_timer(sk);
750 lock_sock(sk);
751 __l2cap_sock_close(sk, ECONNRESET);
752 release_sock(sk);
753 l2cap_sock_kill(sk);
754 }
755
756 static void l2cap_sock_init(struct sock *sk, struct sock *parent)
757 {
758 struct l2cap_pinfo *pi = l2cap_pi(sk);
759
760 BT_DBG("sk %p", sk);
761
762 if (parent) {
763 sk->sk_type = parent->sk_type;
764 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
765
766 pi->imtu = l2cap_pi(parent)->imtu;
767 pi->omtu = l2cap_pi(parent)->omtu;
768 pi->mode = l2cap_pi(parent)->mode;
769 pi->fcs = l2cap_pi(parent)->fcs;
770 pi->sec_level = l2cap_pi(parent)->sec_level;
771 pi->role_switch = l2cap_pi(parent)->role_switch;
772 pi->force_reliable = l2cap_pi(parent)->force_reliable;
773 } else {
774 pi->imtu = L2CAP_DEFAULT_MTU;
775 pi->omtu = 0;
776 pi->mode = L2CAP_MODE_BASIC;
777 pi->fcs = L2CAP_FCS_CRC16;
778 pi->sec_level = BT_SECURITY_LOW;
779 pi->role_switch = 0;
780 pi->force_reliable = 0;
781 }
782
783 /* Default config options */
784 pi->conf_len = 0;
785 pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
786 skb_queue_head_init(TX_QUEUE(sk));
787 skb_queue_head_init(SREJ_QUEUE(sk));
788 INIT_LIST_HEAD(SREJ_LIST(sk));
789 }
790
791 static struct proto l2cap_proto = {
792 .name = "L2CAP",
793 .owner = THIS_MODULE,
794 .obj_size = sizeof(struct l2cap_pinfo)
795 };
796
797 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
798 {
799 struct sock *sk;
800
801 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
802 if (!sk)
803 return NULL;
804
805 sock_init_data(sock, sk);
806 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
807
808 sk->sk_destruct = l2cap_sock_destruct;
809 sk->sk_sndtimeo = msecs_to_jiffies(L2CAP_CONN_TIMEOUT);
810
811 sock_reset_flag(sk, SOCK_ZAPPED);
812
813 sk->sk_protocol = proto;
814 sk->sk_state = BT_OPEN;
815
816 setup_timer(&sk->sk_timer, l2cap_sock_timeout, (unsigned long) sk);
817
818 bt_sock_link(&l2cap_sk_list, sk);
819 return sk;
820 }
821
822 static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
823 int kern)
824 {
825 struct sock *sk;
826
827 BT_DBG("sock %p", sock);
828
829 sock->state = SS_UNCONNECTED;
830
831 if (sock->type != SOCK_SEQPACKET &&
832 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
833 return -ESOCKTNOSUPPORT;
834
835 if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW))
836 return -EPERM;
837
838 sock->ops = &l2cap_sock_ops;
839
840 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
841 if (!sk)
842 return -ENOMEM;
843
844 l2cap_sock_init(sk, NULL);
845 return 0;
846 }
847
848 static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
849 {
850 struct sock *sk = sock->sk;
851 struct sockaddr_l2 la;
852 int len, err = 0;
853
854 BT_DBG("sk %p", sk);
855
856 if (!addr || addr->sa_family != AF_BLUETOOTH)
857 return -EINVAL;
858
859 memset(&la, 0, sizeof(la));
860 len = min_t(unsigned int, sizeof(la), alen);
861 memcpy(&la, addr, len);
862
863 if (la.l2_cid)
864 return -EINVAL;
865
866 lock_sock(sk);
867
868 if (sk->sk_state != BT_OPEN) {
869 err = -EBADFD;
870 goto done;
871 }
872
873 if (la.l2_psm && __le16_to_cpu(la.l2_psm) < 0x1001 &&
874 !capable(CAP_NET_BIND_SERVICE)) {
875 err = -EACCES;
876 goto done;
877 }
878
879 write_lock_bh(&l2cap_sk_list.lock);
880
881 if (la.l2_psm && __l2cap_get_sock_by_addr(la.l2_psm, &la.l2_bdaddr)) {
882 err = -EADDRINUSE;
883 } else {
884 /* Save source address */
885 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
886 l2cap_pi(sk)->psm = la.l2_psm;
887 l2cap_pi(sk)->sport = la.l2_psm;
888 sk->sk_state = BT_BOUND;
889
890 if (__le16_to_cpu(la.l2_psm) == 0x0001 ||
891 __le16_to_cpu(la.l2_psm) == 0x0003)
892 l2cap_pi(sk)->sec_level = BT_SECURITY_SDP;
893 }
894
895 write_unlock_bh(&l2cap_sk_list.lock);
896
897 done:
898 release_sock(sk);
899 return err;
900 }
901
902 static int l2cap_do_connect(struct sock *sk)
903 {
904 bdaddr_t *src = &bt_sk(sk)->src;
905 bdaddr_t *dst = &bt_sk(sk)->dst;
906 struct l2cap_conn *conn;
907 struct hci_conn *hcon;
908 struct hci_dev *hdev;
909 __u8 auth_type;
910 int err;
911
912 BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst),
913 l2cap_pi(sk)->psm);
914
915 hdev = hci_get_route(dst, src);
916 if (!hdev)
917 return -EHOSTUNREACH;
918
919 hci_dev_lock_bh(hdev);
920
921 err = -ENOMEM;
922
923 if (sk->sk_type == SOCK_RAW) {
924 switch (l2cap_pi(sk)->sec_level) {
925 case BT_SECURITY_HIGH:
926 auth_type = HCI_AT_DEDICATED_BONDING_MITM;
927 break;
928 case BT_SECURITY_MEDIUM:
929 auth_type = HCI_AT_DEDICATED_BONDING;
930 break;
931 default:
932 auth_type = HCI_AT_NO_BONDING;
933 break;
934 }
935 } else if (l2cap_pi(sk)->psm == cpu_to_le16(0x0001)) {
936 if (l2cap_pi(sk)->sec_level == BT_SECURITY_HIGH)
937 auth_type = HCI_AT_NO_BONDING_MITM;
938 else
939 auth_type = HCI_AT_NO_BONDING;
940
941 if (l2cap_pi(sk)->sec_level == BT_SECURITY_LOW)
942 l2cap_pi(sk)->sec_level = BT_SECURITY_SDP;
943 } else {
944 switch (l2cap_pi(sk)->sec_level) {
945 case BT_SECURITY_HIGH:
946 auth_type = HCI_AT_GENERAL_BONDING_MITM;
947 break;
948 case BT_SECURITY_MEDIUM:
949 auth_type = HCI_AT_GENERAL_BONDING;
950 break;
951 default:
952 auth_type = HCI_AT_NO_BONDING;
953 break;
954 }
955 }
956
957 hcon = hci_connect(hdev, ACL_LINK, dst,
958 l2cap_pi(sk)->sec_level, auth_type);
959 if (!hcon)
960 goto done;
961
962 conn = l2cap_conn_add(hcon, 0);
963 if (!conn) {
964 hci_conn_put(hcon);
965 goto done;
966 }
967
968 err = 0;
969
970 /* Update source addr of the socket */
971 bacpy(src, conn->src);
972
973 l2cap_chan_add(conn, sk, NULL);
974
975 sk->sk_state = BT_CONNECT;
976 l2cap_sock_set_timer(sk, sk->sk_sndtimeo);
977
978 if (hcon->state == BT_CONNECTED) {
979 if (sk->sk_type != SOCK_SEQPACKET) {
980 l2cap_sock_clear_timer(sk);
981 sk->sk_state = BT_CONNECTED;
982 } else
983 l2cap_do_start(sk);
984 }
985
986 done:
987 hci_dev_unlock_bh(hdev);
988 hci_dev_put(hdev);
989 return err;
990 }
991
992 static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
993 {
994 struct sock *sk = sock->sk;
995 struct sockaddr_l2 la;
996 int len, err = 0;
997
998 BT_DBG("sk %p", sk);
999
1000 if (!addr || addr->sa_family != AF_BLUETOOTH)
1001 return -EINVAL;
1002
1003 memset(&la, 0, sizeof(la));
1004 len = min_t(unsigned int, sizeof(la), alen);
1005 memcpy(&la, addr, len);
1006
1007 if (la.l2_cid)
1008 return -EINVAL;
1009
1010 lock_sock(sk);
1011
1012 if (sk->sk_type == SOCK_SEQPACKET && !la.l2_psm) {
1013 err = -EINVAL;
1014 goto done;
1015 }
1016
1017 switch (l2cap_pi(sk)->mode) {
1018 case L2CAP_MODE_BASIC:
1019 break;
1020 case L2CAP_MODE_ERTM:
1021 case L2CAP_MODE_STREAMING:
1022 if (enable_ertm)
1023 break;
1024 /* fall through */
1025 default:
1026 err = -ENOTSUPP;
1027 goto done;
1028 }
1029
1030 switch (sk->sk_state) {
1031 case BT_CONNECT:
1032 case BT_CONNECT2:
1033 case BT_CONFIG:
1034 /* Already connecting */
1035 goto wait;
1036
1037 case BT_CONNECTED:
1038 /* Already connected */
1039 goto done;
1040
1041 case BT_OPEN:
1042 case BT_BOUND:
1043 /* Can connect */
1044 break;
1045
1046 default:
1047 err = -EBADFD;
1048 goto done;
1049 }
1050
1051 /* Set destination address and psm */
1052 bacpy(&bt_sk(sk)->dst, &la.l2_bdaddr);
1053 l2cap_pi(sk)->psm = la.l2_psm;
1054
1055 err = l2cap_do_connect(sk);
1056 if (err)
1057 goto done;
1058
1059 wait:
1060 err = bt_sock_wait_state(sk, BT_CONNECTED,
1061 sock_sndtimeo(sk, flags & O_NONBLOCK));
1062 done:
1063 release_sock(sk);
1064 return err;
1065 }
1066
1067 static int l2cap_sock_listen(struct socket *sock, int backlog)
1068 {
1069 struct sock *sk = sock->sk;
1070 int err = 0;
1071
1072 BT_DBG("sk %p backlog %d", sk, backlog);
1073
1074 lock_sock(sk);
1075
1076 if (sk->sk_state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
1077 err = -EBADFD;
1078 goto done;
1079 }
1080
1081 switch (l2cap_pi(sk)->mode) {
1082 case L2CAP_MODE_BASIC:
1083 break;
1084 case L2CAP_MODE_ERTM:
1085 case L2CAP_MODE_STREAMING:
1086 if (enable_ertm)
1087 break;
1088 /* fall through */
1089 default:
1090 err = -ENOTSUPP;
1091 goto done;
1092 }
1093
1094 if (!l2cap_pi(sk)->psm) {
1095 bdaddr_t *src = &bt_sk(sk)->src;
1096 u16 psm;
1097
1098 err = -EINVAL;
1099
1100 write_lock_bh(&l2cap_sk_list.lock);
1101
1102 for (psm = 0x1001; psm < 0x1100; psm += 2)
1103 if (!__l2cap_get_sock_by_addr(cpu_to_le16(psm), src)) {
1104 l2cap_pi(sk)->psm = cpu_to_le16(psm);
1105 l2cap_pi(sk)->sport = cpu_to_le16(psm);
1106 err = 0;
1107 break;
1108 }
1109
1110 write_unlock_bh(&l2cap_sk_list.lock);
1111
1112 if (err < 0)
1113 goto done;
1114 }
1115
1116 sk->sk_max_ack_backlog = backlog;
1117 sk->sk_ack_backlog = 0;
1118 sk->sk_state = BT_LISTEN;
1119
1120 done:
1121 release_sock(sk);
1122 return err;
1123 }
1124
1125 static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
1126 {
1127 DECLARE_WAITQUEUE(wait, current);
1128 struct sock *sk = sock->sk, *nsk;
1129 long timeo;
1130 int err = 0;
1131
1132 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
1133
1134 if (sk->sk_state != BT_LISTEN) {
1135 err = -EBADFD;
1136 goto done;
1137 }
1138
1139 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
1140
1141 BT_DBG("sk %p timeo %ld", sk, timeo);
1142
1143 /* Wait for an incoming connection. (wake-one). */
1144 add_wait_queue_exclusive(sk->sk_sleep, &wait);
1145 while (!(nsk = bt_accept_dequeue(sk, newsock))) {
1146 set_current_state(TASK_INTERRUPTIBLE);
1147 if (!timeo) {
1148 err = -EAGAIN;
1149 break;
1150 }
1151
1152 release_sock(sk);
1153 timeo = schedule_timeout(timeo);
1154 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
1155
1156 if (sk->sk_state != BT_LISTEN) {
1157 err = -EBADFD;
1158 break;
1159 }
1160
1161 if (signal_pending(current)) {
1162 err = sock_intr_errno(timeo);
1163 break;
1164 }
1165 }
1166 set_current_state(TASK_RUNNING);
1167 remove_wait_queue(sk->sk_sleep, &wait);
1168
1169 if (err)
1170 goto done;
1171
1172 newsock->state = SS_CONNECTED;
1173
1174 BT_DBG("new socket %p", nsk);
1175
1176 done:
1177 release_sock(sk);
1178 return err;
1179 }
1180
1181 static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
1182 {
1183 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
1184 struct sock *sk = sock->sk;
1185
1186 BT_DBG("sock %p, sk %p", sock, sk);
1187
1188 addr->sa_family = AF_BLUETOOTH;
1189 *len = sizeof(struct sockaddr_l2);
1190
1191 if (peer) {
1192 la->l2_psm = l2cap_pi(sk)->psm;
1193 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
1194 la->l2_cid = cpu_to_le16(l2cap_pi(sk)->dcid);
1195 } else {
1196 la->l2_psm = l2cap_pi(sk)->sport;
1197 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
1198 la->l2_cid = cpu_to_le16(l2cap_pi(sk)->scid);
1199 }
1200
1201 return 0;
1202 }
1203
1204 static void l2cap_monitor_timeout(unsigned long arg)
1205 {
1206 struct sock *sk = (void *) arg;
1207 u16 control;
1208
1209 bh_lock_sock(sk);
1210 if (l2cap_pi(sk)->retry_count >= l2cap_pi(sk)->remote_max_tx) {
1211 l2cap_send_disconn_req(l2cap_pi(sk)->conn, sk);
1212 return;
1213 }
1214
1215 l2cap_pi(sk)->retry_count++;
1216 __mod_monitor_timer();
1217
1218 control = L2CAP_CTRL_POLL;
1219 l2cap_send_rr_or_rnr(l2cap_pi(sk), control);
1220 bh_unlock_sock(sk);
1221 }
1222
1223 static void l2cap_retrans_timeout(unsigned long arg)
1224 {
1225 struct sock *sk = (void *) arg;
1226 u16 control;
1227
1228 bh_lock_sock(sk);
1229 l2cap_pi(sk)->retry_count = 1;
1230 __mod_monitor_timer();
1231
1232 l2cap_pi(sk)->conn_state |= L2CAP_CONN_WAIT_F;
1233
1234 control = L2CAP_CTRL_POLL;
1235 l2cap_send_rr_or_rnr(l2cap_pi(sk), control);
1236 bh_unlock_sock(sk);
1237 }
1238
1239 static void l2cap_drop_acked_frames(struct sock *sk)
1240 {
1241 struct sk_buff *skb;
1242
1243 while ((skb = skb_peek(TX_QUEUE(sk)))) {
1244 if (bt_cb(skb)->tx_seq == l2cap_pi(sk)->expected_ack_seq)
1245 break;
1246
1247 skb = skb_dequeue(TX_QUEUE(sk));
1248 kfree_skb(skb);
1249
1250 l2cap_pi(sk)->unacked_frames--;
1251 }
1252
1253 if (!l2cap_pi(sk)->unacked_frames)
1254 del_timer(&l2cap_pi(sk)->retrans_timer);
1255
1256 return;
1257 }
1258
1259 static inline int l2cap_do_send(struct sock *sk, struct sk_buff *skb)
1260 {
1261 struct l2cap_pinfo *pi = l2cap_pi(sk);
1262 int err;
1263
1264 BT_DBG("sk %p, skb %p len %d", sk, skb, skb->len);
1265
1266 err = hci_send_acl(pi->conn->hcon, skb, 0);
1267 if (err < 0)
1268 kfree_skb(skb);
1269
1270 return err;
1271 }
1272
1273 static int l2cap_streaming_send(struct sock *sk)
1274 {
1275 struct sk_buff *skb, *tx_skb;
1276 struct l2cap_pinfo *pi = l2cap_pi(sk);
1277 u16 control, fcs;
1278 int err;
1279
1280 while ((skb = sk->sk_send_head)) {
1281 tx_skb = skb_clone(skb, GFP_ATOMIC);
1282
1283 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1284 control |= pi->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1285 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1286
1287 if (l2cap_pi(sk)->fcs == L2CAP_FCS_CRC16) {
1288 fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
1289 put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
1290 }
1291
1292 err = l2cap_do_send(sk, tx_skb);
1293 if (err < 0) {
1294 l2cap_send_disconn_req(pi->conn, sk);
1295 return err;
1296 }
1297
1298 pi->next_tx_seq = (pi->next_tx_seq + 1) % 64;
1299
1300 if (skb_queue_is_last(TX_QUEUE(sk), skb))
1301 sk->sk_send_head = NULL;
1302 else
1303 sk->sk_send_head = skb_queue_next(TX_QUEUE(sk), skb);
1304
1305 skb = skb_dequeue(TX_QUEUE(sk));
1306 kfree_skb(skb);
1307 }
1308 return 0;
1309 }
1310
1311 static int l2cap_retransmit_frame(struct sock *sk, u8 tx_seq)
1312 {
1313 struct l2cap_pinfo *pi = l2cap_pi(sk);
1314 struct sk_buff *skb, *tx_skb;
1315 u16 control, fcs;
1316 int err;
1317
1318 skb = skb_peek(TX_QUEUE(sk));
1319 do {
1320 if (bt_cb(skb)->tx_seq != tx_seq) {
1321 if (skb_queue_is_last(TX_QUEUE(sk), skb))
1322 break;
1323 skb = skb_queue_next(TX_QUEUE(sk), skb);
1324 continue;
1325 }
1326
1327 if (pi->remote_max_tx &&
1328 bt_cb(skb)->retries == pi->remote_max_tx) {
1329 l2cap_send_disconn_req(pi->conn, sk);
1330 break;
1331 }
1332
1333 tx_skb = skb_clone(skb, GFP_ATOMIC);
1334 bt_cb(skb)->retries++;
1335 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1336 control |= (pi->req_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1337 | (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1338 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1339
1340 if (l2cap_pi(sk)->fcs == L2CAP_FCS_CRC16) {
1341 fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
1342 put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
1343 }
1344
1345 err = l2cap_do_send(sk, tx_skb);
1346 if (err < 0) {
1347 l2cap_send_disconn_req(pi->conn, sk);
1348 return err;
1349 }
1350 break;
1351 } while(1);
1352 return 0;
1353 }
1354
1355 static int l2cap_ertm_send(struct sock *sk)
1356 {
1357 struct sk_buff *skb, *tx_skb;
1358 struct l2cap_pinfo *pi = l2cap_pi(sk);
1359 u16 control, fcs;
1360 int err;
1361
1362 if (pi->conn_state & L2CAP_CONN_WAIT_F)
1363 return 0;
1364
1365 while ((skb = sk->sk_send_head) && (!l2cap_tx_window_full(sk))
1366 && !(pi->conn_state & L2CAP_CONN_REMOTE_BUSY)) {
1367 tx_skb = skb_clone(skb, GFP_ATOMIC);
1368
1369 if (pi->remote_max_tx &&
1370 bt_cb(skb)->retries == pi->remote_max_tx) {
1371 l2cap_send_disconn_req(pi->conn, sk);
1372 break;
1373 }
1374
1375 bt_cb(skb)->retries++;
1376
1377 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1378 control |= (pi->req_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1379 | (pi->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1380 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1381
1382
1383 if (l2cap_pi(sk)->fcs == L2CAP_FCS_CRC16) {
1384 fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
1385 put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
1386 }
1387
1388 err = l2cap_do_send(sk, tx_skb);
1389 if (err < 0) {
1390 l2cap_send_disconn_req(pi->conn, sk);
1391 return err;
1392 }
1393 __mod_retrans_timer();
1394
1395 bt_cb(skb)->tx_seq = pi->next_tx_seq;
1396 pi->next_tx_seq = (pi->next_tx_seq + 1) % 64;
1397
1398 pi->unacked_frames++;
1399
1400 if (skb_queue_is_last(TX_QUEUE(sk), skb))
1401 sk->sk_send_head = NULL;
1402 else
1403 sk->sk_send_head = skb_queue_next(TX_QUEUE(sk), skb);
1404 }
1405
1406 return 0;
1407 }
1408
1409 static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
1410 {
1411 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1412 struct sk_buff **frag;
1413 int err, sent = 0;
1414
1415 if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
1416 return -EFAULT;
1417 }
1418
1419 sent += count;
1420 len -= count;
1421
1422 /* Continuation fragments (no L2CAP header) */
1423 frag = &skb_shinfo(skb)->frag_list;
1424 while (len) {
1425 count = min_t(unsigned int, conn->mtu, len);
1426
1427 *frag = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
1428 if (!*frag)
1429 return -EFAULT;
1430 if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
1431 return -EFAULT;
1432
1433 sent += count;
1434 len -= count;
1435
1436 frag = &(*frag)->next;
1437 }
1438
1439 return sent;
1440 }
1441
1442 static struct sk_buff *l2cap_create_connless_pdu(struct sock *sk, struct msghdr *msg, size_t len)
1443 {
1444 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1445 struct sk_buff *skb;
1446 int err, count, hlen = L2CAP_HDR_SIZE + 2;
1447 struct l2cap_hdr *lh;
1448
1449 BT_DBG("sk %p len %d", sk, (int)len);
1450
1451 count = min_t(unsigned int, (conn->mtu - hlen), len);
1452 skb = bt_skb_send_alloc(sk, count + hlen,
1453 msg->msg_flags & MSG_DONTWAIT, &err);
1454 if (!skb)
1455 return ERR_PTR(-ENOMEM);
1456
1457 /* Create L2CAP header */
1458 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1459 lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid);
1460 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1461 put_unaligned_le16(l2cap_pi(sk)->psm, skb_put(skb, 2));
1462
1463 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1464 if (unlikely(err < 0)) {
1465 kfree_skb(skb);
1466 return ERR_PTR(err);
1467 }
1468 return skb;
1469 }
1470
1471 static struct sk_buff *l2cap_create_basic_pdu(struct sock *sk, struct msghdr *msg, size_t len)
1472 {
1473 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1474 struct sk_buff *skb;
1475 int err, count, hlen = L2CAP_HDR_SIZE;
1476 struct l2cap_hdr *lh;
1477
1478 BT_DBG("sk %p len %d", sk, (int)len);
1479
1480 count = min_t(unsigned int, (conn->mtu - hlen), len);
1481 skb = bt_skb_send_alloc(sk, count + hlen,
1482 msg->msg_flags & MSG_DONTWAIT, &err);
1483 if (!skb)
1484 return ERR_PTR(-ENOMEM);
1485
1486 /* Create L2CAP header */
1487 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1488 lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid);
1489 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1490
1491 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1492 if (unlikely(err < 0)) {
1493 kfree_skb(skb);
1494 return ERR_PTR(err);
1495 }
1496 return skb;
1497 }
1498
1499 static struct sk_buff *l2cap_create_iframe_pdu(struct sock *sk, struct msghdr *msg, size_t len, u16 control, u16 sdulen)
1500 {
1501 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1502 struct sk_buff *skb;
1503 int err, count, hlen = L2CAP_HDR_SIZE + 2;
1504 struct l2cap_hdr *lh;
1505
1506 BT_DBG("sk %p len %d", sk, (int)len);
1507
1508 if (sdulen)
1509 hlen += 2;
1510
1511 if (l2cap_pi(sk)->fcs == L2CAP_FCS_CRC16)
1512 hlen += 2;
1513
1514 count = min_t(unsigned int, (conn->mtu - hlen), len);
1515 skb = bt_skb_send_alloc(sk, count + hlen,
1516 msg->msg_flags & MSG_DONTWAIT, &err);
1517 if (!skb)
1518 return ERR_PTR(-ENOMEM);
1519
1520 /* Create L2CAP header */
1521 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1522 lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid);
1523 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1524 put_unaligned_le16(control, skb_put(skb, 2));
1525 if (sdulen)
1526 put_unaligned_le16(sdulen, skb_put(skb, 2));
1527
1528 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1529 if (unlikely(err < 0)) {
1530 kfree_skb(skb);
1531 return ERR_PTR(err);
1532 }
1533
1534 if (l2cap_pi(sk)->fcs == L2CAP_FCS_CRC16)
1535 put_unaligned_le16(0, skb_put(skb, 2));
1536
1537 bt_cb(skb)->retries = 0;
1538 return skb;
1539 }
1540
1541 static inline int l2cap_sar_segment_sdu(struct sock *sk, struct msghdr *msg, size_t len)
1542 {
1543 struct l2cap_pinfo *pi = l2cap_pi(sk);
1544 struct sk_buff *skb;
1545 struct sk_buff_head sar_queue;
1546 u16 control;
1547 size_t size = 0;
1548
1549 __skb_queue_head_init(&sar_queue);
1550 control = L2CAP_SDU_START;
1551 skb = l2cap_create_iframe_pdu(sk, msg, pi->max_pdu_size, control, len);
1552 if (IS_ERR(skb))
1553 return PTR_ERR(skb);
1554
1555 __skb_queue_tail(&sar_queue, skb);
1556 len -= pi->max_pdu_size;
1557 size +=pi->max_pdu_size;
1558 control = 0;
1559
1560 while (len > 0) {
1561 size_t buflen;
1562
1563 if (len > pi->max_pdu_size) {
1564 control |= L2CAP_SDU_CONTINUE;
1565 buflen = pi->max_pdu_size;
1566 } else {
1567 control |= L2CAP_SDU_END;
1568 buflen = len;
1569 }
1570
1571 skb = l2cap_create_iframe_pdu(sk, msg, buflen, control, 0);
1572 if (IS_ERR(skb)) {
1573 skb_queue_purge(&sar_queue);
1574 return PTR_ERR(skb);
1575 }
1576
1577 __skb_queue_tail(&sar_queue, skb);
1578 len -= buflen;
1579 size += buflen;
1580 control = 0;
1581 }
1582 skb_queue_splice_tail(&sar_queue, TX_QUEUE(sk));
1583 if (sk->sk_send_head == NULL)
1584 sk->sk_send_head = sar_queue.next;
1585
1586 return size;
1587 }
1588
1589 static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
1590 {
1591 struct sock *sk = sock->sk;
1592 struct l2cap_pinfo *pi = l2cap_pi(sk);
1593 struct sk_buff *skb;
1594 u16 control;
1595 int err;
1596
1597 BT_DBG("sock %p, sk %p", sock, sk);
1598
1599 err = sock_error(sk);
1600 if (err)
1601 return err;
1602
1603 if (msg->msg_flags & MSG_OOB)
1604 return -EOPNOTSUPP;
1605
1606 /* Check outgoing MTU */
1607 if (sk->sk_type == SOCK_SEQPACKET && pi->mode == L2CAP_MODE_BASIC
1608 && len > pi->omtu)
1609 return -EINVAL;
1610
1611 lock_sock(sk);
1612
1613 if (sk->sk_state != BT_CONNECTED) {
1614 err = -ENOTCONN;
1615 goto done;
1616 }
1617
1618 /* Connectionless channel */
1619 if (sk->sk_type == SOCK_DGRAM) {
1620 skb = l2cap_create_connless_pdu(sk, msg, len);
1621 err = l2cap_do_send(sk, skb);
1622 goto done;
1623 }
1624
1625 switch (pi->mode) {
1626 case L2CAP_MODE_BASIC:
1627 /* Create a basic PDU */
1628 skb = l2cap_create_basic_pdu(sk, msg, len);
1629 if (IS_ERR(skb)) {
1630 err = PTR_ERR(skb);
1631 goto done;
1632 }
1633
1634 err = l2cap_do_send(sk, skb);
1635 if (!err)
1636 err = len;
1637 break;
1638
1639 case L2CAP_MODE_ERTM:
1640 case L2CAP_MODE_STREAMING:
1641 /* Entire SDU fits into one PDU */
1642 if (len <= pi->max_pdu_size) {
1643 control = L2CAP_SDU_UNSEGMENTED;
1644 skb = l2cap_create_iframe_pdu(sk, msg, len, control, 0);
1645 if (IS_ERR(skb)) {
1646 err = PTR_ERR(skb);
1647 goto done;
1648 }
1649 __skb_queue_tail(TX_QUEUE(sk), skb);
1650 if (sk->sk_send_head == NULL)
1651 sk->sk_send_head = skb;
1652 } else {
1653 /* Segment SDU into multiples PDUs */
1654 err = l2cap_sar_segment_sdu(sk, msg, len);
1655 if (err < 0)
1656 goto done;
1657 }
1658
1659 if (pi->mode == L2CAP_MODE_STREAMING)
1660 err = l2cap_streaming_send(sk);
1661 else
1662 err = l2cap_ertm_send(sk);
1663
1664 if (!err)
1665 err = len;
1666 break;
1667
1668 default:
1669 BT_DBG("bad state %1.1x", pi->mode);
1670 err = -EINVAL;
1671 }
1672
1673 done:
1674 release_sock(sk);
1675 return err;
1676 }
1677
1678 static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
1679 {
1680 struct sock *sk = sock->sk;
1681
1682 lock_sock(sk);
1683
1684 if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
1685 struct l2cap_conn_rsp rsp;
1686
1687 sk->sk_state = BT_CONFIG;
1688
1689 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid);
1690 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid);
1691 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
1692 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
1693 l2cap_send_cmd(l2cap_pi(sk)->conn, l2cap_pi(sk)->ident,
1694 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
1695
1696 release_sock(sk);
1697 return 0;
1698 }
1699
1700 release_sock(sk);
1701
1702 return bt_sock_recvmsg(iocb, sock, msg, len, flags);
1703 }
1704
1705 static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
1706 {
1707 struct sock *sk = sock->sk;
1708 struct l2cap_options opts;
1709 int len, err = 0;
1710 u32 opt;
1711
1712 BT_DBG("sk %p", sk);
1713
1714 lock_sock(sk);
1715
1716 switch (optname) {
1717 case L2CAP_OPTIONS:
1718 opts.imtu = l2cap_pi(sk)->imtu;
1719 opts.omtu = l2cap_pi(sk)->omtu;
1720 opts.flush_to = l2cap_pi(sk)->flush_to;
1721 opts.mode = l2cap_pi(sk)->mode;
1722 opts.fcs = l2cap_pi(sk)->fcs;
1723
1724 len = min_t(unsigned int, sizeof(opts), optlen);
1725 if (copy_from_user((char *) &opts, optval, len)) {
1726 err = -EFAULT;
1727 break;
1728 }
1729
1730 l2cap_pi(sk)->imtu = opts.imtu;
1731 l2cap_pi(sk)->omtu = opts.omtu;
1732 l2cap_pi(sk)->mode = opts.mode;
1733 l2cap_pi(sk)->fcs = opts.fcs;
1734 break;
1735
1736 case L2CAP_LM:
1737 if (get_user(opt, (u32 __user *) optval)) {
1738 err = -EFAULT;
1739 break;
1740 }
1741
1742 if (opt & L2CAP_LM_AUTH)
1743 l2cap_pi(sk)->sec_level = BT_SECURITY_LOW;
1744 if (opt & L2CAP_LM_ENCRYPT)
1745 l2cap_pi(sk)->sec_level = BT_SECURITY_MEDIUM;
1746 if (opt & L2CAP_LM_SECURE)
1747 l2cap_pi(sk)->sec_level = BT_SECURITY_HIGH;
1748
1749 l2cap_pi(sk)->role_switch = (opt & L2CAP_LM_MASTER);
1750 l2cap_pi(sk)->force_reliable = (opt & L2CAP_LM_RELIABLE);
1751 break;
1752
1753 default:
1754 err = -ENOPROTOOPT;
1755 break;
1756 }
1757
1758 release_sock(sk);
1759 return err;
1760 }
1761
1762 static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
1763 {
1764 struct sock *sk = sock->sk;
1765 struct bt_security sec;
1766 int len, err = 0;
1767 u32 opt;
1768
1769 BT_DBG("sk %p", sk);
1770
1771 if (level == SOL_L2CAP)
1772 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
1773
1774 if (level != SOL_BLUETOOTH)
1775 return -ENOPROTOOPT;
1776
1777 lock_sock(sk);
1778
1779 switch (optname) {
1780 case BT_SECURITY:
1781 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_RAW) {
1782 err = -EINVAL;
1783 break;
1784 }
1785
1786 sec.level = BT_SECURITY_LOW;
1787
1788 len = min_t(unsigned int, sizeof(sec), optlen);
1789 if (copy_from_user((char *) &sec, optval, len)) {
1790 err = -EFAULT;
1791 break;
1792 }
1793
1794 if (sec.level < BT_SECURITY_LOW ||
1795 sec.level > BT_SECURITY_HIGH) {
1796 err = -EINVAL;
1797 break;
1798 }
1799
1800 l2cap_pi(sk)->sec_level = sec.level;
1801 break;
1802
1803 case BT_DEFER_SETUP:
1804 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1805 err = -EINVAL;
1806 break;
1807 }
1808
1809 if (get_user(opt, (u32 __user *) optval)) {
1810 err = -EFAULT;
1811 break;
1812 }
1813
1814 bt_sk(sk)->defer_setup = opt;
1815 break;
1816
1817 default:
1818 err = -ENOPROTOOPT;
1819 break;
1820 }
1821
1822 release_sock(sk);
1823 return err;
1824 }
1825
1826 static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
1827 {
1828 struct sock *sk = sock->sk;
1829 struct l2cap_options opts;
1830 struct l2cap_conninfo cinfo;
1831 int len, err = 0;
1832 u32 opt;
1833
1834 BT_DBG("sk %p", sk);
1835
1836 if (get_user(len, optlen))
1837 return -EFAULT;
1838
1839 lock_sock(sk);
1840
1841 switch (optname) {
1842 case L2CAP_OPTIONS:
1843 opts.imtu = l2cap_pi(sk)->imtu;
1844 opts.omtu = l2cap_pi(sk)->omtu;
1845 opts.flush_to = l2cap_pi(sk)->flush_to;
1846 opts.mode = l2cap_pi(sk)->mode;
1847 opts.fcs = l2cap_pi(sk)->fcs;
1848
1849 len = min_t(unsigned int, len, sizeof(opts));
1850 if (copy_to_user(optval, (char *) &opts, len))
1851 err = -EFAULT;
1852
1853 break;
1854
1855 case L2CAP_LM:
1856 switch (l2cap_pi(sk)->sec_level) {
1857 case BT_SECURITY_LOW:
1858 opt = L2CAP_LM_AUTH;
1859 break;
1860 case BT_SECURITY_MEDIUM:
1861 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
1862 break;
1863 case BT_SECURITY_HIGH:
1864 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
1865 L2CAP_LM_SECURE;
1866 break;
1867 default:
1868 opt = 0;
1869 break;
1870 }
1871
1872 if (l2cap_pi(sk)->role_switch)
1873 opt |= L2CAP_LM_MASTER;
1874
1875 if (l2cap_pi(sk)->force_reliable)
1876 opt |= L2CAP_LM_RELIABLE;
1877
1878 if (put_user(opt, (u32 __user *) optval))
1879 err = -EFAULT;
1880 break;
1881
1882 case L2CAP_CONNINFO:
1883 if (sk->sk_state != BT_CONNECTED &&
1884 !(sk->sk_state == BT_CONNECT2 &&
1885 bt_sk(sk)->defer_setup)) {
1886 err = -ENOTCONN;
1887 break;
1888 }
1889
1890 cinfo.hci_handle = l2cap_pi(sk)->conn->hcon->handle;
1891 memcpy(cinfo.dev_class, l2cap_pi(sk)->conn->hcon->dev_class, 3);
1892
1893 len = min_t(unsigned int, len, sizeof(cinfo));
1894 if (copy_to_user(optval, (char *) &cinfo, len))
1895 err = -EFAULT;
1896
1897 break;
1898
1899 default:
1900 err = -ENOPROTOOPT;
1901 break;
1902 }
1903
1904 release_sock(sk);
1905 return err;
1906 }
1907
1908 static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
1909 {
1910 struct sock *sk = sock->sk;
1911 struct bt_security sec;
1912 int len, err = 0;
1913
1914 BT_DBG("sk %p", sk);
1915
1916 if (level == SOL_L2CAP)
1917 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
1918
1919 if (level != SOL_BLUETOOTH)
1920 return -ENOPROTOOPT;
1921
1922 if (get_user(len, optlen))
1923 return -EFAULT;
1924
1925 lock_sock(sk);
1926
1927 switch (optname) {
1928 case BT_SECURITY:
1929 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_RAW) {
1930 err = -EINVAL;
1931 break;
1932 }
1933
1934 sec.level = l2cap_pi(sk)->sec_level;
1935
1936 len = min_t(unsigned int, len, sizeof(sec));
1937 if (copy_to_user(optval, (char *) &sec, len))
1938 err = -EFAULT;
1939
1940 break;
1941
1942 case BT_DEFER_SETUP:
1943 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1944 err = -EINVAL;
1945 break;
1946 }
1947
1948 if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
1949 err = -EFAULT;
1950
1951 break;
1952
1953 default:
1954 err = -ENOPROTOOPT;
1955 break;
1956 }
1957
1958 release_sock(sk);
1959 return err;
1960 }
1961
1962 static int l2cap_sock_shutdown(struct socket *sock, int how)
1963 {
1964 struct sock *sk = sock->sk;
1965 int err = 0;
1966
1967 BT_DBG("sock %p, sk %p", sock, sk);
1968
1969 if (!sk)
1970 return 0;
1971
1972 lock_sock(sk);
1973 if (!sk->sk_shutdown) {
1974 sk->sk_shutdown = SHUTDOWN_MASK;
1975 l2cap_sock_clear_timer(sk);
1976 __l2cap_sock_close(sk, 0);
1977
1978 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
1979 err = bt_sock_wait_state(sk, BT_CLOSED,
1980 sk->sk_lingertime);
1981 }
1982 release_sock(sk);
1983 return err;
1984 }
1985
1986 static int l2cap_sock_release(struct socket *sock)
1987 {
1988 struct sock *sk = sock->sk;
1989 int err;
1990
1991 BT_DBG("sock %p, sk %p", sock, sk);
1992
1993 if (!sk)
1994 return 0;
1995
1996 err = l2cap_sock_shutdown(sock, 2);
1997
1998 sock_orphan(sk);
1999 l2cap_sock_kill(sk);
2000 return err;
2001 }
2002
2003 static void l2cap_chan_ready(struct sock *sk)
2004 {
2005 struct sock *parent = bt_sk(sk)->parent;
2006
2007 BT_DBG("sk %p, parent %p", sk, parent);
2008
2009 l2cap_pi(sk)->conf_state = 0;
2010 l2cap_sock_clear_timer(sk);
2011
2012 if (!parent) {
2013 /* Outgoing channel.
2014 * Wake up socket sleeping on connect.
2015 */
2016 sk->sk_state = BT_CONNECTED;
2017 sk->sk_state_change(sk);
2018 } else {
2019 /* Incoming channel.
2020 * Wake up socket sleeping on accept.
2021 */
2022 parent->sk_data_ready(parent, 0);
2023 }
2024 }
2025
2026 /* Copy frame to all raw sockets on that connection */
2027 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
2028 {
2029 struct l2cap_chan_list *l = &conn->chan_list;
2030 struct sk_buff *nskb;
2031 struct sock *sk;
2032
2033 BT_DBG("conn %p", conn);
2034
2035 read_lock(&l->lock);
2036 for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
2037 if (sk->sk_type != SOCK_RAW)
2038 continue;
2039
2040 /* Don't send frame to the socket it came from */
2041 if (skb->sk == sk)
2042 continue;
2043 nskb = skb_clone(skb, GFP_ATOMIC);
2044 if (!nskb)
2045 continue;
2046
2047 if (sock_queue_rcv_skb(sk, nskb))
2048 kfree_skb(nskb);
2049 }
2050 read_unlock(&l->lock);
2051 }
2052
2053 /* ---- L2CAP signalling commands ---- */
2054 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
2055 u8 code, u8 ident, u16 dlen, void *data)
2056 {
2057 struct sk_buff *skb, **frag;
2058 struct l2cap_cmd_hdr *cmd;
2059 struct l2cap_hdr *lh;
2060 int len, count;
2061
2062 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
2063 conn, code, ident, dlen);
2064
2065 len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
2066 count = min_t(unsigned int, conn->mtu, len);
2067
2068 skb = bt_skb_alloc(count, GFP_ATOMIC);
2069 if (!skb)
2070 return NULL;
2071
2072 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2073 lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
2074 lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
2075
2076 cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
2077 cmd->code = code;
2078 cmd->ident = ident;
2079 cmd->len = cpu_to_le16(dlen);
2080
2081 if (dlen) {
2082 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
2083 memcpy(skb_put(skb, count), data, count);
2084 data += count;
2085 }
2086
2087 len -= skb->len;
2088
2089 /* Continuation fragments (no L2CAP header) */
2090 frag = &skb_shinfo(skb)->frag_list;
2091 while (len) {
2092 count = min_t(unsigned int, conn->mtu, len);
2093
2094 *frag = bt_skb_alloc(count, GFP_ATOMIC);
2095 if (!*frag)
2096 goto fail;
2097
2098 memcpy(skb_put(*frag, count), data, count);
2099
2100 len -= count;
2101 data += count;
2102
2103 frag = &(*frag)->next;
2104 }
2105
2106 return skb;
2107
2108 fail:
2109 kfree_skb(skb);
2110 return NULL;
2111 }
2112
2113 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
2114 {
2115 struct l2cap_conf_opt *opt = *ptr;
2116 int len;
2117
2118 len = L2CAP_CONF_OPT_SIZE + opt->len;
2119 *ptr += len;
2120
2121 *type = opt->type;
2122 *olen = opt->len;
2123
2124 switch (opt->len) {
2125 case 1:
2126 *val = *((u8 *) opt->val);
2127 break;
2128
2129 case 2:
2130 *val = __le16_to_cpu(*((__le16 *) opt->val));
2131 break;
2132
2133 case 4:
2134 *val = __le32_to_cpu(*((__le32 *) opt->val));
2135 break;
2136
2137 default:
2138 *val = (unsigned long) opt->val;
2139 break;
2140 }
2141
2142 BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
2143 return len;
2144 }
2145
2146 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
2147 {
2148 struct l2cap_conf_opt *opt = *ptr;
2149
2150 BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
2151
2152 opt->type = type;
2153 opt->len = len;
2154
2155 switch (len) {
2156 case 1:
2157 *((u8 *) opt->val) = val;
2158 break;
2159
2160 case 2:
2161 *((__le16 *) opt->val) = cpu_to_le16(val);
2162 break;
2163
2164 case 4:
2165 *((__le32 *) opt->val) = cpu_to_le32(val);
2166 break;
2167
2168 default:
2169 memcpy(opt->val, (void *) val, len);
2170 break;
2171 }
2172
2173 *ptr += L2CAP_CONF_OPT_SIZE + len;
2174 }
2175
2176 static int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
2177 {
2178 u32 local_feat_mask = l2cap_feat_mask;
2179 if (enable_ertm)
2180 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
2181
2182 switch (mode) {
2183 case L2CAP_MODE_ERTM:
2184 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
2185 case L2CAP_MODE_STREAMING:
2186 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
2187 default:
2188 return 0x00;
2189 }
2190 }
2191
2192 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
2193 {
2194 switch (mode) {
2195 case L2CAP_MODE_STREAMING:
2196 case L2CAP_MODE_ERTM:
2197 if (l2cap_mode_supported(mode, remote_feat_mask))
2198 return mode;
2199 /* fall through */
2200 default:
2201 return L2CAP_MODE_BASIC;
2202 }
2203 }
2204
2205 static int l2cap_build_conf_req(struct sock *sk, void *data)
2206 {
2207 struct l2cap_pinfo *pi = l2cap_pi(sk);
2208 struct l2cap_conf_req *req = data;
2209 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_ERTM };
2210 void *ptr = req->data;
2211
2212 BT_DBG("sk %p", sk);
2213
2214 if (pi->num_conf_req || pi->num_conf_rsp)
2215 goto done;
2216
2217 switch (pi->mode) {
2218 case L2CAP_MODE_STREAMING:
2219 case L2CAP_MODE_ERTM:
2220 pi->conf_state |= L2CAP_CONF_STATE2_DEVICE;
2221 if (!l2cap_mode_supported(pi->mode, pi->conn->feat_mask))
2222 l2cap_send_disconn_req(pi->conn, sk);
2223 break;
2224 default:
2225 pi->mode = l2cap_select_mode(rfc.mode, pi->conn->feat_mask);
2226 break;
2227 }
2228
2229 done:
2230 switch (pi->mode) {
2231 case L2CAP_MODE_BASIC:
2232 if (pi->imtu != L2CAP_DEFAULT_MTU)
2233 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
2234 break;
2235
2236 case L2CAP_MODE_ERTM:
2237 rfc.mode = L2CAP_MODE_ERTM;
2238 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
2239 rfc.max_transmit = L2CAP_DEFAULT_MAX_TX;
2240 rfc.retrans_timeout = 0;
2241 rfc.monitor_timeout = 0;
2242 rfc.max_pdu_size = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
2243
2244 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2245 sizeof(rfc), (unsigned long) &rfc);
2246
2247 if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS))
2248 break;
2249
2250 if (pi->fcs == L2CAP_FCS_NONE ||
2251 pi->conf_state & L2CAP_CONF_NO_FCS_RECV) {
2252 pi->fcs = L2CAP_FCS_NONE;
2253 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, pi->fcs);
2254 }
2255 break;
2256
2257 case L2CAP_MODE_STREAMING:
2258 rfc.mode = L2CAP_MODE_STREAMING;
2259 rfc.txwin_size = 0;
2260 rfc.max_transmit = 0;
2261 rfc.retrans_timeout = 0;
2262 rfc.monitor_timeout = 0;
2263 rfc.max_pdu_size = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
2264
2265 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2266 sizeof(rfc), (unsigned long) &rfc);
2267
2268 if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS))
2269 break;
2270
2271 if (pi->fcs == L2CAP_FCS_NONE ||
2272 pi->conf_state & L2CAP_CONF_NO_FCS_RECV) {
2273 pi->fcs = L2CAP_FCS_NONE;
2274 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, pi->fcs);
2275 }
2276 break;
2277 }
2278
2279 /* FIXME: Need actual value of the flush timeout */
2280 //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
2281 // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
2282
2283 req->dcid = cpu_to_le16(pi->dcid);
2284 req->flags = cpu_to_le16(0);
2285
2286 return ptr - data;
2287 }
2288
2289 static int l2cap_parse_conf_req(struct sock *sk, void *data)
2290 {
2291 struct l2cap_pinfo *pi = l2cap_pi(sk);
2292 struct l2cap_conf_rsp *rsp = data;
2293 void *ptr = rsp->data;
2294 void *req = pi->conf_req;
2295 int len = pi->conf_len;
2296 int type, hint, olen;
2297 unsigned long val;
2298 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2299 u16 mtu = L2CAP_DEFAULT_MTU;
2300 u16 result = L2CAP_CONF_SUCCESS;
2301
2302 BT_DBG("sk %p", sk);
2303
2304 while (len >= L2CAP_CONF_OPT_SIZE) {
2305 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
2306
2307 hint = type & L2CAP_CONF_HINT;
2308 type &= L2CAP_CONF_MASK;
2309
2310 switch (type) {
2311 case L2CAP_CONF_MTU:
2312 mtu = val;
2313 break;
2314
2315 case L2CAP_CONF_FLUSH_TO:
2316 pi->flush_to = val;
2317 break;
2318
2319 case L2CAP_CONF_QOS:
2320 break;
2321
2322 case L2CAP_CONF_RFC:
2323 if (olen == sizeof(rfc))
2324 memcpy(&rfc, (void *) val, olen);
2325 break;
2326
2327 case L2CAP_CONF_FCS:
2328 if (val == L2CAP_FCS_NONE)
2329 pi->conf_state |= L2CAP_CONF_NO_FCS_RECV;
2330
2331 break;
2332
2333 default:
2334 if (hint)
2335 break;
2336
2337 result = L2CAP_CONF_UNKNOWN;
2338 *((u8 *) ptr++) = type;
2339 break;
2340 }
2341 }
2342
2343 if (pi->num_conf_rsp || pi->num_conf_req)
2344 goto done;
2345
2346 switch (pi->mode) {
2347 case L2CAP_MODE_STREAMING:
2348 case L2CAP_MODE_ERTM:
2349 pi->conf_state |= L2CAP_CONF_STATE2_DEVICE;
2350 if (!l2cap_mode_supported(pi->mode, pi->conn->feat_mask))
2351 return -ECONNREFUSED;
2352 break;
2353 default:
2354 pi->mode = l2cap_select_mode(rfc.mode, pi->conn->feat_mask);
2355 break;
2356 }
2357
2358 done:
2359 if (pi->mode != rfc.mode) {
2360 result = L2CAP_CONF_UNACCEPT;
2361 rfc.mode = pi->mode;
2362
2363 if (pi->num_conf_rsp == 1)
2364 return -ECONNREFUSED;
2365
2366 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2367 sizeof(rfc), (unsigned long) &rfc);
2368 }
2369
2370
2371 if (result == L2CAP_CONF_SUCCESS) {
2372 /* Configure output options and let the other side know
2373 * which ones we don't like. */
2374
2375 if (mtu < L2CAP_DEFAULT_MIN_MTU)
2376 result = L2CAP_CONF_UNACCEPT;
2377 else {
2378 pi->omtu = mtu;
2379 pi->conf_state |= L2CAP_CONF_MTU_DONE;
2380 }
2381 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu);
2382
2383 switch (rfc.mode) {
2384 case L2CAP_MODE_BASIC:
2385 pi->fcs = L2CAP_FCS_NONE;
2386 pi->conf_state |= L2CAP_CONF_MODE_DONE;
2387 break;
2388
2389 case L2CAP_MODE_ERTM:
2390 pi->remote_tx_win = rfc.txwin_size;
2391 pi->remote_max_tx = rfc.max_transmit;
2392 pi->max_pdu_size = rfc.max_pdu_size;
2393
2394 rfc.retrans_timeout = L2CAP_DEFAULT_RETRANS_TO;
2395 rfc.monitor_timeout = L2CAP_DEFAULT_MONITOR_TO;
2396
2397 pi->conf_state |= L2CAP_CONF_MODE_DONE;
2398 break;
2399
2400 case L2CAP_MODE_STREAMING:
2401 pi->remote_tx_win = rfc.txwin_size;
2402 pi->max_pdu_size = rfc.max_pdu_size;
2403
2404 pi->conf_state |= L2CAP_CONF_MODE_DONE;
2405 break;
2406
2407 default:
2408 result = L2CAP_CONF_UNACCEPT;
2409
2410 memset(&rfc, 0, sizeof(rfc));
2411 rfc.mode = pi->mode;
2412 }
2413
2414 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2415 sizeof(rfc), (unsigned long) &rfc);
2416
2417 if (result == L2CAP_CONF_SUCCESS)
2418 pi->conf_state |= L2CAP_CONF_OUTPUT_DONE;
2419 }
2420 rsp->scid = cpu_to_le16(pi->dcid);
2421 rsp->result = cpu_to_le16(result);
2422 rsp->flags = cpu_to_le16(0x0000);
2423
2424 return ptr - data;
2425 }
2426
2427 static int l2cap_parse_conf_rsp(struct sock *sk, void *rsp, int len, void *data, u16 *result)
2428 {
2429 struct l2cap_pinfo *pi = l2cap_pi(sk);
2430 struct l2cap_conf_req *req = data;
2431 void *ptr = req->data;
2432 int type, olen;
2433 unsigned long val;
2434 struct l2cap_conf_rfc rfc;
2435
2436 BT_DBG("sk %p, rsp %p, len %d, req %p", sk, rsp, len, data);
2437
2438 while (len >= L2CAP_CONF_OPT_SIZE) {
2439 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2440
2441 switch (type) {
2442 case L2CAP_CONF_MTU:
2443 if (val < L2CAP_DEFAULT_MIN_MTU) {
2444 *result = L2CAP_CONF_UNACCEPT;
2445 pi->omtu = L2CAP_DEFAULT_MIN_MTU;
2446 } else
2447 pi->omtu = val;
2448 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu);
2449 break;
2450
2451 case L2CAP_CONF_FLUSH_TO:
2452 pi->flush_to = val;
2453 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2454 2, pi->flush_to);
2455 break;
2456
2457 case L2CAP_CONF_RFC:
2458 if (olen == sizeof(rfc))
2459 memcpy(&rfc, (void *)val, olen);
2460
2461 if ((pi->conf_state & L2CAP_CONF_STATE2_DEVICE) &&
2462 rfc.mode != pi->mode)
2463 return -ECONNREFUSED;
2464
2465 pi->mode = rfc.mode;
2466 pi->fcs = 0;
2467
2468 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2469 sizeof(rfc), (unsigned long) &rfc);
2470 break;
2471 }
2472 }
2473
2474 if (*result == L2CAP_CONF_SUCCESS) {
2475 switch (rfc.mode) {
2476 case L2CAP_MODE_ERTM:
2477 pi->remote_tx_win = rfc.txwin_size;
2478 pi->retrans_timeout = rfc.retrans_timeout;
2479 pi->monitor_timeout = rfc.monitor_timeout;
2480 pi->max_pdu_size = le16_to_cpu(rfc.max_pdu_size);
2481 break;
2482 case L2CAP_MODE_STREAMING:
2483 pi->max_pdu_size = le16_to_cpu(rfc.max_pdu_size);
2484 break;
2485 }
2486 }
2487
2488 req->dcid = cpu_to_le16(pi->dcid);
2489 req->flags = cpu_to_le16(0x0000);
2490
2491 return ptr - data;
2492 }
2493
2494 static int l2cap_build_conf_rsp(struct sock *sk, void *data, u16 result, u16 flags)
2495 {
2496 struct l2cap_conf_rsp *rsp = data;
2497 void *ptr = rsp->data;
2498
2499 BT_DBG("sk %p", sk);
2500
2501 rsp->scid = cpu_to_le16(l2cap_pi(sk)->dcid);
2502 rsp->result = cpu_to_le16(result);
2503 rsp->flags = cpu_to_le16(flags);
2504
2505 return ptr - data;
2506 }
2507
2508 static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2509 {
2510 struct l2cap_cmd_rej *rej = (struct l2cap_cmd_rej *) data;
2511
2512 if (rej->reason != 0x0000)
2513 return 0;
2514
2515 if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
2516 cmd->ident == conn->info_ident) {
2517 del_timer(&conn->info_timer);
2518
2519 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2520 conn->info_ident = 0;
2521
2522 l2cap_conn_start(conn);
2523 }
2524
2525 return 0;
2526 }
2527
2528 static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2529 {
2530 struct l2cap_chan_list *list = &conn->chan_list;
2531 struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
2532 struct l2cap_conn_rsp rsp;
2533 struct sock *sk, *parent;
2534 int result, status = L2CAP_CS_NO_INFO;
2535
2536 u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2537 __le16 psm = req->psm;
2538
2539 BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
2540
2541 /* Check if we have socket listening on psm */
2542 parent = l2cap_get_sock_by_psm(BT_LISTEN, psm, conn->src);
2543 if (!parent) {
2544 result = L2CAP_CR_BAD_PSM;
2545 goto sendresp;
2546 }
2547
2548 /* Check if the ACL is secure enough (if not SDP) */
2549 if (psm != cpu_to_le16(0x0001) &&
2550 !hci_conn_check_link_mode(conn->hcon)) {
2551 conn->disc_reason = 0x05;
2552 result = L2CAP_CR_SEC_BLOCK;
2553 goto response;
2554 }
2555
2556 result = L2CAP_CR_NO_MEM;
2557
2558 /* Check for backlog size */
2559 if (sk_acceptq_is_full(parent)) {
2560 BT_DBG("backlog full %d", parent->sk_ack_backlog);
2561 goto response;
2562 }
2563
2564 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
2565 if (!sk)
2566 goto response;
2567
2568 write_lock_bh(&list->lock);
2569
2570 /* Check if we already have channel with that dcid */
2571 if (__l2cap_get_chan_by_dcid(list, scid)) {
2572 write_unlock_bh(&list->lock);
2573 sock_set_flag(sk, SOCK_ZAPPED);
2574 l2cap_sock_kill(sk);
2575 goto response;
2576 }
2577
2578 hci_conn_hold(conn->hcon);
2579
2580 l2cap_sock_init(sk, parent);
2581 bacpy(&bt_sk(sk)->src, conn->src);
2582 bacpy(&bt_sk(sk)->dst, conn->dst);
2583 l2cap_pi(sk)->psm = psm;
2584 l2cap_pi(sk)->dcid = scid;
2585
2586 __l2cap_chan_add(conn, sk, parent);
2587 dcid = l2cap_pi(sk)->scid;
2588
2589 l2cap_sock_set_timer(sk, sk->sk_sndtimeo);
2590
2591 l2cap_pi(sk)->ident = cmd->ident;
2592
2593 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2594 if (l2cap_check_security(sk)) {
2595 if (bt_sk(sk)->defer_setup) {
2596 sk->sk_state = BT_CONNECT2;
2597 result = L2CAP_CR_PEND;
2598 status = L2CAP_CS_AUTHOR_PEND;
2599 parent->sk_data_ready(parent, 0);
2600 } else {
2601 sk->sk_state = BT_CONFIG;
2602 result = L2CAP_CR_SUCCESS;
2603 status = L2CAP_CS_NO_INFO;
2604 }
2605 } else {
2606 sk->sk_state = BT_CONNECT2;
2607 result = L2CAP_CR_PEND;
2608 status = L2CAP_CS_AUTHEN_PEND;
2609 }
2610 } else {
2611 sk->sk_state = BT_CONNECT2;
2612 result = L2CAP_CR_PEND;
2613 status = L2CAP_CS_NO_INFO;
2614 }
2615
2616 write_unlock_bh(&list->lock);
2617
2618 response:
2619 bh_unlock_sock(parent);
2620
2621 sendresp:
2622 rsp.scid = cpu_to_le16(scid);
2623 rsp.dcid = cpu_to_le16(dcid);
2624 rsp.result = cpu_to_le16(result);
2625 rsp.status = cpu_to_le16(status);
2626 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2627
2628 if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
2629 struct l2cap_info_req info;
2630 info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
2631
2632 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
2633 conn->info_ident = l2cap_get_ident(conn);
2634
2635 mod_timer(&conn->info_timer, jiffies +
2636 msecs_to_jiffies(L2CAP_INFO_TIMEOUT));
2637
2638 l2cap_send_cmd(conn, conn->info_ident,
2639 L2CAP_INFO_REQ, sizeof(info), &info);
2640 }
2641
2642 return 0;
2643 }
2644
2645 static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2646 {
2647 struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
2648 u16 scid, dcid, result, status;
2649 struct sock *sk;
2650 u8 req[128];
2651
2652 scid = __le16_to_cpu(rsp->scid);
2653 dcid = __le16_to_cpu(rsp->dcid);
2654 result = __le16_to_cpu(rsp->result);
2655 status = __le16_to_cpu(rsp->status);
2656
2657 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
2658
2659 if (scid) {
2660 sk = l2cap_get_chan_by_scid(&conn->chan_list, scid);
2661 if (!sk)
2662 return 0;
2663 } else {
2664 sk = l2cap_get_chan_by_ident(&conn->chan_list, cmd->ident);
2665 if (!sk)
2666 return 0;
2667 }
2668
2669 switch (result) {
2670 case L2CAP_CR_SUCCESS:
2671 sk->sk_state = BT_CONFIG;
2672 l2cap_pi(sk)->ident = 0;
2673 l2cap_pi(sk)->dcid = dcid;
2674 l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
2675
2676 l2cap_pi(sk)->conf_state &= ~L2CAP_CONF_CONNECT_PEND;
2677
2678 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2679 l2cap_build_conf_req(sk, req), req);
2680 l2cap_pi(sk)->num_conf_req++;
2681 break;
2682
2683 case L2CAP_CR_PEND:
2684 l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;
2685 break;
2686
2687 default:
2688 l2cap_chan_del(sk, ECONNREFUSED);
2689 break;
2690 }
2691
2692 bh_unlock_sock(sk);
2693 return 0;
2694 }
2695
2696 static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
2697 {
2698 struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
2699 u16 dcid, flags;
2700 u8 rsp[64];
2701 struct sock *sk;
2702 int len;
2703
2704 dcid = __le16_to_cpu(req->dcid);
2705 flags = __le16_to_cpu(req->flags);
2706
2707 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
2708
2709 sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid);
2710 if (!sk)
2711 return -ENOENT;
2712
2713 if (sk->sk_state == BT_DISCONN)
2714 goto unlock;
2715
2716 /* Reject if config buffer is too small. */
2717 len = cmd_len - sizeof(*req);
2718 if (l2cap_pi(sk)->conf_len + len > sizeof(l2cap_pi(sk)->conf_req)) {
2719 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2720 l2cap_build_conf_rsp(sk, rsp,
2721 L2CAP_CONF_REJECT, flags), rsp);
2722 goto unlock;
2723 }
2724
2725 /* Store config. */
2726 memcpy(l2cap_pi(sk)->conf_req + l2cap_pi(sk)->conf_len, req->data, len);
2727 l2cap_pi(sk)->conf_len += len;
2728
2729 if (flags & 0x0001) {
2730 /* Incomplete config. Send empty response. */
2731 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2732 l2cap_build_conf_rsp(sk, rsp,
2733 L2CAP_CONF_SUCCESS, 0x0001), rsp);
2734 goto unlock;
2735 }
2736
2737 /* Complete config. */
2738 len = l2cap_parse_conf_req(sk, rsp);
2739 if (len < 0) {
2740 l2cap_send_disconn_req(conn, sk);
2741 goto unlock;
2742 }
2743
2744 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2745 l2cap_pi(sk)->num_conf_rsp++;
2746
2747 /* Reset config buffer. */
2748 l2cap_pi(sk)->conf_len = 0;
2749
2750 if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE))
2751 goto unlock;
2752
2753 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
2754 if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_NO_FCS_RECV)
2755 || l2cap_pi(sk)->fcs != L2CAP_FCS_NONE)
2756 l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16;
2757
2758 sk->sk_state = BT_CONNECTED;
2759 l2cap_pi(sk)->next_tx_seq = 0;
2760 l2cap_pi(sk)->expected_ack_seq = 0;
2761 l2cap_pi(sk)->unacked_frames = 0;
2762
2763 setup_timer(&l2cap_pi(sk)->retrans_timer,
2764 l2cap_retrans_timeout, (unsigned long) sk);
2765 setup_timer(&l2cap_pi(sk)->monitor_timer,
2766 l2cap_monitor_timeout, (unsigned long) sk);
2767
2768 __skb_queue_head_init(TX_QUEUE(sk));
2769 __skb_queue_head_init(SREJ_QUEUE(sk));
2770 l2cap_chan_ready(sk);
2771 goto unlock;
2772 }
2773
2774 if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
2775 u8 buf[64];
2776 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2777 l2cap_build_conf_req(sk, buf), buf);
2778 l2cap_pi(sk)->num_conf_req++;
2779 }
2780
2781 unlock:
2782 bh_unlock_sock(sk);
2783 return 0;
2784 }
2785
2786 static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2787 {
2788 struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
2789 u16 scid, flags, result;
2790 struct sock *sk;
2791
2792 scid = __le16_to_cpu(rsp->scid);
2793 flags = __le16_to_cpu(rsp->flags);
2794 result = __le16_to_cpu(rsp->result);
2795
2796 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
2797 scid, flags, result);
2798
2799 sk = l2cap_get_chan_by_scid(&conn->chan_list, scid);
2800 if (!sk)
2801 return 0;
2802
2803 switch (result) {
2804 case L2CAP_CONF_SUCCESS:
2805 break;
2806
2807 case L2CAP_CONF_UNACCEPT:
2808 if (l2cap_pi(sk)->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2809 int len = cmd->len - sizeof(*rsp);
2810 char req[64];
2811
2812 /* throw out any old stored conf requests */
2813 result = L2CAP_CONF_SUCCESS;
2814 len = l2cap_parse_conf_rsp(sk, rsp->data,
2815 len, req, &result);
2816 if (len < 0) {
2817 l2cap_send_disconn_req(conn, sk);
2818 goto done;
2819 }
2820
2821 l2cap_send_cmd(conn, l2cap_get_ident(conn),
2822 L2CAP_CONF_REQ, len, req);
2823 l2cap_pi(sk)->num_conf_req++;
2824 if (result != L2CAP_CONF_SUCCESS)
2825 goto done;
2826 break;
2827 }
2828
2829 default:
2830 sk->sk_state = BT_DISCONN;
2831 sk->sk_err = ECONNRESET;
2832 l2cap_sock_set_timer(sk, HZ * 5);
2833 l2cap_send_disconn_req(conn, sk);
2834 goto done;
2835 }
2836
2837 if (flags & 0x01)
2838 goto done;
2839
2840 l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;
2841
2842 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {
2843 if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_NO_FCS_RECV)
2844 || l2cap_pi(sk)->fcs != L2CAP_FCS_NONE)
2845 l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16;
2846
2847 sk->sk_state = BT_CONNECTED;
2848 l2cap_pi(sk)->expected_tx_seq = 0;
2849 l2cap_pi(sk)->buffer_seq = 0;
2850 l2cap_pi(sk)->num_to_ack = 0;
2851 __skb_queue_head_init(TX_QUEUE(sk));
2852 __skb_queue_head_init(SREJ_QUEUE(sk));
2853 l2cap_chan_ready(sk);
2854 }
2855
2856 done:
2857 bh_unlock_sock(sk);
2858 return 0;
2859 }
2860
2861 static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2862 {
2863 struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
2864 struct l2cap_disconn_rsp rsp;
2865 u16 dcid, scid;
2866 struct sock *sk;
2867
2868 scid = __le16_to_cpu(req->scid);
2869 dcid = __le16_to_cpu(req->dcid);
2870
2871 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
2872
2873 sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid);
2874 if (!sk)
2875 return 0;
2876
2877 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid);
2878 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid);
2879 l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
2880
2881 sk->sk_shutdown = SHUTDOWN_MASK;
2882
2883 skb_queue_purge(TX_QUEUE(sk));
2884 skb_queue_purge(SREJ_QUEUE(sk));
2885 del_timer(&l2cap_pi(sk)->retrans_timer);
2886 del_timer(&l2cap_pi(sk)->monitor_timer);
2887
2888 l2cap_chan_del(sk, ECONNRESET);
2889 bh_unlock_sock(sk);
2890
2891 l2cap_sock_kill(sk);
2892 return 0;
2893 }
2894
2895 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2896 {
2897 struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
2898 u16 dcid, scid;
2899 struct sock *sk;
2900
2901 scid = __le16_to_cpu(rsp->scid);
2902 dcid = __le16_to_cpu(rsp->dcid);
2903
2904 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
2905
2906 sk = l2cap_get_chan_by_scid(&conn->chan_list, scid);
2907 if (!sk)
2908 return 0;
2909
2910 skb_queue_purge(TX_QUEUE(sk));
2911 skb_queue_purge(SREJ_QUEUE(sk));
2912 del_timer(&l2cap_pi(sk)->retrans_timer);
2913 del_timer(&l2cap_pi(sk)->monitor_timer);
2914
2915 l2cap_chan_del(sk, 0);
2916 bh_unlock_sock(sk);
2917
2918 l2cap_sock_kill(sk);
2919 return 0;
2920 }
2921
2922 static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2923 {
2924 struct l2cap_info_req *req = (struct l2cap_info_req *) data;
2925 u16 type;
2926
2927 type = __le16_to_cpu(req->type);
2928
2929 BT_DBG("type 0x%4.4x", type);
2930
2931 if (type == L2CAP_IT_FEAT_MASK) {
2932 u8 buf[8];
2933 u32 feat_mask = l2cap_feat_mask;
2934 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
2935 rsp->type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
2936 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2937 if (enable_ertm)
2938 feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
2939 | L2CAP_FEAT_FCS;
2940 put_unaligned_le32(feat_mask, rsp->data);
2941 l2cap_send_cmd(conn, cmd->ident,
2942 L2CAP_INFO_RSP, sizeof(buf), buf);
2943 } else if (type == L2CAP_IT_FIXED_CHAN) {
2944 u8 buf[12];
2945 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
2946 rsp->type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
2947 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2948 memcpy(buf + 4, l2cap_fixed_chan, 8);
2949 l2cap_send_cmd(conn, cmd->ident,
2950 L2CAP_INFO_RSP, sizeof(buf), buf);
2951 } else {
2952 struct l2cap_info_rsp rsp;
2953 rsp.type = cpu_to_le16(type);
2954 rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
2955 l2cap_send_cmd(conn, cmd->ident,
2956 L2CAP_INFO_RSP, sizeof(rsp), &rsp);
2957 }
2958
2959 return 0;
2960 }
2961
2962 static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2963 {
2964 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
2965 u16 type, result;
2966
2967 type = __le16_to_cpu(rsp->type);
2968 result = __le16_to_cpu(rsp->result);
2969
2970 BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
2971
2972 del_timer(&conn->info_timer);
2973
2974 if (type == L2CAP_IT_FEAT_MASK) {
2975 conn->feat_mask = get_unaligned_le32(rsp->data);
2976
2977 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2978 struct l2cap_info_req req;
2979 req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
2980
2981 conn->info_ident = l2cap_get_ident(conn);
2982
2983 l2cap_send_cmd(conn, conn->info_ident,
2984 L2CAP_INFO_REQ, sizeof(req), &req);
2985 } else {
2986 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2987 conn->info_ident = 0;
2988
2989 l2cap_conn_start(conn);
2990 }
2991 } else if (type == L2CAP_IT_FIXED_CHAN) {
2992 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2993 conn->info_ident = 0;
2994
2995 l2cap_conn_start(conn);
2996 }
2997
2998 return 0;
2999 }
3000
3001 static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
3002 {
3003 u8 *data = skb->data;
3004 int len = skb->len;
3005 struct l2cap_cmd_hdr cmd;
3006 int err = 0;
3007
3008 l2cap_raw_recv(conn, skb);
3009
3010 while (len >= L2CAP_CMD_HDR_SIZE) {
3011 u16 cmd_len;
3012 memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
3013 data += L2CAP_CMD_HDR_SIZE;
3014 len -= L2CAP_CMD_HDR_SIZE;
3015
3016 cmd_len = le16_to_cpu(cmd.len);
3017
3018 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, cmd.ident);
3019
3020 if (cmd_len > len || !cmd.ident) {
3021 BT_DBG("corrupted command");
3022 break;
3023 }
3024
3025 switch (cmd.code) {
3026 case L2CAP_COMMAND_REJ:
3027 l2cap_command_rej(conn, &cmd, data);
3028 break;
3029
3030 case L2CAP_CONN_REQ:
3031 err = l2cap_connect_req(conn, &cmd, data);
3032 break;
3033
3034 case L2CAP_CONN_RSP:
3035 err = l2cap_connect_rsp(conn, &cmd, data);
3036 break;
3037
3038 case L2CAP_CONF_REQ:
3039 err = l2cap_config_req(conn, &cmd, cmd_len, data);
3040 break;
3041
3042 case L2CAP_CONF_RSP:
3043 err = l2cap_config_rsp(conn, &cmd, data);
3044 break;
3045
3046 case L2CAP_DISCONN_REQ:
3047 err = l2cap_disconnect_req(conn, &cmd, data);
3048 break;
3049
3050 case L2CAP_DISCONN_RSP:
3051 err = l2cap_disconnect_rsp(conn, &cmd, data);
3052 break;
3053
3054 case L2CAP_ECHO_REQ:
3055 l2cap_send_cmd(conn, cmd.ident, L2CAP_ECHO_RSP, cmd_len, data);
3056 break;
3057
3058 case L2CAP_ECHO_RSP:
3059 break;
3060
3061 case L2CAP_INFO_REQ:
3062 err = l2cap_information_req(conn, &cmd, data);
3063 break;
3064
3065 case L2CAP_INFO_RSP:
3066 err = l2cap_information_rsp(conn, &cmd, data);
3067 break;
3068
3069 default:
3070 BT_ERR("Unknown signaling command 0x%2.2x", cmd.code);
3071 err = -EINVAL;
3072 break;
3073 }
3074
3075 if (err) {
3076 struct l2cap_cmd_rej rej;
3077 BT_DBG("error %d", err);
3078
3079 /* FIXME: Map err to a valid reason */
3080 rej.reason = cpu_to_le16(0);
3081 l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
3082 }
3083
3084 data += cmd_len;
3085 len -= cmd_len;
3086 }
3087
3088 kfree_skb(skb);
3089 }
3090
3091 static int l2cap_check_fcs(struct l2cap_pinfo *pi, struct sk_buff *skb)
3092 {
3093 u16 our_fcs, rcv_fcs;
3094 int hdr_size = L2CAP_HDR_SIZE + 2;
3095
3096 if (pi->fcs == L2CAP_FCS_CRC16) {
3097 skb_trim(skb, skb->len - 2);
3098 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
3099 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
3100
3101 if (our_fcs != rcv_fcs)
3102 return -EINVAL;
3103 }
3104 return 0;
3105 }
3106
3107 static void l2cap_add_to_srej_queue(struct sock *sk, struct sk_buff *skb, u8 tx_seq, u8 sar)
3108 {
3109 struct sk_buff *next_skb;
3110
3111 bt_cb(skb)->tx_seq = tx_seq;
3112 bt_cb(skb)->sar = sar;
3113
3114 next_skb = skb_peek(SREJ_QUEUE(sk));
3115 if (!next_skb) {
3116 __skb_queue_tail(SREJ_QUEUE(sk), skb);
3117 return;
3118 }
3119
3120 do {
3121 if (bt_cb(next_skb)->tx_seq > tx_seq) {
3122 __skb_queue_before(SREJ_QUEUE(sk), next_skb, skb);
3123 return;
3124 }
3125
3126 if (skb_queue_is_last(SREJ_QUEUE(sk), next_skb))
3127 break;
3128
3129 } while((next_skb = skb_queue_next(SREJ_QUEUE(sk), next_skb)));
3130
3131 __skb_queue_tail(SREJ_QUEUE(sk), skb);
3132 }
3133
3134 static int l2cap_sar_reassembly_sdu(struct sock *sk, struct sk_buff *skb, u16 control)
3135 {
3136 struct l2cap_pinfo *pi = l2cap_pi(sk);
3137 struct sk_buff *_skb;
3138 int err = -EINVAL;
3139
3140 switch (control & L2CAP_CTRL_SAR) {
3141 case L2CAP_SDU_UNSEGMENTED:
3142 if (pi->conn_state & L2CAP_CONN_SAR_SDU) {
3143 kfree_skb(pi->sdu);
3144 break;
3145 }
3146
3147 err = sock_queue_rcv_skb(sk, skb);
3148 if (!err)
3149 return 0;
3150
3151 break;
3152
3153 case L2CAP_SDU_START:
3154 if (pi->conn_state & L2CAP_CONN_SAR_SDU) {
3155 kfree_skb(pi->sdu);
3156 break;
3157 }
3158
3159 pi->sdu_len = get_unaligned_le16(skb->data);
3160 skb_pull(skb, 2);
3161
3162 pi->sdu = bt_skb_alloc(pi->sdu_len, GFP_ATOMIC);
3163 if (!pi->sdu) {
3164 err = -ENOMEM;
3165 break;
3166 }
3167
3168 memcpy(skb_put(pi->sdu, skb->len), skb->data, skb->len);
3169
3170 pi->conn_state |= L2CAP_CONN_SAR_SDU;
3171 pi->partial_sdu_len = skb->len;
3172 err = 0;
3173 break;
3174
3175 case L2CAP_SDU_CONTINUE:
3176 if (!(pi->conn_state & L2CAP_CONN_SAR_SDU))
3177 break;
3178
3179 memcpy(skb_put(pi->sdu, skb->len), skb->data, skb->len);
3180
3181 pi->partial_sdu_len += skb->len;
3182 if (pi->partial_sdu_len > pi->sdu_len)
3183 kfree_skb(pi->sdu);
3184 else
3185 err = 0;
3186
3187 break;
3188
3189 case L2CAP_SDU_END:
3190 if (!(pi->conn_state & L2CAP_CONN_SAR_SDU))
3191 break;
3192
3193 memcpy(skb_put(pi->sdu, skb->len), skb->data, skb->len);
3194
3195 pi->conn_state &= ~L2CAP_CONN_SAR_SDU;
3196 pi->partial_sdu_len += skb->len;
3197
3198 if (pi->partial_sdu_len == pi->sdu_len) {
3199 _skb = skb_clone(pi->sdu, GFP_ATOMIC);
3200 err = sock_queue_rcv_skb(sk, _skb);
3201 if (err < 0)
3202 kfree_skb(_skb);
3203 }
3204 kfree_skb(pi->sdu);
3205 err = 0;
3206
3207 break;
3208 }
3209
3210 kfree_skb(skb);
3211 return err;
3212 }
3213
3214 static void l2cap_check_srej_gap(struct sock *sk, u8 tx_seq)
3215 {
3216 struct sk_buff *skb;
3217 u16 control = 0;
3218
3219 while((skb = skb_peek(SREJ_QUEUE(sk)))) {
3220 if (bt_cb(skb)->tx_seq != tx_seq)
3221 break;
3222
3223 skb = skb_dequeue(SREJ_QUEUE(sk));
3224 control |= bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3225 l2cap_sar_reassembly_sdu(sk, skb, control);
3226 l2cap_pi(sk)->buffer_seq_srej =
3227 (l2cap_pi(sk)->buffer_seq_srej + 1) % 64;
3228 tx_seq++;
3229 }
3230 }
3231
3232 static void l2cap_resend_srejframe(struct sock *sk, u8 tx_seq)
3233 {
3234 struct l2cap_pinfo *pi = l2cap_pi(sk);
3235 struct srej_list *l, *tmp;
3236 u16 control;
3237
3238 list_for_each_entry_safe(l,tmp, SREJ_LIST(sk), list) {
3239 if (l->tx_seq == tx_seq) {
3240 list_del(&l->list);
3241 kfree(l);
3242 return;
3243 }
3244 control = L2CAP_SUPER_SELECT_REJECT;
3245 control |= l->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3246 l2cap_send_sframe(pi, control);
3247 list_del(&l->list);
3248 list_add_tail(&l->list, SREJ_LIST(sk));
3249 }
3250 }
3251
3252 static void l2cap_send_srejframe(struct sock *sk, u8 tx_seq)
3253 {
3254 struct l2cap_pinfo *pi = l2cap_pi(sk);
3255 struct srej_list *new;
3256 u16 control;
3257
3258 while (tx_seq != pi->expected_tx_seq) {
3259 control = L2CAP_SUPER_SELECT_REJECT;
3260 control |= pi->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3261 if (pi->conn_state & L2CAP_CONN_SEND_PBIT) {
3262 control |= L2CAP_CTRL_POLL;
3263 pi->conn_state &= ~L2CAP_CONN_SEND_PBIT;
3264 }
3265 l2cap_send_sframe(pi, control);
3266
3267 new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3268 new->tx_seq = pi->expected_tx_seq++;
3269 list_add_tail(&new->list, SREJ_LIST(sk));
3270 }
3271 pi->expected_tx_seq++;
3272 }
3273
3274 static inline int l2cap_data_channel_iframe(struct sock *sk, u16 rx_control, struct sk_buff *skb)
3275 {
3276 struct l2cap_pinfo *pi = l2cap_pi(sk);
3277 u8 tx_seq = __get_txseq(rx_control);
3278 u16 tx_control = 0;
3279 u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3280 int err = 0;
3281
3282 BT_DBG("sk %p rx_control 0x%4.4x len %d", sk, rx_control, skb->len);
3283
3284 if (tx_seq == pi->expected_tx_seq)
3285 goto expected;
3286
3287 if (pi->conn_state & L2CAP_CONN_SREJ_SENT) {
3288 struct srej_list *first;
3289
3290 first = list_first_entry(SREJ_LIST(sk),
3291 struct srej_list, list);
3292 if (tx_seq == first->tx_seq) {
3293 l2cap_add_to_srej_queue(sk, skb, tx_seq, sar);
3294 l2cap_check_srej_gap(sk, tx_seq);
3295
3296 list_del(&first->list);
3297 kfree(first);
3298
3299 if (list_empty(SREJ_LIST(sk))) {
3300 pi->buffer_seq = pi->buffer_seq_srej;
3301 pi->conn_state &= ~L2CAP_CONN_SREJ_SENT;
3302 }
3303 } else {
3304 struct srej_list *l;
3305 l2cap_add_to_srej_queue(sk, skb, tx_seq, sar);
3306
3307 list_for_each_entry(l, SREJ_LIST(sk), list) {
3308 if (l->tx_seq == tx_seq) {
3309 l2cap_resend_srejframe(sk, tx_seq);
3310 return 0;
3311 }
3312 }
3313 l2cap_send_srejframe(sk, tx_seq);
3314 }
3315 } else {
3316 pi->conn_state |= L2CAP_CONN_SREJ_SENT;
3317
3318 INIT_LIST_HEAD(SREJ_LIST(sk));
3319 pi->buffer_seq_srej = pi->buffer_seq;
3320
3321 __skb_queue_head_init(SREJ_QUEUE(sk));
3322 l2cap_add_to_srej_queue(sk, skb, tx_seq, sar);
3323
3324 pi->conn_state |= L2CAP_CONN_SEND_PBIT;
3325
3326 l2cap_send_srejframe(sk, tx_seq);
3327 }
3328 return 0;
3329
3330 expected:
3331 pi->expected_tx_seq = (pi->expected_tx_seq + 1) % 64;
3332
3333 if (pi->conn_state & L2CAP_CONN_SREJ_SENT) {
3334 l2cap_add_to_srej_queue(sk, skb, tx_seq, sar);
3335 return 0;
3336 }
3337
3338 pi->buffer_seq = (pi->buffer_seq + 1) % 64;
3339
3340 err = l2cap_sar_reassembly_sdu(sk, skb, rx_control);
3341 if (err < 0)
3342 return err;
3343
3344 pi->num_to_ack = (pi->num_to_ack + 1) % L2CAP_DEFAULT_NUM_TO_ACK;
3345 if (pi->num_to_ack == L2CAP_DEFAULT_NUM_TO_ACK - 1) {
3346 tx_control |= L2CAP_SUPER_RCV_READY;
3347 tx_control |= pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3348 l2cap_send_sframe(pi, tx_control);
3349 }
3350 return 0;
3351 }
3352
3353 static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, struct sk_buff *skb)
3354 {
3355 struct l2cap_pinfo *pi = l2cap_pi(sk);
3356 u8 tx_seq = __get_reqseq(rx_control);
3357
3358 BT_DBG("sk %p rx_control 0x%4.4x len %d", sk, rx_control, skb->len);
3359
3360 switch (rx_control & L2CAP_CTRL_SUPERVISE) {
3361 case L2CAP_SUPER_RCV_READY:
3362 if (rx_control & L2CAP_CTRL_POLL) {
3363 u16 control = L2CAP_CTRL_FINAL;
3364 control |= L2CAP_SUPER_RCV_READY |
3365 (pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT);
3366 l2cap_send_sframe(l2cap_pi(sk), control);
3367 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3368
3369 } else if (rx_control & L2CAP_CTRL_FINAL) {
3370 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3371 pi->expected_ack_seq = tx_seq;
3372 l2cap_drop_acked_frames(sk);
3373
3374 if (!(pi->conn_state & L2CAP_CONN_WAIT_F))
3375 break;
3376
3377 pi->conn_state &= ~L2CAP_CONN_WAIT_F;
3378 del_timer(&pi->monitor_timer);
3379
3380 if (pi->unacked_frames > 0)
3381 __mod_retrans_timer();
3382 } else {
3383 pi->expected_ack_seq = tx_seq;
3384 l2cap_drop_acked_frames(sk);
3385
3386 if ((pi->conn_state & L2CAP_CONN_REMOTE_BUSY)
3387 && (pi->unacked_frames > 0))
3388 __mod_retrans_timer();
3389
3390 l2cap_ertm_send(sk);
3391 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3392 }
3393 break;
3394
3395 case L2CAP_SUPER_REJECT:
3396 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3397
3398 pi->expected_ack_seq = __get_reqseq(rx_control);
3399 l2cap_drop_acked_frames(sk);
3400
3401 sk->sk_send_head = TX_QUEUE(sk)->next;
3402 pi->next_tx_seq = pi->expected_ack_seq;
3403
3404 l2cap_ertm_send(sk);
3405
3406 break;
3407
3408 case L2CAP_SUPER_SELECT_REJECT:
3409 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3410
3411 if (rx_control & L2CAP_CTRL_POLL) {
3412 l2cap_retransmit_frame(sk, tx_seq);
3413 pi->expected_ack_seq = tx_seq;
3414 l2cap_drop_acked_frames(sk);
3415 l2cap_ertm_send(sk);
3416 if (pi->conn_state & L2CAP_CONN_WAIT_F) {
3417 pi->srej_save_reqseq = tx_seq;
3418 pi->conn_state |= L2CAP_CONN_SREJ_ACT;
3419 }
3420 } else if (rx_control & L2CAP_CTRL_FINAL) {
3421 if ((pi->conn_state & L2CAP_CONN_SREJ_ACT) &&
3422 pi->srej_save_reqseq == tx_seq)
3423 pi->srej_save_reqseq &= ~L2CAP_CONN_SREJ_ACT;
3424 else
3425 l2cap_retransmit_frame(sk, tx_seq);
3426 }
3427 else {
3428 l2cap_retransmit_frame(sk, tx_seq);
3429 if (pi->conn_state & L2CAP_CONN_WAIT_F) {
3430 pi->srej_save_reqseq = tx_seq;
3431 pi->conn_state |= L2CAP_CONN_SREJ_ACT;
3432 }
3433 }
3434 break;
3435
3436 case L2CAP_SUPER_RCV_NOT_READY:
3437 pi->conn_state |= L2CAP_CONN_REMOTE_BUSY;
3438 pi->expected_ack_seq = tx_seq;
3439 l2cap_drop_acked_frames(sk);
3440
3441 del_timer(&l2cap_pi(sk)->retrans_timer);
3442 if (rx_control & L2CAP_CTRL_POLL) {
3443 u16 control = L2CAP_CTRL_FINAL;
3444 l2cap_send_rr_or_rnr(l2cap_pi(sk), control);
3445 }
3446 break;
3447 }
3448
3449 return 0;
3450 }
3451
3452 static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
3453 {
3454 struct sock *sk;
3455 struct l2cap_pinfo *pi;
3456 u16 control, len;
3457 u8 tx_seq;
3458 int err;
3459
3460 sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
3461 if (!sk) {
3462 BT_DBG("unknown cid 0x%4.4x", cid);
3463 goto drop;
3464 }
3465
3466 pi = l2cap_pi(sk);
3467
3468 BT_DBG("sk %p, len %d", sk, skb->len);
3469
3470 if (sk->sk_state != BT_CONNECTED)
3471 goto drop;
3472
3473 switch (pi->mode) {
3474 case L2CAP_MODE_BASIC:
3475 /* If socket recv buffers overflows we drop data here
3476 * which is *bad* because L2CAP has to be reliable.
3477 * But we don't have any other choice. L2CAP doesn't
3478 * provide flow control mechanism. */
3479
3480 if (pi->imtu < skb->len)
3481 goto drop;
3482
3483 if (!sock_queue_rcv_skb(sk, skb))
3484 goto done;
3485 break;
3486
3487 case L2CAP_MODE_ERTM:
3488 control = get_unaligned_le16(skb->data);
3489 skb_pull(skb, 2);
3490 len = skb->len;
3491
3492 if (__is_sar_start(control))
3493 len -= 2;
3494
3495 if (pi->fcs == L2CAP_FCS_CRC16)
3496 len -= 2;
3497
3498 /*
3499 * We can just drop the corrupted I-frame here.
3500 * Receiver will miss it and start proper recovery
3501 * procedures and ask retransmission.
3502 */
3503 if (len > L2CAP_DEFAULT_MAX_PDU_SIZE)
3504 goto drop;
3505
3506 if (l2cap_check_fcs(pi, skb))
3507 goto drop;
3508
3509 if (__is_iframe(control))
3510 err = l2cap_data_channel_iframe(sk, control, skb);
3511 else
3512 err = l2cap_data_channel_sframe(sk, control, skb);
3513
3514 if (!err)
3515 goto done;
3516 break;
3517
3518 case L2CAP_MODE_STREAMING:
3519 control = get_unaligned_le16(skb->data);
3520 skb_pull(skb, 2);
3521 len = skb->len;
3522
3523 if (__is_sar_start(control))
3524 len -= 2;
3525
3526 if (pi->fcs == L2CAP_FCS_CRC16)
3527 len -= 2;
3528
3529 if (len > L2CAP_DEFAULT_MAX_PDU_SIZE || __is_sframe(control))
3530 goto drop;
3531
3532 if (l2cap_check_fcs(pi, skb))
3533 goto drop;
3534
3535 tx_seq = __get_txseq(control);
3536
3537 if (pi->expected_tx_seq == tx_seq)
3538 pi->expected_tx_seq = (pi->expected_tx_seq + 1) % 64;
3539 else
3540 pi->expected_tx_seq = tx_seq + 1;
3541
3542 err = l2cap_sar_reassembly_sdu(sk, skb, control);
3543
3544 goto done;
3545
3546 default:
3547 BT_DBG("sk %p: bad mode 0x%2.2x", sk, l2cap_pi(sk)->mode);
3548 break;
3549 }
3550
3551 drop:
3552 kfree_skb(skb);
3553
3554 done:
3555 if (sk)
3556 bh_unlock_sock(sk);
3557
3558 return 0;
3559 }
3560
3561 static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
3562 {
3563 struct sock *sk;
3564
3565 sk = l2cap_get_sock_by_psm(0, psm, conn->src);
3566 if (!sk)
3567 goto drop;
3568
3569 BT_DBG("sk %p, len %d", sk, skb->len);
3570
3571 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_CONNECTED)
3572 goto drop;
3573
3574 if (l2cap_pi(sk)->imtu < skb->len)
3575 goto drop;
3576
3577 if (!sock_queue_rcv_skb(sk, skb))
3578 goto done;
3579
3580 drop:
3581 kfree_skb(skb);
3582
3583 done:
3584 if (sk)
3585 bh_unlock_sock(sk);
3586 return 0;
3587 }
3588
3589 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
3590 {
3591 struct l2cap_hdr *lh = (void *) skb->data;
3592 u16 cid, len;
3593 __le16 psm;
3594
3595 skb_pull(skb, L2CAP_HDR_SIZE);
3596 cid = __le16_to_cpu(lh->cid);
3597 len = __le16_to_cpu(lh->len);
3598
3599 if (len != skb->len) {
3600 kfree_skb(skb);
3601 return;
3602 }
3603
3604 BT_DBG("len %d, cid 0x%4.4x", len, cid);
3605
3606 switch (cid) {
3607 case L2CAP_CID_SIGNALING:
3608 l2cap_sig_channel(conn, skb);
3609 break;
3610
3611 case L2CAP_CID_CONN_LESS:
3612 psm = get_unaligned_le16(skb->data);
3613 skb_pull(skb, 2);
3614 l2cap_conless_channel(conn, psm, skb);
3615 break;
3616
3617 default:
3618 l2cap_data_channel(conn, cid, skb);
3619 break;
3620 }
3621 }
3622
3623 /* ---- L2CAP interface with lower layer (HCI) ---- */
3624
3625 static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3626 {
3627 int exact = 0, lm1 = 0, lm2 = 0;
3628 register struct sock *sk;
3629 struct hlist_node *node;
3630
3631 if (type != ACL_LINK)
3632 return 0;
3633
3634 BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
3635
3636 /* Find listening sockets and check their link_mode */
3637 read_lock(&l2cap_sk_list.lock);
3638 sk_for_each(sk, node, &l2cap_sk_list.head) {
3639 if (sk->sk_state != BT_LISTEN)
3640 continue;
3641
3642 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
3643 lm1 |= HCI_LM_ACCEPT;
3644 if (l2cap_pi(sk)->role_switch)
3645 lm1 |= HCI_LM_MASTER;
3646 exact++;
3647 } else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
3648 lm2 |= HCI_LM_ACCEPT;
3649 if (l2cap_pi(sk)->role_switch)
3650 lm2 |= HCI_LM_MASTER;
3651 }
3652 }
3653 read_unlock(&l2cap_sk_list.lock);
3654
3655 return exact ? lm1 : lm2;
3656 }
3657
3658 static int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
3659 {
3660 struct l2cap_conn *conn;
3661
3662 BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
3663
3664 if (hcon->type != ACL_LINK)
3665 return 0;
3666
3667 if (!status) {
3668 conn = l2cap_conn_add(hcon, status);
3669 if (conn)
3670 l2cap_conn_ready(conn);
3671 } else
3672 l2cap_conn_del(hcon, bt_err(status));
3673
3674 return 0;
3675 }
3676
3677 static int l2cap_disconn_ind(struct hci_conn *hcon)
3678 {
3679 struct l2cap_conn *conn = hcon->l2cap_data;
3680
3681 BT_DBG("hcon %p", hcon);
3682
3683 if (hcon->type != ACL_LINK || !conn)
3684 return 0x13;
3685
3686 return conn->disc_reason;
3687 }
3688
3689 static int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
3690 {
3691 BT_DBG("hcon %p reason %d", hcon, reason);
3692
3693 if (hcon->type != ACL_LINK)
3694 return 0;
3695
3696 l2cap_conn_del(hcon, bt_err(reason));
3697
3698 return 0;
3699 }
3700
3701 static inline void l2cap_check_encryption(struct sock *sk, u8 encrypt)
3702 {
3703 if (sk->sk_type != SOCK_SEQPACKET)
3704 return;
3705
3706 if (encrypt == 0x00) {
3707 if (l2cap_pi(sk)->sec_level == BT_SECURITY_MEDIUM) {
3708 l2cap_sock_clear_timer(sk);
3709 l2cap_sock_set_timer(sk, HZ * 5);
3710 } else if (l2cap_pi(sk)->sec_level == BT_SECURITY_HIGH)
3711 __l2cap_sock_close(sk, ECONNREFUSED);
3712 } else {
3713 if (l2cap_pi(sk)->sec_level == BT_SECURITY_MEDIUM)
3714 l2cap_sock_clear_timer(sk);
3715 }
3716 }
3717
3718 static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
3719 {
3720 struct l2cap_chan_list *l;
3721 struct l2cap_conn *conn = hcon->l2cap_data;
3722 struct sock *sk;
3723
3724 if (!conn)
3725 return 0;
3726
3727 l = &conn->chan_list;
3728
3729 BT_DBG("conn %p", conn);
3730
3731 read_lock(&l->lock);
3732
3733 for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
3734 bh_lock_sock(sk);
3735
3736 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_CONNECT_PEND) {
3737 bh_unlock_sock(sk);
3738 continue;
3739 }
3740
3741 if (!status && (sk->sk_state == BT_CONNECTED ||
3742 sk->sk_state == BT_CONFIG)) {
3743 l2cap_check_encryption(sk, encrypt);
3744 bh_unlock_sock(sk);
3745 continue;
3746 }
3747
3748 if (sk->sk_state == BT_CONNECT) {
3749 if (!status) {
3750 struct l2cap_conn_req req;
3751 req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
3752 req.psm = l2cap_pi(sk)->psm;
3753
3754 l2cap_pi(sk)->ident = l2cap_get_ident(conn);
3755
3756 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
3757 L2CAP_CONN_REQ, sizeof(req), &req);
3758 } else {
3759 l2cap_sock_clear_timer(sk);
3760 l2cap_sock_set_timer(sk, HZ / 10);
3761 }
3762 } else if (sk->sk_state == BT_CONNECT2) {
3763 struct l2cap_conn_rsp rsp;
3764 __u16 result;
3765
3766 if (!status) {
3767 sk->sk_state = BT_CONFIG;
3768 result = L2CAP_CR_SUCCESS;
3769 } else {
3770 sk->sk_state = BT_DISCONN;
3771 l2cap_sock_set_timer(sk, HZ / 10);
3772 result = L2CAP_CR_SEC_BLOCK;
3773 }
3774
3775 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid);
3776 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid);
3777 rsp.result = cpu_to_le16(result);
3778 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
3779 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
3780 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
3781 }
3782
3783 bh_unlock_sock(sk);
3784 }
3785
3786 read_unlock(&l->lock);
3787
3788 return 0;
3789 }
3790
3791 static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
3792 {
3793 struct l2cap_conn *conn = hcon->l2cap_data;
3794
3795 if (!conn && !(conn = l2cap_conn_add(hcon, 0)))
3796 goto drop;
3797
3798 BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
3799
3800 if (flags & ACL_START) {
3801 struct l2cap_hdr *hdr;
3802 int len;
3803
3804 if (conn->rx_len) {
3805 BT_ERR("Unexpected start frame (len %d)", skb->len);
3806 kfree_skb(conn->rx_skb);
3807 conn->rx_skb = NULL;
3808 conn->rx_len = 0;
3809 l2cap_conn_unreliable(conn, ECOMM);
3810 }
3811
3812 if (skb->len < 2) {
3813 BT_ERR("Frame is too short (len %d)", skb->len);
3814 l2cap_conn_unreliable(conn, ECOMM);
3815 goto drop;
3816 }
3817
3818 hdr = (struct l2cap_hdr *) skb->data;
3819 len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
3820
3821 if (len == skb->len) {
3822 /* Complete frame received */
3823 l2cap_recv_frame(conn, skb);
3824 return 0;
3825 }
3826
3827 BT_DBG("Start: total len %d, frag len %d", len, skb->len);
3828
3829 if (skb->len > len) {
3830 BT_ERR("Frame is too long (len %d, expected len %d)",
3831 skb->len, len);
3832 l2cap_conn_unreliable(conn, ECOMM);
3833 goto drop;
3834 }
3835
3836 /* Allocate skb for the complete frame (with header) */
3837 conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
3838 if (!conn->rx_skb)
3839 goto drop;
3840
3841 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
3842 skb->len);
3843 conn->rx_len = len - skb->len;
3844 } else {
3845 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
3846
3847 if (!conn->rx_len) {
3848 BT_ERR("Unexpected continuation frame (len %d)", skb->len);
3849 l2cap_conn_unreliable(conn, ECOMM);
3850 goto drop;
3851 }
3852
3853 if (skb->len > conn->rx_len) {
3854 BT_ERR("Fragment is too long (len %d, expected %d)",
3855 skb->len, conn->rx_len);
3856 kfree_skb(conn->rx_skb);
3857 conn->rx_skb = NULL;
3858 conn->rx_len = 0;
3859 l2cap_conn_unreliable(conn, ECOMM);
3860 goto drop;
3861 }
3862
3863 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
3864 skb->len);
3865 conn->rx_len -= skb->len;
3866
3867 if (!conn->rx_len) {
3868 /* Complete frame received */
3869 l2cap_recv_frame(conn, conn->rx_skb);
3870 conn->rx_skb = NULL;
3871 }
3872 }
3873
3874 drop:
3875 kfree_skb(skb);
3876 return 0;
3877 }
3878
3879 static ssize_t l2cap_sysfs_show(struct class *dev, char *buf)
3880 {
3881 struct sock *sk;
3882 struct hlist_node *node;
3883 char *str = buf;
3884
3885 read_lock_bh(&l2cap_sk_list.lock);
3886
3887 sk_for_each(sk, node, &l2cap_sk_list.head) {
3888 struct l2cap_pinfo *pi = l2cap_pi(sk);
3889
3890 str += sprintf(str, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d\n",
3891 batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
3892 sk->sk_state, __le16_to_cpu(pi->psm), pi->scid,
3893 pi->dcid, pi->imtu, pi->omtu, pi->sec_level);
3894 }
3895
3896 read_unlock_bh(&l2cap_sk_list.lock);
3897
3898 return str - buf;
3899 }
3900
3901 static CLASS_ATTR(l2cap, S_IRUGO, l2cap_sysfs_show, NULL);
3902
3903 static const struct proto_ops l2cap_sock_ops = {
3904 .family = PF_BLUETOOTH,
3905 .owner = THIS_MODULE,
3906 .release = l2cap_sock_release,
3907 .bind = l2cap_sock_bind,
3908 .connect = l2cap_sock_connect,
3909 .listen = l2cap_sock_listen,
3910 .accept = l2cap_sock_accept,
3911 .getname = l2cap_sock_getname,
3912 .sendmsg = l2cap_sock_sendmsg,
3913 .recvmsg = l2cap_sock_recvmsg,
3914 .poll = bt_sock_poll,
3915 .ioctl = bt_sock_ioctl,
3916 .mmap = sock_no_mmap,
3917 .socketpair = sock_no_socketpair,
3918 .shutdown = l2cap_sock_shutdown,
3919 .setsockopt = l2cap_sock_setsockopt,
3920 .getsockopt = l2cap_sock_getsockopt
3921 };
3922
3923 static const struct net_proto_family l2cap_sock_family_ops = {
3924 .family = PF_BLUETOOTH,
3925 .owner = THIS_MODULE,
3926 .create = l2cap_sock_create,
3927 };
3928
3929 static struct hci_proto l2cap_hci_proto = {
3930 .name = "L2CAP",
3931 .id = HCI_PROTO_L2CAP,
3932 .connect_ind = l2cap_connect_ind,
3933 .connect_cfm = l2cap_connect_cfm,
3934 .disconn_ind = l2cap_disconn_ind,
3935 .disconn_cfm = l2cap_disconn_cfm,
3936 .security_cfm = l2cap_security_cfm,
3937 .recv_acldata = l2cap_recv_acldata
3938 };
3939
3940 static int __init l2cap_init(void)
3941 {
3942 int err;
3943
3944 err = proto_register(&l2cap_proto, 0);
3945 if (err < 0)
3946 return err;
3947
3948 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
3949 if (err < 0) {
3950 BT_ERR("L2CAP socket registration failed");
3951 goto error;
3952 }
3953
3954 err = hci_register_proto(&l2cap_hci_proto);
3955 if (err < 0) {
3956 BT_ERR("L2CAP protocol registration failed");
3957 bt_sock_unregister(BTPROTO_L2CAP);
3958 goto error;
3959 }
3960
3961 if (class_create_file(bt_class, &class_attr_l2cap) < 0)
3962 BT_ERR("Failed to create L2CAP info file");
3963
3964 BT_INFO("L2CAP ver %s", VERSION);
3965 BT_INFO("L2CAP socket layer initialized");
3966
3967 return 0;
3968
3969 error:
3970 proto_unregister(&l2cap_proto);
3971 return err;
3972 }
3973
3974 static void __exit l2cap_exit(void)
3975 {
3976 class_remove_file(bt_class, &class_attr_l2cap);
3977
3978 if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
3979 BT_ERR("L2CAP socket unregistration failed");
3980
3981 if (hci_unregister_proto(&l2cap_hci_proto) < 0)
3982 BT_ERR("L2CAP protocol unregistration failed");
3983
3984 proto_unregister(&l2cap_proto);
3985 }
3986
3987 void l2cap_load(void)
3988 {
3989 /* Dummy function to trigger automatic L2CAP module loading by
3990 * other modules that use L2CAP sockets but don't use any other
3991 * symbols from it. */
3992 return;
3993 }
3994 EXPORT_SYMBOL(l2cap_load);
3995
3996 module_init(l2cap_init);
3997 module_exit(l2cap_exit);
3998
3999 module_param(enable_ertm, bool, 0644);
4000 MODULE_PARM_DESC(enable_ertm, "Enable enhanced retransmission mode");
4001
4002 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
4003 MODULE_DESCRIPTION("Bluetooth L2CAP ver " VERSION);
4004 MODULE_VERSION(VERSION);
4005 MODULE_LICENSE("GPL");
4006 MODULE_ALIAS("bt-proto-0");