1 /* 2 BlueZ - Bluetooth protocol stack for Linux 3 Copyright (C) 2000-2001 Qualcomm Incorporated 4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org> 5 Copyright (C) 2010 Google Inc. 6 Copyright (C) 2011 ProFUSION Embedded Systems 7 Copyright (c) 2012 Code Aurora Forum. All rights reserved. 8 9 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 10 11 This program is free software; you can redistribute it and/or modify 12 it under the terms of the GNU General Public License version 2 as 13 published by the Free Software Foundation; 14 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 18 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 19 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 23 24 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 25 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 26 SOFTWARE IS DISCLAIMED. 27 */ 28 29 /* Bluetooth L2CAP core. */ 30 31 #include <linux/module.h> 32 33 #include <linux/debugfs.h> 34 #include <linux/crc16.h> 35 36 #include <net/bluetooth/bluetooth.h> 37 #include <net/bluetooth/hci_core.h> 38 #include <net/bluetooth/l2cap.h> 39 #include <net/bluetooth/smp.h> 40 #include <net/bluetooth/a2mp.h> 41 #include <net/bluetooth/amp.h> 42 43 bool disable_ertm; 44 45 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN; 46 static u8 l2cap_fixed_chan[8] = { L2CAP_FC_L2CAP, }; 47 48 static LIST_HEAD(chan_list); 49 static DEFINE_RWLOCK(chan_list_lock); 50 51 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, 52 u8 code, u8 ident, u16 dlen, void *data); 53 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, 54 void *data); 55 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data); 56 static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err); 57 58 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control, 59 struct sk_buff_head *skbs, u8 event); 60 61 /* ---- L2CAP channels ---- */ 62 63 static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, 64 u16 cid) 65 { 66 struct l2cap_chan *c; 67 68 list_for_each_entry(c, &conn->chan_l, list) { 69 if (c->dcid == cid) 70 return c; 71 } 72 return NULL; 73 } 74 75 static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, 76 u16 cid) 77 { 78 struct l2cap_chan *c; 79 80 list_for_each_entry(c, &conn->chan_l, list) { 81 if (c->scid == cid) 82 return c; 83 } 84 return NULL; 85 } 86 87 /* Find channel with given SCID. 88 * Returns locked channel. */ 89 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, 90 u16 cid) 91 { 92 struct l2cap_chan *c; 93 94 mutex_lock(&conn->chan_lock); 95 c = __l2cap_get_chan_by_scid(conn, cid); 96 if (c) 97 l2cap_chan_lock(c); 98 mutex_unlock(&conn->chan_lock); 99 100 return c; 101 } 102 103 /* Find channel with given DCID. 104 * Returns locked channel. 105 */ 106 static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn, 107 u16 cid) 108 { 109 struct l2cap_chan *c; 110 111 mutex_lock(&conn->chan_lock); 112 c = __l2cap_get_chan_by_dcid(conn, cid); 113 if (c) 114 l2cap_chan_lock(c); 115 mutex_unlock(&conn->chan_lock); 116 117 return c; 118 } 119 120 static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, 121 u8 ident) 122 { 123 struct l2cap_chan *c; 124 125 list_for_each_entry(c, &conn->chan_l, list) { 126 if (c->ident == ident) 127 return c; 128 } 129 return NULL; 130 } 131 132 static struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn, 133 u8 ident) 134 { 135 struct l2cap_chan *c; 136 137 mutex_lock(&conn->chan_lock); 138 c = __l2cap_get_chan_by_ident(conn, ident); 139 if (c) 140 l2cap_chan_lock(c); 141 mutex_unlock(&conn->chan_lock); 142 143 return c; 144 } 145 146 static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src) 147 { 148 struct l2cap_chan *c; 149 150 list_for_each_entry(c, &chan_list, global_l) { 151 if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src)) 152 return c; 153 } 154 return NULL; 155 } 156 157 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm) 158 { 159 int err; 160 161 write_lock(&chan_list_lock); 162 163 if (psm && __l2cap_global_chan_by_addr(psm, src)) { 164 err = -EADDRINUSE; 165 goto done; 166 } 167 168 if (psm) { 169 chan->psm = psm; 170 chan->sport = psm; 171 err = 0; 172 } else { 173 u16 p; 174 175 err = -EINVAL; 176 for (p = 0x1001; p < 0x1100; p += 2) 177 if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) { 178 chan->psm = cpu_to_le16(p); 179 chan->sport = cpu_to_le16(p); 180 err = 0; 181 break; 182 } 183 } 184 185 done: 186 write_unlock(&chan_list_lock); 187 return err; 188 } 189 190 int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid) 191 { 192 write_lock(&chan_list_lock); 193 194 chan->scid = scid; 195 196 write_unlock(&chan_list_lock); 197 198 return 0; 199 } 200 201 static u16 l2cap_alloc_cid(struct l2cap_conn *conn) 202 { 203 u16 cid = L2CAP_CID_DYN_START; 204 205 for (; cid < L2CAP_CID_DYN_END; cid++) { 206 if (!__l2cap_get_chan_by_scid(conn, cid)) 207 return cid; 208 } 209 210 return 0; 211 } 212 213 static void __l2cap_state_change(struct l2cap_chan *chan, int state) 214 { 215 BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state), 216 state_to_string(state)); 217 218 chan->state = state; 219 chan->ops->state_change(chan, state); 220 } 221 222 static void l2cap_state_change(struct l2cap_chan *chan, int state) 223 { 224 struct sock *sk = chan->sk; 225 226 lock_sock(sk); 227 __l2cap_state_change(chan, state); 228 release_sock(sk); 229 } 230 231 static inline void __l2cap_chan_set_err(struct l2cap_chan *chan, int err) 232 { 233 struct sock *sk = chan->sk; 234 235 sk->sk_err = err; 236 } 237 238 static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err) 239 { 240 struct sock *sk = chan->sk; 241 242 lock_sock(sk); 243 __l2cap_chan_set_err(chan, err); 244 release_sock(sk); 245 } 246 247 static void __set_retrans_timer(struct l2cap_chan *chan) 248 { 249 if (!delayed_work_pending(&chan->monitor_timer) && 250 chan->retrans_timeout) { 251 l2cap_set_timer(chan, &chan->retrans_timer, 252 msecs_to_jiffies(chan->retrans_timeout)); 253 } 254 } 255 256 static void __set_monitor_timer(struct l2cap_chan *chan) 257 { 258 __clear_retrans_timer(chan); 259 if (chan->monitor_timeout) { 260 l2cap_set_timer(chan, &chan->monitor_timer, 261 msecs_to_jiffies(chan->monitor_timeout)); 262 } 263 } 264 265 static struct sk_buff *l2cap_ertm_seq_in_queue(struct sk_buff_head *head, 266 u16 seq) 267 { 268 struct sk_buff *skb; 269 270 skb_queue_walk(head, skb) { 271 if (bt_cb(skb)->control.txseq == seq) 272 return skb; 273 } 274 275 return NULL; 276 } 277 278 /* ---- L2CAP sequence number lists ---- */ 279 280 /* For ERTM, ordered lists of sequence numbers must be tracked for 281 * SREJ requests that are received and for frames that are to be 282 * retransmitted. These seq_list functions implement a singly-linked 283 * list in an array, where membership in the list can also be checked 284 * in constant time. Items can also be added to the tail of the list 285 * and removed from the head in constant time, without further memory 286 * allocs or frees. 287 */ 288 289 static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size) 290 { 291 size_t alloc_size, i; 292 293 /* Allocated size is a power of 2 to map sequence numbers 294 * (which may be up to 14 bits) in to a smaller array that is 295 * sized for the negotiated ERTM transmit windows. 296 */ 297 alloc_size = roundup_pow_of_two(size); 298 299 seq_list->list = kmalloc(sizeof(u16) * alloc_size, GFP_KERNEL); 300 if (!seq_list->list) 301 return -ENOMEM; 302 303 seq_list->mask = alloc_size - 1; 304 seq_list->head = L2CAP_SEQ_LIST_CLEAR; 305 seq_list->tail = L2CAP_SEQ_LIST_CLEAR; 306 for (i = 0; i < alloc_size; i++) 307 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR; 308 309 return 0; 310 } 311 312 static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list) 313 { 314 kfree(seq_list->list); 315 } 316 317 static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list, 318 u16 seq) 319 { 320 /* Constant-time check for list membership */ 321 return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR; 322 } 323 324 static u16 l2cap_seq_list_remove(struct l2cap_seq_list *seq_list, u16 seq) 325 { 326 u16 mask = seq_list->mask; 327 328 if (seq_list->head == L2CAP_SEQ_LIST_CLEAR) { 329 /* In case someone tries to pop the head of an empty list */ 330 return L2CAP_SEQ_LIST_CLEAR; 331 } else if (seq_list->head == seq) { 332 /* Head can be removed in constant time */ 333 seq_list->head = seq_list->list[seq & mask]; 334 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR; 335 336 if (seq_list->head == L2CAP_SEQ_LIST_TAIL) { 337 seq_list->head = L2CAP_SEQ_LIST_CLEAR; 338 seq_list->tail = L2CAP_SEQ_LIST_CLEAR; 339 } 340 } else { 341 /* Walk the list to find the sequence number */ 342 u16 prev = seq_list->head; 343 while (seq_list->list[prev & mask] != seq) { 344 prev = seq_list->list[prev & mask]; 345 if (prev == L2CAP_SEQ_LIST_TAIL) 346 return L2CAP_SEQ_LIST_CLEAR; 347 } 348 349 /* Unlink the number from the list and clear it */ 350 seq_list->list[prev & mask] = seq_list->list[seq & mask]; 351 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR; 352 if (seq_list->tail == seq) 353 seq_list->tail = prev; 354 } 355 return seq; 356 } 357 358 static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list) 359 { 360 /* Remove the head in constant time */ 361 return l2cap_seq_list_remove(seq_list, seq_list->head); 362 } 363 364 static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list) 365 { 366 u16 i; 367 368 if (seq_list->head == L2CAP_SEQ_LIST_CLEAR) 369 return; 370 371 for (i = 0; i <= seq_list->mask; i++) 372 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR; 373 374 seq_list->head = L2CAP_SEQ_LIST_CLEAR; 375 seq_list->tail = L2CAP_SEQ_LIST_CLEAR; 376 } 377 378 static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq) 379 { 380 u16 mask = seq_list->mask; 381 382 /* All appends happen in constant time */ 383 384 if (seq_list->list[seq & mask] != L2CAP_SEQ_LIST_CLEAR) 385 return; 386 387 if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR) 388 seq_list->head = seq; 389 else 390 seq_list->list[seq_list->tail & mask] = seq; 391 392 seq_list->tail = seq; 393 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL; 394 } 395 396 static void l2cap_chan_timeout(struct work_struct *work) 397 { 398 struct l2cap_chan *chan = container_of(work, struct l2cap_chan, 399 chan_timer.work); 400 struct l2cap_conn *conn = chan->conn; 401 int reason; 402 403 BT_DBG("chan %p state %s", chan, state_to_string(chan->state)); 404 405 mutex_lock(&conn->chan_lock); 406 l2cap_chan_lock(chan); 407 408 if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG) 409 reason = ECONNREFUSED; 410 else if (chan->state == BT_CONNECT && 411 chan->sec_level != BT_SECURITY_SDP) 412 reason = ECONNREFUSED; 413 else 414 reason = ETIMEDOUT; 415 416 l2cap_chan_close(chan, reason); 417 418 l2cap_chan_unlock(chan); 419 420 chan->ops->close(chan); 421 mutex_unlock(&conn->chan_lock); 422 423 l2cap_chan_put(chan); 424 } 425 426 struct l2cap_chan *l2cap_chan_create(void) 427 { 428 struct l2cap_chan *chan; 429 430 chan = kzalloc(sizeof(*chan), GFP_ATOMIC); 431 if (!chan) 432 return NULL; 433 434 mutex_init(&chan->lock); 435 436 write_lock(&chan_list_lock); 437 list_add(&chan->global_l, &chan_list); 438 write_unlock(&chan_list_lock); 439 440 INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout); 441 442 chan->state = BT_OPEN; 443 444 kref_init(&chan->kref); 445 446 /* This flag is cleared in l2cap_chan_ready() */ 447 set_bit(CONF_NOT_COMPLETE, &chan->conf_state); 448 449 BT_DBG("chan %p", chan); 450 451 return chan; 452 } 453 454 static void l2cap_chan_destroy(struct kref *kref) 455 { 456 struct l2cap_chan *chan = container_of(kref, struct l2cap_chan, kref); 457 458 BT_DBG("chan %p", chan); 459 460 write_lock(&chan_list_lock); 461 list_del(&chan->global_l); 462 write_unlock(&chan_list_lock); 463 464 kfree(chan); 465 } 466 467 void l2cap_chan_hold(struct l2cap_chan *c) 468 { 469 BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount)); 470 471 kref_get(&c->kref); 472 } 473 474 void l2cap_chan_put(struct l2cap_chan *c) 475 { 476 BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount)); 477 478 kref_put(&c->kref, l2cap_chan_destroy); 479 } 480 481 void l2cap_chan_set_defaults(struct l2cap_chan *chan) 482 { 483 chan->fcs = L2CAP_FCS_CRC16; 484 chan->max_tx = L2CAP_DEFAULT_MAX_TX; 485 chan->tx_win = L2CAP_DEFAULT_TX_WINDOW; 486 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW; 487 chan->ack_win = L2CAP_DEFAULT_TX_WINDOW; 488 chan->sec_level = BT_SECURITY_LOW; 489 490 set_bit(FLAG_FORCE_ACTIVE, &chan->flags); 491 } 492 493 void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan) 494 { 495 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, 496 __le16_to_cpu(chan->psm), chan->dcid); 497 498 conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM; 499 500 chan->conn = conn; 501 502 switch (chan->chan_type) { 503 case L2CAP_CHAN_CONN_ORIENTED: 504 if (conn->hcon->type == LE_LINK) { 505 /* LE connection */ 506 chan->omtu = L2CAP_DEFAULT_MTU; 507 chan->scid = L2CAP_CID_LE_DATA; 508 chan->dcid = L2CAP_CID_LE_DATA; 509 } else { 510 /* Alloc CID for connection-oriented socket */ 511 chan->scid = l2cap_alloc_cid(conn); 512 chan->omtu = L2CAP_DEFAULT_MTU; 513 } 514 break; 515 516 case L2CAP_CHAN_CONN_LESS: 517 /* Connectionless socket */ 518 chan->scid = L2CAP_CID_CONN_LESS; 519 chan->dcid = L2CAP_CID_CONN_LESS; 520 chan->omtu = L2CAP_DEFAULT_MTU; 521 break; 522 523 case L2CAP_CHAN_CONN_FIX_A2MP: 524 chan->scid = L2CAP_CID_A2MP; 525 chan->dcid = L2CAP_CID_A2MP; 526 chan->omtu = L2CAP_A2MP_DEFAULT_MTU; 527 chan->imtu = L2CAP_A2MP_DEFAULT_MTU; 528 break; 529 530 default: 531 /* Raw socket can send/recv signalling messages only */ 532 chan->scid = L2CAP_CID_SIGNALING; 533 chan->dcid = L2CAP_CID_SIGNALING; 534 chan->omtu = L2CAP_DEFAULT_MTU; 535 } 536 537 chan->local_id = L2CAP_BESTEFFORT_ID; 538 chan->local_stype = L2CAP_SERV_BESTEFFORT; 539 chan->local_msdu = L2CAP_DEFAULT_MAX_SDU_SIZE; 540 chan->local_sdu_itime = L2CAP_DEFAULT_SDU_ITIME; 541 chan->local_acc_lat = L2CAP_DEFAULT_ACC_LAT; 542 chan->local_flush_to = L2CAP_EFS_DEFAULT_FLUSH_TO; 543 544 l2cap_chan_hold(chan); 545 546 list_add(&chan->list, &conn->chan_l); 547 } 548 549 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan) 550 { 551 mutex_lock(&conn->chan_lock); 552 __l2cap_chan_add(conn, chan); 553 mutex_unlock(&conn->chan_lock); 554 } 555 556 void l2cap_chan_del(struct l2cap_chan *chan, int err) 557 { 558 struct l2cap_conn *conn = chan->conn; 559 560 __clear_chan_timer(chan); 561 562 BT_DBG("chan %p, conn %p, err %d", chan, conn, err); 563 564 if (conn) { 565 struct amp_mgr *mgr = conn->hcon->amp_mgr; 566 /* Delete from channel list */ 567 list_del(&chan->list); 568 569 l2cap_chan_put(chan); 570 571 chan->conn = NULL; 572 573 if (chan->chan_type != L2CAP_CHAN_CONN_FIX_A2MP) 574 hci_conn_drop(conn->hcon); 575 576 if (mgr && mgr->bredr_chan == chan) 577 mgr->bredr_chan = NULL; 578 } 579 580 if (chan->hs_hchan) { 581 struct hci_chan *hs_hchan = chan->hs_hchan; 582 583 BT_DBG("chan %p disconnect hs_hchan %p", chan, hs_hchan); 584 amp_disconnect_logical_link(hs_hchan); 585 } 586 587 chan->ops->teardown(chan, err); 588 589 if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state)) 590 return; 591 592 switch(chan->mode) { 593 case L2CAP_MODE_BASIC: 594 break; 595 596 case L2CAP_MODE_ERTM: 597 __clear_retrans_timer(chan); 598 __clear_monitor_timer(chan); 599 __clear_ack_timer(chan); 600 601 skb_queue_purge(&chan->srej_q); 602 603 l2cap_seq_list_free(&chan->srej_list); 604 l2cap_seq_list_free(&chan->retrans_list); 605 606 /* fall through */ 607 608 case L2CAP_MODE_STREAMING: 609 skb_queue_purge(&chan->tx_q); 610 break; 611 } 612 613 return; 614 } 615 616 void l2cap_chan_close(struct l2cap_chan *chan, int reason) 617 { 618 struct l2cap_conn *conn = chan->conn; 619 struct sock *sk = chan->sk; 620 621 BT_DBG("chan %p state %s sk %p", chan, state_to_string(chan->state), 622 sk); 623 624 switch (chan->state) { 625 case BT_LISTEN: 626 chan->ops->teardown(chan, 0); 627 break; 628 629 case BT_CONNECTED: 630 case BT_CONFIG: 631 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && 632 conn->hcon->type == ACL_LINK) { 633 __set_chan_timer(chan, sk->sk_sndtimeo); 634 l2cap_send_disconn_req(chan, reason); 635 } else 636 l2cap_chan_del(chan, reason); 637 break; 638 639 case BT_CONNECT2: 640 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && 641 conn->hcon->type == ACL_LINK) { 642 struct l2cap_conn_rsp rsp; 643 __u16 result; 644 645 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) 646 result = L2CAP_CR_SEC_BLOCK; 647 else 648 result = L2CAP_CR_BAD_PSM; 649 l2cap_state_change(chan, BT_DISCONN); 650 651 rsp.scid = cpu_to_le16(chan->dcid); 652 rsp.dcid = cpu_to_le16(chan->scid); 653 rsp.result = cpu_to_le16(result); 654 rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO); 655 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, 656 sizeof(rsp), &rsp); 657 } 658 659 l2cap_chan_del(chan, reason); 660 break; 661 662 case BT_CONNECT: 663 case BT_DISCONN: 664 l2cap_chan_del(chan, reason); 665 break; 666 667 default: 668 chan->ops->teardown(chan, 0); 669 break; 670 } 671 } 672 673 static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan) 674 { 675 if (chan->chan_type == L2CAP_CHAN_RAW) { 676 switch (chan->sec_level) { 677 case BT_SECURITY_HIGH: 678 return HCI_AT_DEDICATED_BONDING_MITM; 679 case BT_SECURITY_MEDIUM: 680 return HCI_AT_DEDICATED_BONDING; 681 default: 682 return HCI_AT_NO_BONDING; 683 } 684 } else if (chan->psm == __constant_cpu_to_le16(L2CAP_PSM_SDP)) { 685 if (chan->sec_level == BT_SECURITY_LOW) 686 chan->sec_level = BT_SECURITY_SDP; 687 688 if (chan->sec_level == BT_SECURITY_HIGH) 689 return HCI_AT_NO_BONDING_MITM; 690 else 691 return HCI_AT_NO_BONDING; 692 } else { 693 switch (chan->sec_level) { 694 case BT_SECURITY_HIGH: 695 return HCI_AT_GENERAL_BONDING_MITM; 696 case BT_SECURITY_MEDIUM: 697 return HCI_AT_GENERAL_BONDING; 698 default: 699 return HCI_AT_NO_BONDING; 700 } 701 } 702 } 703 704 /* Service level security */ 705 int l2cap_chan_check_security(struct l2cap_chan *chan) 706 { 707 struct l2cap_conn *conn = chan->conn; 708 __u8 auth_type; 709 710 auth_type = l2cap_get_auth_type(chan); 711 712 return hci_conn_security(conn->hcon, chan->sec_level, auth_type); 713 } 714 715 static u8 l2cap_get_ident(struct l2cap_conn *conn) 716 { 717 u8 id; 718 719 /* Get next available identificator. 720 * 1 - 128 are used by kernel. 721 * 129 - 199 are reserved. 722 * 200 - 254 are used by utilities like l2ping, etc. 723 */ 724 725 spin_lock(&conn->lock); 726 727 if (++conn->tx_ident > 128) 728 conn->tx_ident = 1; 729 730 id = conn->tx_ident; 731 732 spin_unlock(&conn->lock); 733 734 return id; 735 } 736 737 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, 738 void *data) 739 { 740 struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data); 741 u8 flags; 742 743 BT_DBG("code 0x%2.2x", code); 744 745 if (!skb) 746 return; 747 748 if (lmp_no_flush_capable(conn->hcon->hdev)) 749 flags = ACL_START_NO_FLUSH; 750 else 751 flags = ACL_START; 752 753 bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON; 754 skb->priority = HCI_PRIO_MAX; 755 756 hci_send_acl(conn->hchan, skb, flags); 757 } 758 759 static bool __chan_is_moving(struct l2cap_chan *chan) 760 { 761 return chan->move_state != L2CAP_MOVE_STABLE && 762 chan->move_state != L2CAP_MOVE_WAIT_PREPARE; 763 } 764 765 static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb) 766 { 767 struct hci_conn *hcon = chan->conn->hcon; 768 u16 flags; 769 770 BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len, 771 skb->priority); 772 773 if (chan->hs_hcon && !__chan_is_moving(chan)) { 774 if (chan->hs_hchan) 775 hci_send_acl(chan->hs_hchan, skb, ACL_COMPLETE); 776 else 777 kfree_skb(skb); 778 779 return; 780 } 781 782 if (!test_bit(FLAG_FLUSHABLE, &chan->flags) && 783 lmp_no_flush_capable(hcon->hdev)) 784 flags = ACL_START_NO_FLUSH; 785 else 786 flags = ACL_START; 787 788 bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags); 789 hci_send_acl(chan->conn->hchan, skb, flags); 790 } 791 792 static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control) 793 { 794 control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT; 795 control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT; 796 797 if (enh & L2CAP_CTRL_FRAME_TYPE) { 798 /* S-Frame */ 799 control->sframe = 1; 800 control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT; 801 control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT; 802 803 control->sar = 0; 804 control->txseq = 0; 805 } else { 806 /* I-Frame */ 807 control->sframe = 0; 808 control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT; 809 control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT; 810 811 control->poll = 0; 812 control->super = 0; 813 } 814 } 815 816 static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control) 817 { 818 control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT; 819 control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT; 820 821 if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) { 822 /* S-Frame */ 823 control->sframe = 1; 824 control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT; 825 control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT; 826 827 control->sar = 0; 828 control->txseq = 0; 829 } else { 830 /* I-Frame */ 831 control->sframe = 0; 832 control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT; 833 control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT; 834 835 control->poll = 0; 836 control->super = 0; 837 } 838 } 839 840 static inline void __unpack_control(struct l2cap_chan *chan, 841 struct sk_buff *skb) 842 { 843 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) { 844 __unpack_extended_control(get_unaligned_le32(skb->data), 845 &bt_cb(skb)->control); 846 skb_pull(skb, L2CAP_EXT_CTRL_SIZE); 847 } else { 848 __unpack_enhanced_control(get_unaligned_le16(skb->data), 849 &bt_cb(skb)->control); 850 skb_pull(skb, L2CAP_ENH_CTRL_SIZE); 851 } 852 } 853 854 static u32 __pack_extended_control(struct l2cap_ctrl *control) 855 { 856 u32 packed; 857 858 packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT; 859 packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT; 860 861 if (control->sframe) { 862 packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT; 863 packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT; 864 packed |= L2CAP_EXT_CTRL_FRAME_TYPE; 865 } else { 866 packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT; 867 packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT; 868 } 869 870 return packed; 871 } 872 873 static u16 __pack_enhanced_control(struct l2cap_ctrl *control) 874 { 875 u16 packed; 876 877 packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT; 878 packed |= control->final << L2CAP_CTRL_FINAL_SHIFT; 879 880 if (control->sframe) { 881 packed |= control->poll << L2CAP_CTRL_POLL_SHIFT; 882 packed |= control->super << L2CAP_CTRL_SUPER_SHIFT; 883 packed |= L2CAP_CTRL_FRAME_TYPE; 884 } else { 885 packed |= control->sar << L2CAP_CTRL_SAR_SHIFT; 886 packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT; 887 } 888 889 return packed; 890 } 891 892 static inline void __pack_control(struct l2cap_chan *chan, 893 struct l2cap_ctrl *control, 894 struct sk_buff *skb) 895 { 896 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) { 897 put_unaligned_le32(__pack_extended_control(control), 898 skb->data + L2CAP_HDR_SIZE); 899 } else { 900 put_unaligned_le16(__pack_enhanced_control(control), 901 skb->data + L2CAP_HDR_SIZE); 902 } 903 } 904 905 static inline unsigned int __ertm_hdr_size(struct l2cap_chan *chan) 906 { 907 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 908 return L2CAP_EXT_HDR_SIZE; 909 else 910 return L2CAP_ENH_HDR_SIZE; 911 } 912 913 static struct sk_buff *l2cap_create_sframe_pdu(struct l2cap_chan *chan, 914 u32 control) 915 { 916 struct sk_buff *skb; 917 struct l2cap_hdr *lh; 918 int hlen = __ertm_hdr_size(chan); 919 920 if (chan->fcs == L2CAP_FCS_CRC16) 921 hlen += L2CAP_FCS_SIZE; 922 923 skb = bt_skb_alloc(hlen, GFP_KERNEL); 924 925 if (!skb) 926 return ERR_PTR(-ENOMEM); 927 928 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 929 lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE); 930 lh->cid = cpu_to_le16(chan->dcid); 931 932 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 933 put_unaligned_le32(control, skb_put(skb, L2CAP_EXT_CTRL_SIZE)); 934 else 935 put_unaligned_le16(control, skb_put(skb, L2CAP_ENH_CTRL_SIZE)); 936 937 if (chan->fcs == L2CAP_FCS_CRC16) { 938 u16 fcs = crc16(0, (u8 *)skb->data, skb->len); 939 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE)); 940 } 941 942 skb->priority = HCI_PRIO_MAX; 943 return skb; 944 } 945 946 static void l2cap_send_sframe(struct l2cap_chan *chan, 947 struct l2cap_ctrl *control) 948 { 949 struct sk_buff *skb; 950 u32 control_field; 951 952 BT_DBG("chan %p, control %p", chan, control); 953 954 if (!control->sframe) 955 return; 956 957 if (__chan_is_moving(chan)) 958 return; 959 960 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state) && 961 !control->poll) 962 control->final = 1; 963 964 if (control->super == L2CAP_SUPER_RR) 965 clear_bit(CONN_RNR_SENT, &chan->conn_state); 966 else if (control->super == L2CAP_SUPER_RNR) 967 set_bit(CONN_RNR_SENT, &chan->conn_state); 968 969 if (control->super != L2CAP_SUPER_SREJ) { 970 chan->last_acked_seq = control->reqseq; 971 __clear_ack_timer(chan); 972 } 973 974 BT_DBG("reqseq %d, final %d, poll %d, super %d", control->reqseq, 975 control->final, control->poll, control->super); 976 977 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 978 control_field = __pack_extended_control(control); 979 else 980 control_field = __pack_enhanced_control(control); 981 982 skb = l2cap_create_sframe_pdu(chan, control_field); 983 if (!IS_ERR(skb)) 984 l2cap_do_send(chan, skb); 985 } 986 987 static void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, bool poll) 988 { 989 struct l2cap_ctrl control; 990 991 BT_DBG("chan %p, poll %d", chan, poll); 992 993 memset(&control, 0, sizeof(control)); 994 control.sframe = 1; 995 control.poll = poll; 996 997 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) 998 control.super = L2CAP_SUPER_RNR; 999 else 1000 control.super = L2CAP_SUPER_RR; 1001 1002 control.reqseq = chan->buffer_seq; 1003 l2cap_send_sframe(chan, &control); 1004 } 1005 1006 static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan) 1007 { 1008 return !test_bit(CONF_CONNECT_PEND, &chan->conf_state); 1009 } 1010 1011 static bool __amp_capable(struct l2cap_chan *chan) 1012 { 1013 struct l2cap_conn *conn = chan->conn; 1014 1015 if (enable_hs && 1016 hci_amp_capable() && 1017 chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED && 1018 conn->fixed_chan_mask & L2CAP_FC_A2MP) 1019 return true; 1020 else 1021 return false; 1022 } 1023 1024 static bool l2cap_check_efs(struct l2cap_chan *chan) 1025 { 1026 /* Check EFS parameters */ 1027 return true; 1028 } 1029 1030 void l2cap_send_conn_req(struct l2cap_chan *chan) 1031 { 1032 struct l2cap_conn *conn = chan->conn; 1033 struct l2cap_conn_req req; 1034 1035 req.scid = cpu_to_le16(chan->scid); 1036 req.psm = chan->psm; 1037 1038 chan->ident = l2cap_get_ident(conn); 1039 1040 set_bit(CONF_CONNECT_PEND, &chan->conf_state); 1041 1042 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req); 1043 } 1044 1045 static void l2cap_send_create_chan_req(struct l2cap_chan *chan, u8 amp_id) 1046 { 1047 struct l2cap_create_chan_req req; 1048 req.scid = cpu_to_le16(chan->scid); 1049 req.psm = chan->psm; 1050 req.amp_id = amp_id; 1051 1052 chan->ident = l2cap_get_ident(chan->conn); 1053 1054 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_REQ, 1055 sizeof(req), &req); 1056 } 1057 1058 static void l2cap_move_setup(struct l2cap_chan *chan) 1059 { 1060 struct sk_buff *skb; 1061 1062 BT_DBG("chan %p", chan); 1063 1064 if (chan->mode != L2CAP_MODE_ERTM) 1065 return; 1066 1067 __clear_retrans_timer(chan); 1068 __clear_monitor_timer(chan); 1069 __clear_ack_timer(chan); 1070 1071 chan->retry_count = 0; 1072 skb_queue_walk(&chan->tx_q, skb) { 1073 if (bt_cb(skb)->control.retries) 1074 bt_cb(skb)->control.retries = 1; 1075 else 1076 break; 1077 } 1078 1079 chan->expected_tx_seq = chan->buffer_seq; 1080 1081 clear_bit(CONN_REJ_ACT, &chan->conn_state); 1082 clear_bit(CONN_SREJ_ACT, &chan->conn_state); 1083 l2cap_seq_list_clear(&chan->retrans_list); 1084 l2cap_seq_list_clear(&chan->srej_list); 1085 skb_queue_purge(&chan->srej_q); 1086 1087 chan->tx_state = L2CAP_TX_STATE_XMIT; 1088 chan->rx_state = L2CAP_RX_STATE_MOVE; 1089 1090 set_bit(CONN_REMOTE_BUSY, &chan->conn_state); 1091 } 1092 1093 static void l2cap_move_done(struct l2cap_chan *chan) 1094 { 1095 u8 move_role = chan->move_role; 1096 BT_DBG("chan %p", chan); 1097 1098 chan->move_state = L2CAP_MOVE_STABLE; 1099 chan->move_role = L2CAP_MOVE_ROLE_NONE; 1100 1101 if (chan->mode != L2CAP_MODE_ERTM) 1102 return; 1103 1104 switch (move_role) { 1105 case L2CAP_MOVE_ROLE_INITIATOR: 1106 l2cap_tx(chan, NULL, NULL, L2CAP_EV_EXPLICIT_POLL); 1107 chan->rx_state = L2CAP_RX_STATE_WAIT_F; 1108 break; 1109 case L2CAP_MOVE_ROLE_RESPONDER: 1110 chan->rx_state = L2CAP_RX_STATE_WAIT_P; 1111 break; 1112 } 1113 } 1114 1115 static void l2cap_chan_ready(struct l2cap_chan *chan) 1116 { 1117 /* This clears all conf flags, including CONF_NOT_COMPLETE */ 1118 chan->conf_state = 0; 1119 __clear_chan_timer(chan); 1120 1121 chan->state = BT_CONNECTED; 1122 1123 chan->ops->ready(chan); 1124 } 1125 1126 static void l2cap_start_connection(struct l2cap_chan *chan) 1127 { 1128 if (__amp_capable(chan)) { 1129 BT_DBG("chan %p AMP capable: discover AMPs", chan); 1130 a2mp_discover_amp(chan); 1131 } else { 1132 l2cap_send_conn_req(chan); 1133 } 1134 } 1135 1136 static void l2cap_do_start(struct l2cap_chan *chan) 1137 { 1138 struct l2cap_conn *conn = chan->conn; 1139 1140 if (conn->hcon->type == LE_LINK) { 1141 l2cap_chan_ready(chan); 1142 return; 1143 } 1144 1145 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) { 1146 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)) 1147 return; 1148 1149 if (l2cap_chan_check_security(chan) && 1150 __l2cap_no_conn_pending(chan)) { 1151 l2cap_start_connection(chan); 1152 } 1153 } else { 1154 struct l2cap_info_req req; 1155 req.type = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK); 1156 1157 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT; 1158 conn->info_ident = l2cap_get_ident(conn); 1159 1160 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT); 1161 1162 l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ, 1163 sizeof(req), &req); 1164 } 1165 } 1166 1167 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask) 1168 { 1169 u32 local_feat_mask = l2cap_feat_mask; 1170 if (!disable_ertm) 1171 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING; 1172 1173 switch (mode) { 1174 case L2CAP_MODE_ERTM: 1175 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask; 1176 case L2CAP_MODE_STREAMING: 1177 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask; 1178 default: 1179 return 0x00; 1180 } 1181 } 1182 1183 static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err) 1184 { 1185 struct sock *sk = chan->sk; 1186 struct l2cap_conn *conn = chan->conn; 1187 struct l2cap_disconn_req req; 1188 1189 if (!conn) 1190 return; 1191 1192 if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) { 1193 __clear_retrans_timer(chan); 1194 __clear_monitor_timer(chan); 1195 __clear_ack_timer(chan); 1196 } 1197 1198 if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) { 1199 l2cap_state_change(chan, BT_DISCONN); 1200 return; 1201 } 1202 1203 req.dcid = cpu_to_le16(chan->dcid); 1204 req.scid = cpu_to_le16(chan->scid); 1205 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_DISCONN_REQ, 1206 sizeof(req), &req); 1207 1208 lock_sock(sk); 1209 __l2cap_state_change(chan, BT_DISCONN); 1210 __l2cap_chan_set_err(chan, err); 1211 release_sock(sk); 1212 } 1213 1214 /* ---- L2CAP connections ---- */ 1215 static void l2cap_conn_start(struct l2cap_conn *conn) 1216 { 1217 struct l2cap_chan *chan, *tmp; 1218 1219 BT_DBG("conn %p", conn); 1220 1221 mutex_lock(&conn->chan_lock); 1222 1223 list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) { 1224 struct sock *sk = chan->sk; 1225 1226 l2cap_chan_lock(chan); 1227 1228 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { 1229 l2cap_chan_unlock(chan); 1230 continue; 1231 } 1232 1233 if (chan->state == BT_CONNECT) { 1234 if (!l2cap_chan_check_security(chan) || 1235 !__l2cap_no_conn_pending(chan)) { 1236 l2cap_chan_unlock(chan); 1237 continue; 1238 } 1239 1240 if (!l2cap_mode_supported(chan->mode, conn->feat_mask) 1241 && test_bit(CONF_STATE2_DEVICE, 1242 &chan->conf_state)) { 1243 l2cap_chan_close(chan, ECONNRESET); 1244 l2cap_chan_unlock(chan); 1245 continue; 1246 } 1247 1248 l2cap_start_connection(chan); 1249 1250 } else if (chan->state == BT_CONNECT2) { 1251 struct l2cap_conn_rsp rsp; 1252 char buf[128]; 1253 rsp.scid = cpu_to_le16(chan->dcid); 1254 rsp.dcid = cpu_to_le16(chan->scid); 1255 1256 if (l2cap_chan_check_security(chan)) { 1257 lock_sock(sk); 1258 if (test_bit(BT_SK_DEFER_SETUP, 1259 &bt_sk(sk)->flags)) { 1260 rsp.result = __constant_cpu_to_le16(L2CAP_CR_PEND); 1261 rsp.status = __constant_cpu_to_le16(L2CAP_CS_AUTHOR_PEND); 1262 chan->ops->defer(chan); 1263 1264 } else { 1265 __l2cap_state_change(chan, BT_CONFIG); 1266 rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS); 1267 rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO); 1268 } 1269 release_sock(sk); 1270 } else { 1271 rsp.result = __constant_cpu_to_le16(L2CAP_CR_PEND); 1272 rsp.status = __constant_cpu_to_le16(L2CAP_CS_AUTHEN_PEND); 1273 } 1274 1275 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, 1276 sizeof(rsp), &rsp); 1277 1278 if (test_bit(CONF_REQ_SENT, &chan->conf_state) || 1279 rsp.result != L2CAP_CR_SUCCESS) { 1280 l2cap_chan_unlock(chan); 1281 continue; 1282 } 1283 1284 set_bit(CONF_REQ_SENT, &chan->conf_state); 1285 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 1286 l2cap_build_conf_req(chan, buf), buf); 1287 chan->num_conf_req++; 1288 } 1289 1290 l2cap_chan_unlock(chan); 1291 } 1292 1293 mutex_unlock(&conn->chan_lock); 1294 } 1295 1296 /* Find socket with cid and source/destination bdaddr. 1297 * Returns closest match, locked. 1298 */ 1299 static struct l2cap_chan *l2cap_global_chan_by_scid(int state, u16 cid, 1300 bdaddr_t *src, 1301 bdaddr_t *dst) 1302 { 1303 struct l2cap_chan *c, *c1 = NULL; 1304 1305 read_lock(&chan_list_lock); 1306 1307 list_for_each_entry(c, &chan_list, global_l) { 1308 struct sock *sk = c->sk; 1309 1310 if (state && c->state != state) 1311 continue; 1312 1313 if (c->scid == cid) { 1314 int src_match, dst_match; 1315 int src_any, dst_any; 1316 1317 /* Exact match. */ 1318 src_match = !bacmp(&bt_sk(sk)->src, src); 1319 dst_match = !bacmp(&bt_sk(sk)->dst, dst); 1320 if (src_match && dst_match) { 1321 read_unlock(&chan_list_lock); 1322 return c; 1323 } 1324 1325 /* Closest match */ 1326 src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY); 1327 dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY); 1328 if ((src_match && dst_any) || (src_any && dst_match) || 1329 (src_any && dst_any)) 1330 c1 = c; 1331 } 1332 } 1333 1334 read_unlock(&chan_list_lock); 1335 1336 return c1; 1337 } 1338 1339 static void l2cap_le_conn_ready(struct l2cap_conn *conn) 1340 { 1341 struct sock *parent, *sk; 1342 struct l2cap_chan *chan, *pchan; 1343 1344 BT_DBG(""); 1345 1346 /* Check if we have socket listening on cid */ 1347 pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA, 1348 conn->src, conn->dst); 1349 if (!pchan) 1350 return; 1351 1352 parent = pchan->sk; 1353 1354 lock_sock(parent); 1355 1356 chan = pchan->ops->new_connection(pchan); 1357 if (!chan) 1358 goto clean; 1359 1360 sk = chan->sk; 1361 1362 hci_conn_hold(conn->hcon); 1363 conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT; 1364 1365 bacpy(&bt_sk(sk)->src, conn->src); 1366 bacpy(&bt_sk(sk)->dst, conn->dst); 1367 1368 l2cap_chan_add(conn, chan); 1369 1370 l2cap_chan_ready(chan); 1371 1372 clean: 1373 release_sock(parent); 1374 } 1375 1376 static void l2cap_conn_ready(struct l2cap_conn *conn) 1377 { 1378 struct l2cap_chan *chan; 1379 struct hci_conn *hcon = conn->hcon; 1380 1381 BT_DBG("conn %p", conn); 1382 1383 if (!hcon->out && hcon->type == LE_LINK) 1384 l2cap_le_conn_ready(conn); 1385 1386 if (hcon->out && hcon->type == LE_LINK) 1387 smp_conn_security(hcon, hcon->pending_sec_level); 1388 1389 mutex_lock(&conn->chan_lock); 1390 1391 list_for_each_entry(chan, &conn->chan_l, list) { 1392 1393 l2cap_chan_lock(chan); 1394 1395 if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) { 1396 l2cap_chan_unlock(chan); 1397 continue; 1398 } 1399 1400 if (hcon->type == LE_LINK) { 1401 if (smp_conn_security(hcon, chan->sec_level)) 1402 l2cap_chan_ready(chan); 1403 1404 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { 1405 struct sock *sk = chan->sk; 1406 __clear_chan_timer(chan); 1407 lock_sock(sk); 1408 __l2cap_state_change(chan, BT_CONNECTED); 1409 sk->sk_state_change(sk); 1410 release_sock(sk); 1411 1412 } else if (chan->state == BT_CONNECT) 1413 l2cap_do_start(chan); 1414 1415 l2cap_chan_unlock(chan); 1416 } 1417 1418 mutex_unlock(&conn->chan_lock); 1419 } 1420 1421 /* Notify sockets that we cannot guaranty reliability anymore */ 1422 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err) 1423 { 1424 struct l2cap_chan *chan; 1425 1426 BT_DBG("conn %p", conn); 1427 1428 mutex_lock(&conn->chan_lock); 1429 1430 list_for_each_entry(chan, &conn->chan_l, list) { 1431 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags)) 1432 l2cap_chan_set_err(chan, err); 1433 } 1434 1435 mutex_unlock(&conn->chan_lock); 1436 } 1437 1438 static void l2cap_info_timeout(struct work_struct *work) 1439 { 1440 struct l2cap_conn *conn = container_of(work, struct l2cap_conn, 1441 info_timer.work); 1442 1443 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; 1444 conn->info_ident = 0; 1445 1446 l2cap_conn_start(conn); 1447 } 1448 1449 /* 1450 * l2cap_user 1451 * External modules can register l2cap_user objects on l2cap_conn. The ->probe 1452 * callback is called during registration. The ->remove callback is called 1453 * during unregistration. 1454 * An l2cap_user object can either be explicitly unregistered or when the 1455 * underlying l2cap_conn object is deleted. This guarantees that l2cap->hcon, 1456 * l2cap->hchan, .. are valid as long as the remove callback hasn't been called. 1457 * External modules must own a reference to the l2cap_conn object if they intend 1458 * to call l2cap_unregister_user(). The l2cap_conn object might get destroyed at 1459 * any time if they don't. 1460 */ 1461 1462 int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user) 1463 { 1464 struct hci_dev *hdev = conn->hcon->hdev; 1465 int ret; 1466 1467 /* We need to check whether l2cap_conn is registered. If it is not, we 1468 * must not register the l2cap_user. l2cap_conn_del() is unregisters 1469 * l2cap_conn objects, but doesn't provide its own locking. Instead, it 1470 * relies on the parent hci_conn object to be locked. This itself relies 1471 * on the hci_dev object to be locked. So we must lock the hci device 1472 * here, too. */ 1473 1474 hci_dev_lock(hdev); 1475 1476 if (user->list.next || user->list.prev) { 1477 ret = -EINVAL; 1478 goto out_unlock; 1479 } 1480 1481 /* conn->hchan is NULL after l2cap_conn_del() was called */ 1482 if (!conn->hchan) { 1483 ret = -ENODEV; 1484 goto out_unlock; 1485 } 1486 1487 ret = user->probe(conn, user); 1488 if (ret) 1489 goto out_unlock; 1490 1491 list_add(&user->list, &conn->users); 1492 ret = 0; 1493 1494 out_unlock: 1495 hci_dev_unlock(hdev); 1496 return ret; 1497 } 1498 EXPORT_SYMBOL(l2cap_register_user); 1499 1500 void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user) 1501 { 1502 struct hci_dev *hdev = conn->hcon->hdev; 1503 1504 hci_dev_lock(hdev); 1505 1506 if (!user->list.next || !user->list.prev) 1507 goto out_unlock; 1508 1509 list_del(&user->list); 1510 user->list.next = NULL; 1511 user->list.prev = NULL; 1512 user->remove(conn, user); 1513 1514 out_unlock: 1515 hci_dev_unlock(hdev); 1516 } 1517 EXPORT_SYMBOL(l2cap_unregister_user); 1518 1519 static void l2cap_unregister_all_users(struct l2cap_conn *conn) 1520 { 1521 struct l2cap_user *user; 1522 1523 while (!list_empty(&conn->users)) { 1524 user = list_first_entry(&conn->users, struct l2cap_user, list); 1525 list_del(&user->list); 1526 user->list.next = NULL; 1527 user->list.prev = NULL; 1528 user->remove(conn, user); 1529 } 1530 } 1531 1532 static void l2cap_conn_del(struct hci_conn *hcon, int err) 1533 { 1534 struct l2cap_conn *conn = hcon->l2cap_data; 1535 struct l2cap_chan *chan, *l; 1536 1537 if (!conn) 1538 return; 1539 1540 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err); 1541 1542 kfree_skb(conn->rx_skb); 1543 1544 l2cap_unregister_all_users(conn); 1545 1546 mutex_lock(&conn->chan_lock); 1547 1548 /* Kill channels */ 1549 list_for_each_entry_safe(chan, l, &conn->chan_l, list) { 1550 l2cap_chan_hold(chan); 1551 l2cap_chan_lock(chan); 1552 1553 l2cap_chan_del(chan, err); 1554 1555 l2cap_chan_unlock(chan); 1556 1557 chan->ops->close(chan); 1558 l2cap_chan_put(chan); 1559 } 1560 1561 mutex_unlock(&conn->chan_lock); 1562 1563 hci_chan_del(conn->hchan); 1564 1565 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) 1566 cancel_delayed_work_sync(&conn->info_timer); 1567 1568 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) { 1569 cancel_delayed_work_sync(&conn->security_timer); 1570 smp_chan_destroy(conn); 1571 } 1572 1573 hcon->l2cap_data = NULL; 1574 conn->hchan = NULL; 1575 l2cap_conn_put(conn); 1576 } 1577 1578 static void security_timeout(struct work_struct *work) 1579 { 1580 struct l2cap_conn *conn = container_of(work, struct l2cap_conn, 1581 security_timer.work); 1582 1583 BT_DBG("conn %p", conn); 1584 1585 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) { 1586 smp_chan_destroy(conn); 1587 l2cap_conn_del(conn->hcon, ETIMEDOUT); 1588 } 1589 } 1590 1591 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon) 1592 { 1593 struct l2cap_conn *conn = hcon->l2cap_data; 1594 struct hci_chan *hchan; 1595 1596 if (conn) 1597 return conn; 1598 1599 hchan = hci_chan_create(hcon); 1600 if (!hchan) 1601 return NULL; 1602 1603 conn = kzalloc(sizeof(struct l2cap_conn), GFP_KERNEL); 1604 if (!conn) { 1605 hci_chan_del(hchan); 1606 return NULL; 1607 } 1608 1609 kref_init(&conn->ref); 1610 hcon->l2cap_data = conn; 1611 conn->hcon = hcon; 1612 hci_conn_get(conn->hcon); 1613 conn->hchan = hchan; 1614 1615 BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan); 1616 1617 switch (hcon->type) { 1618 case LE_LINK: 1619 if (hcon->hdev->le_mtu) { 1620 conn->mtu = hcon->hdev->le_mtu; 1621 break; 1622 } 1623 /* fall through */ 1624 default: 1625 conn->mtu = hcon->hdev->acl_mtu; 1626 break; 1627 } 1628 1629 conn->src = &hcon->hdev->bdaddr; 1630 conn->dst = &hcon->dst; 1631 1632 conn->feat_mask = 0; 1633 1634 spin_lock_init(&conn->lock); 1635 mutex_init(&conn->chan_lock); 1636 1637 INIT_LIST_HEAD(&conn->chan_l); 1638 INIT_LIST_HEAD(&conn->users); 1639 1640 if (hcon->type == LE_LINK) 1641 INIT_DELAYED_WORK(&conn->security_timer, security_timeout); 1642 else 1643 INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout); 1644 1645 conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM; 1646 1647 return conn; 1648 } 1649 1650 static void l2cap_conn_free(struct kref *ref) 1651 { 1652 struct l2cap_conn *conn = container_of(ref, struct l2cap_conn, ref); 1653 1654 hci_conn_put(conn->hcon); 1655 kfree(conn); 1656 } 1657 1658 void l2cap_conn_get(struct l2cap_conn *conn) 1659 { 1660 kref_get(&conn->ref); 1661 } 1662 EXPORT_SYMBOL(l2cap_conn_get); 1663 1664 void l2cap_conn_put(struct l2cap_conn *conn) 1665 { 1666 kref_put(&conn->ref, l2cap_conn_free); 1667 } 1668 EXPORT_SYMBOL(l2cap_conn_put); 1669 1670 /* ---- Socket interface ---- */ 1671 1672 /* Find socket with psm and source / destination bdaddr. 1673 * Returns closest match. 1674 */ 1675 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm, 1676 bdaddr_t *src, 1677 bdaddr_t *dst) 1678 { 1679 struct l2cap_chan *c, *c1 = NULL; 1680 1681 read_lock(&chan_list_lock); 1682 1683 list_for_each_entry(c, &chan_list, global_l) { 1684 struct sock *sk = c->sk; 1685 1686 if (state && c->state != state) 1687 continue; 1688 1689 if (c->psm == psm) { 1690 int src_match, dst_match; 1691 int src_any, dst_any; 1692 1693 /* Exact match. */ 1694 src_match = !bacmp(&bt_sk(sk)->src, src); 1695 dst_match = !bacmp(&bt_sk(sk)->dst, dst); 1696 if (src_match && dst_match) { 1697 read_unlock(&chan_list_lock); 1698 return c; 1699 } 1700 1701 /* Closest match */ 1702 src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY); 1703 dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY); 1704 if ((src_match && dst_any) || (src_any && dst_match) || 1705 (src_any && dst_any)) 1706 c1 = c; 1707 } 1708 } 1709 1710 read_unlock(&chan_list_lock); 1711 1712 return c1; 1713 } 1714 1715 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, 1716 bdaddr_t *dst, u8 dst_type) 1717 { 1718 struct sock *sk = chan->sk; 1719 bdaddr_t *src = &bt_sk(sk)->src; 1720 struct l2cap_conn *conn; 1721 struct hci_conn *hcon; 1722 struct hci_dev *hdev; 1723 __u8 auth_type; 1724 int err; 1725 1726 BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", src, dst, 1727 dst_type, __le16_to_cpu(psm)); 1728 1729 hdev = hci_get_route(dst, src); 1730 if (!hdev) 1731 return -EHOSTUNREACH; 1732 1733 hci_dev_lock(hdev); 1734 1735 l2cap_chan_lock(chan); 1736 1737 /* PSM must be odd and lsb of upper byte must be 0 */ 1738 if ((__le16_to_cpu(psm) & 0x0101) != 0x0001 && !cid && 1739 chan->chan_type != L2CAP_CHAN_RAW) { 1740 err = -EINVAL; 1741 goto done; 1742 } 1743 1744 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !(psm || cid)) { 1745 err = -EINVAL; 1746 goto done; 1747 } 1748 1749 switch (chan->mode) { 1750 case L2CAP_MODE_BASIC: 1751 break; 1752 case L2CAP_MODE_ERTM: 1753 case L2CAP_MODE_STREAMING: 1754 if (!disable_ertm) 1755 break; 1756 /* fall through */ 1757 default: 1758 err = -ENOTSUPP; 1759 goto done; 1760 } 1761 1762 switch (chan->state) { 1763 case BT_CONNECT: 1764 case BT_CONNECT2: 1765 case BT_CONFIG: 1766 /* Already connecting */ 1767 err = 0; 1768 goto done; 1769 1770 case BT_CONNECTED: 1771 /* Already connected */ 1772 err = -EISCONN; 1773 goto done; 1774 1775 case BT_OPEN: 1776 case BT_BOUND: 1777 /* Can connect */ 1778 break; 1779 1780 default: 1781 err = -EBADFD; 1782 goto done; 1783 } 1784 1785 /* Set destination address and psm */ 1786 lock_sock(sk); 1787 bacpy(&bt_sk(sk)->dst, dst); 1788 release_sock(sk); 1789 1790 chan->psm = psm; 1791 chan->dcid = cid; 1792 1793 auth_type = l2cap_get_auth_type(chan); 1794 1795 if (chan->dcid == L2CAP_CID_LE_DATA) 1796 hcon = hci_connect(hdev, LE_LINK, dst, dst_type, 1797 chan->sec_level, auth_type); 1798 else 1799 hcon = hci_connect(hdev, ACL_LINK, dst, dst_type, 1800 chan->sec_level, auth_type); 1801 1802 if (IS_ERR(hcon)) { 1803 err = PTR_ERR(hcon); 1804 goto done; 1805 } 1806 1807 conn = l2cap_conn_add(hcon); 1808 if (!conn) { 1809 hci_conn_drop(hcon); 1810 err = -ENOMEM; 1811 goto done; 1812 } 1813 1814 if (hcon->type == LE_LINK) { 1815 err = 0; 1816 1817 if (!list_empty(&conn->chan_l)) { 1818 err = -EBUSY; 1819 hci_conn_drop(hcon); 1820 } 1821 1822 if (err) 1823 goto done; 1824 } 1825 1826 /* Update source addr of the socket */ 1827 bacpy(src, conn->src); 1828 1829 l2cap_chan_unlock(chan); 1830 l2cap_chan_add(conn, chan); 1831 l2cap_chan_lock(chan); 1832 1833 l2cap_state_change(chan, BT_CONNECT); 1834 __set_chan_timer(chan, sk->sk_sndtimeo); 1835 1836 if (hcon->state == BT_CONNECTED) { 1837 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { 1838 __clear_chan_timer(chan); 1839 if (l2cap_chan_check_security(chan)) 1840 l2cap_state_change(chan, BT_CONNECTED); 1841 } else 1842 l2cap_do_start(chan); 1843 } 1844 1845 err = 0; 1846 1847 done: 1848 l2cap_chan_unlock(chan); 1849 hci_dev_unlock(hdev); 1850 hci_dev_put(hdev); 1851 return err; 1852 } 1853 1854 int __l2cap_wait_ack(struct sock *sk) 1855 { 1856 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 1857 DECLARE_WAITQUEUE(wait, current); 1858 int err = 0; 1859 int timeo = HZ/5; 1860 1861 add_wait_queue(sk_sleep(sk), &wait); 1862 set_current_state(TASK_INTERRUPTIBLE); 1863 while (chan->unacked_frames > 0 && chan->conn) { 1864 if (!timeo) 1865 timeo = HZ/5; 1866 1867 if (signal_pending(current)) { 1868 err = sock_intr_errno(timeo); 1869 break; 1870 } 1871 1872 release_sock(sk); 1873 timeo = schedule_timeout(timeo); 1874 lock_sock(sk); 1875 set_current_state(TASK_INTERRUPTIBLE); 1876 1877 err = sock_error(sk); 1878 if (err) 1879 break; 1880 } 1881 set_current_state(TASK_RUNNING); 1882 remove_wait_queue(sk_sleep(sk), &wait); 1883 return err; 1884 } 1885 1886 static void l2cap_monitor_timeout(struct work_struct *work) 1887 { 1888 struct l2cap_chan *chan = container_of(work, struct l2cap_chan, 1889 monitor_timer.work); 1890 1891 BT_DBG("chan %p", chan); 1892 1893 l2cap_chan_lock(chan); 1894 1895 if (!chan->conn) { 1896 l2cap_chan_unlock(chan); 1897 l2cap_chan_put(chan); 1898 return; 1899 } 1900 1901 l2cap_tx(chan, NULL, NULL, L2CAP_EV_MONITOR_TO); 1902 1903 l2cap_chan_unlock(chan); 1904 l2cap_chan_put(chan); 1905 } 1906 1907 static void l2cap_retrans_timeout(struct work_struct *work) 1908 { 1909 struct l2cap_chan *chan = container_of(work, struct l2cap_chan, 1910 retrans_timer.work); 1911 1912 BT_DBG("chan %p", chan); 1913 1914 l2cap_chan_lock(chan); 1915 1916 if (!chan->conn) { 1917 l2cap_chan_unlock(chan); 1918 l2cap_chan_put(chan); 1919 return; 1920 } 1921 1922 l2cap_tx(chan, NULL, NULL, L2CAP_EV_RETRANS_TO); 1923 l2cap_chan_unlock(chan); 1924 l2cap_chan_put(chan); 1925 } 1926 1927 static void l2cap_streaming_send(struct l2cap_chan *chan, 1928 struct sk_buff_head *skbs) 1929 { 1930 struct sk_buff *skb; 1931 struct l2cap_ctrl *control; 1932 1933 BT_DBG("chan %p, skbs %p", chan, skbs); 1934 1935 if (__chan_is_moving(chan)) 1936 return; 1937 1938 skb_queue_splice_tail_init(skbs, &chan->tx_q); 1939 1940 while (!skb_queue_empty(&chan->tx_q)) { 1941 1942 skb = skb_dequeue(&chan->tx_q); 1943 1944 bt_cb(skb)->control.retries = 1; 1945 control = &bt_cb(skb)->control; 1946 1947 control->reqseq = 0; 1948 control->txseq = chan->next_tx_seq; 1949 1950 __pack_control(chan, control, skb); 1951 1952 if (chan->fcs == L2CAP_FCS_CRC16) { 1953 u16 fcs = crc16(0, (u8 *) skb->data, skb->len); 1954 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE)); 1955 } 1956 1957 l2cap_do_send(chan, skb); 1958 1959 BT_DBG("Sent txseq %u", control->txseq); 1960 1961 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq); 1962 chan->frames_sent++; 1963 } 1964 } 1965 1966 static int l2cap_ertm_send(struct l2cap_chan *chan) 1967 { 1968 struct sk_buff *skb, *tx_skb; 1969 struct l2cap_ctrl *control; 1970 int sent = 0; 1971 1972 BT_DBG("chan %p", chan); 1973 1974 if (chan->state != BT_CONNECTED) 1975 return -ENOTCONN; 1976 1977 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) 1978 return 0; 1979 1980 if (__chan_is_moving(chan)) 1981 return 0; 1982 1983 while (chan->tx_send_head && 1984 chan->unacked_frames < chan->remote_tx_win && 1985 chan->tx_state == L2CAP_TX_STATE_XMIT) { 1986 1987 skb = chan->tx_send_head; 1988 1989 bt_cb(skb)->control.retries = 1; 1990 control = &bt_cb(skb)->control; 1991 1992 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state)) 1993 control->final = 1; 1994 1995 control->reqseq = chan->buffer_seq; 1996 chan->last_acked_seq = chan->buffer_seq; 1997 control->txseq = chan->next_tx_seq; 1998 1999 __pack_control(chan, control, skb); 2000 2001 if (chan->fcs == L2CAP_FCS_CRC16) { 2002 u16 fcs = crc16(0, (u8 *) skb->data, skb->len); 2003 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE)); 2004 } 2005 2006 /* Clone after data has been modified. Data is assumed to be 2007 read-only (for locking purposes) on cloned sk_buffs. 2008 */ 2009 tx_skb = skb_clone(skb, GFP_KERNEL); 2010 2011 if (!tx_skb) 2012 break; 2013 2014 __set_retrans_timer(chan); 2015 2016 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq); 2017 chan->unacked_frames++; 2018 chan->frames_sent++; 2019 sent++; 2020 2021 if (skb_queue_is_last(&chan->tx_q, skb)) 2022 chan->tx_send_head = NULL; 2023 else 2024 chan->tx_send_head = skb_queue_next(&chan->tx_q, skb); 2025 2026 l2cap_do_send(chan, tx_skb); 2027 BT_DBG("Sent txseq %u", control->txseq); 2028 } 2029 2030 BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent, 2031 chan->unacked_frames, skb_queue_len(&chan->tx_q)); 2032 2033 return sent; 2034 } 2035 2036 static void l2cap_ertm_resend(struct l2cap_chan *chan) 2037 { 2038 struct l2cap_ctrl control; 2039 struct sk_buff *skb; 2040 struct sk_buff *tx_skb; 2041 u16 seq; 2042 2043 BT_DBG("chan %p", chan); 2044 2045 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) 2046 return; 2047 2048 if (__chan_is_moving(chan)) 2049 return; 2050 2051 while (chan->retrans_list.head != L2CAP_SEQ_LIST_CLEAR) { 2052 seq = l2cap_seq_list_pop(&chan->retrans_list); 2053 2054 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, seq); 2055 if (!skb) { 2056 BT_DBG("Error: Can't retransmit seq %d, frame missing", 2057 seq); 2058 continue; 2059 } 2060 2061 bt_cb(skb)->control.retries++; 2062 control = bt_cb(skb)->control; 2063 2064 if (chan->max_tx != 0 && 2065 bt_cb(skb)->control.retries > chan->max_tx) { 2066 BT_DBG("Retry limit exceeded (%d)", chan->max_tx); 2067 l2cap_send_disconn_req(chan, ECONNRESET); 2068 l2cap_seq_list_clear(&chan->retrans_list); 2069 break; 2070 } 2071 2072 control.reqseq = chan->buffer_seq; 2073 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state)) 2074 control.final = 1; 2075 else 2076 control.final = 0; 2077 2078 if (skb_cloned(skb)) { 2079 /* Cloned sk_buffs are read-only, so we need a 2080 * writeable copy 2081 */ 2082 tx_skb = skb_copy(skb, GFP_KERNEL); 2083 } else { 2084 tx_skb = skb_clone(skb, GFP_KERNEL); 2085 } 2086 2087 if (!tx_skb) { 2088 l2cap_seq_list_clear(&chan->retrans_list); 2089 break; 2090 } 2091 2092 /* Update skb contents */ 2093 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) { 2094 put_unaligned_le32(__pack_extended_control(&control), 2095 tx_skb->data + L2CAP_HDR_SIZE); 2096 } else { 2097 put_unaligned_le16(__pack_enhanced_control(&control), 2098 tx_skb->data + L2CAP_HDR_SIZE); 2099 } 2100 2101 if (chan->fcs == L2CAP_FCS_CRC16) { 2102 u16 fcs = crc16(0, (u8 *) tx_skb->data, tx_skb->len); 2103 put_unaligned_le16(fcs, skb_put(tx_skb, 2104 L2CAP_FCS_SIZE)); 2105 } 2106 2107 l2cap_do_send(chan, tx_skb); 2108 2109 BT_DBG("Resent txseq %d", control.txseq); 2110 2111 chan->last_acked_seq = chan->buffer_seq; 2112 } 2113 } 2114 2115 static void l2cap_retransmit(struct l2cap_chan *chan, 2116 struct l2cap_ctrl *control) 2117 { 2118 BT_DBG("chan %p, control %p", chan, control); 2119 2120 l2cap_seq_list_append(&chan->retrans_list, control->reqseq); 2121 l2cap_ertm_resend(chan); 2122 } 2123 2124 static void l2cap_retransmit_all(struct l2cap_chan *chan, 2125 struct l2cap_ctrl *control) 2126 { 2127 struct sk_buff *skb; 2128 2129 BT_DBG("chan %p, control %p", chan, control); 2130 2131 if (control->poll) 2132 set_bit(CONN_SEND_FBIT, &chan->conn_state); 2133 2134 l2cap_seq_list_clear(&chan->retrans_list); 2135 2136 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) 2137 return; 2138 2139 if (chan->unacked_frames) { 2140 skb_queue_walk(&chan->tx_q, skb) { 2141 if (bt_cb(skb)->control.txseq == control->reqseq || 2142 skb == chan->tx_send_head) 2143 break; 2144 } 2145 2146 skb_queue_walk_from(&chan->tx_q, skb) { 2147 if (skb == chan->tx_send_head) 2148 break; 2149 2150 l2cap_seq_list_append(&chan->retrans_list, 2151 bt_cb(skb)->control.txseq); 2152 } 2153 2154 l2cap_ertm_resend(chan); 2155 } 2156 } 2157 2158 static void l2cap_send_ack(struct l2cap_chan *chan) 2159 { 2160 struct l2cap_ctrl control; 2161 u16 frames_to_ack = __seq_offset(chan, chan->buffer_seq, 2162 chan->last_acked_seq); 2163 int threshold; 2164 2165 BT_DBG("chan %p last_acked_seq %d buffer_seq %d", 2166 chan, chan->last_acked_seq, chan->buffer_seq); 2167 2168 memset(&control, 0, sizeof(control)); 2169 control.sframe = 1; 2170 2171 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state) && 2172 chan->rx_state == L2CAP_RX_STATE_RECV) { 2173 __clear_ack_timer(chan); 2174 control.super = L2CAP_SUPER_RNR; 2175 control.reqseq = chan->buffer_seq; 2176 l2cap_send_sframe(chan, &control); 2177 } else { 2178 if (!test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) { 2179 l2cap_ertm_send(chan); 2180 /* If any i-frames were sent, they included an ack */ 2181 if (chan->buffer_seq == chan->last_acked_seq) 2182 frames_to_ack = 0; 2183 } 2184 2185 /* Ack now if the window is 3/4ths full. 2186 * Calculate without mul or div 2187 */ 2188 threshold = chan->ack_win; 2189 threshold += threshold << 1; 2190 threshold >>= 2; 2191 2192 BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack, 2193 threshold); 2194 2195 if (frames_to_ack >= threshold) { 2196 __clear_ack_timer(chan); 2197 control.super = L2CAP_SUPER_RR; 2198 control.reqseq = chan->buffer_seq; 2199 l2cap_send_sframe(chan, &control); 2200 frames_to_ack = 0; 2201 } 2202 2203 if (frames_to_ack) 2204 __set_ack_timer(chan); 2205 } 2206 } 2207 2208 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan, 2209 struct msghdr *msg, int len, 2210 int count, struct sk_buff *skb) 2211 { 2212 struct l2cap_conn *conn = chan->conn; 2213 struct sk_buff **frag; 2214 int sent = 0; 2215 2216 if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) 2217 return -EFAULT; 2218 2219 sent += count; 2220 len -= count; 2221 2222 /* Continuation fragments (no L2CAP header) */ 2223 frag = &skb_shinfo(skb)->frag_list; 2224 while (len) { 2225 struct sk_buff *tmp; 2226 2227 count = min_t(unsigned int, conn->mtu, len); 2228 2229 tmp = chan->ops->alloc_skb(chan, count, 2230 msg->msg_flags & MSG_DONTWAIT); 2231 if (IS_ERR(tmp)) 2232 return PTR_ERR(tmp); 2233 2234 *frag = tmp; 2235 2236 if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count)) 2237 return -EFAULT; 2238 2239 (*frag)->priority = skb->priority; 2240 2241 sent += count; 2242 len -= count; 2243 2244 skb->len += (*frag)->len; 2245 skb->data_len += (*frag)->len; 2246 2247 frag = &(*frag)->next; 2248 } 2249 2250 return sent; 2251 } 2252 2253 static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, 2254 struct msghdr *msg, size_t len, 2255 u32 priority) 2256 { 2257 struct l2cap_conn *conn = chan->conn; 2258 struct sk_buff *skb; 2259 int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE; 2260 struct l2cap_hdr *lh; 2261 2262 BT_DBG("chan %p len %zu priority %u", chan, len, priority); 2263 2264 count = min_t(unsigned int, (conn->mtu - hlen), len); 2265 2266 skb = chan->ops->alloc_skb(chan, count + hlen, 2267 msg->msg_flags & MSG_DONTWAIT); 2268 if (IS_ERR(skb)) 2269 return skb; 2270 2271 skb->priority = priority; 2272 2273 /* Create L2CAP header */ 2274 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 2275 lh->cid = cpu_to_le16(chan->dcid); 2276 lh->len = cpu_to_le16(len + L2CAP_PSMLEN_SIZE); 2277 put_unaligned(chan->psm, skb_put(skb, L2CAP_PSMLEN_SIZE)); 2278 2279 err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb); 2280 if (unlikely(err < 0)) { 2281 kfree_skb(skb); 2282 return ERR_PTR(err); 2283 } 2284 return skb; 2285 } 2286 2287 static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, 2288 struct msghdr *msg, size_t len, 2289 u32 priority) 2290 { 2291 struct l2cap_conn *conn = chan->conn; 2292 struct sk_buff *skb; 2293 int err, count; 2294 struct l2cap_hdr *lh; 2295 2296 BT_DBG("chan %p len %zu", chan, len); 2297 2298 count = min_t(unsigned int, (conn->mtu - L2CAP_HDR_SIZE), len); 2299 2300 skb = chan->ops->alloc_skb(chan, count + L2CAP_HDR_SIZE, 2301 msg->msg_flags & MSG_DONTWAIT); 2302 if (IS_ERR(skb)) 2303 return skb; 2304 2305 skb->priority = priority; 2306 2307 /* Create L2CAP header */ 2308 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 2309 lh->cid = cpu_to_le16(chan->dcid); 2310 lh->len = cpu_to_le16(len); 2311 2312 err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb); 2313 if (unlikely(err < 0)) { 2314 kfree_skb(skb); 2315 return ERR_PTR(err); 2316 } 2317 return skb; 2318 } 2319 2320 static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, 2321 struct msghdr *msg, size_t len, 2322 u16 sdulen) 2323 { 2324 struct l2cap_conn *conn = chan->conn; 2325 struct sk_buff *skb; 2326 int err, count, hlen; 2327 struct l2cap_hdr *lh; 2328 2329 BT_DBG("chan %p len %zu", chan, len); 2330 2331 if (!conn) 2332 return ERR_PTR(-ENOTCONN); 2333 2334 hlen = __ertm_hdr_size(chan); 2335 2336 if (sdulen) 2337 hlen += L2CAP_SDULEN_SIZE; 2338 2339 if (chan->fcs == L2CAP_FCS_CRC16) 2340 hlen += L2CAP_FCS_SIZE; 2341 2342 count = min_t(unsigned int, (conn->mtu - hlen), len); 2343 2344 skb = chan->ops->alloc_skb(chan, count + hlen, 2345 msg->msg_flags & MSG_DONTWAIT); 2346 if (IS_ERR(skb)) 2347 return skb; 2348 2349 /* Create L2CAP header */ 2350 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 2351 lh->cid = cpu_to_le16(chan->dcid); 2352 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE)); 2353 2354 /* Control header is populated later */ 2355 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 2356 put_unaligned_le32(0, skb_put(skb, L2CAP_EXT_CTRL_SIZE)); 2357 else 2358 put_unaligned_le16(0, skb_put(skb, L2CAP_ENH_CTRL_SIZE)); 2359 2360 if (sdulen) 2361 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE)); 2362 2363 err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb); 2364 if (unlikely(err < 0)) { 2365 kfree_skb(skb); 2366 return ERR_PTR(err); 2367 } 2368 2369 bt_cb(skb)->control.fcs = chan->fcs; 2370 bt_cb(skb)->control.retries = 0; 2371 return skb; 2372 } 2373 2374 static int l2cap_segment_sdu(struct l2cap_chan *chan, 2375 struct sk_buff_head *seg_queue, 2376 struct msghdr *msg, size_t len) 2377 { 2378 struct sk_buff *skb; 2379 u16 sdu_len; 2380 size_t pdu_len; 2381 u8 sar; 2382 2383 BT_DBG("chan %p, msg %p, len %zu", chan, msg, len); 2384 2385 /* It is critical that ERTM PDUs fit in a single HCI fragment, 2386 * so fragmented skbs are not used. The HCI layer's handling 2387 * of fragmented skbs is not compatible with ERTM's queueing. 2388 */ 2389 2390 /* PDU size is derived from the HCI MTU */ 2391 pdu_len = chan->conn->mtu; 2392 2393 /* Constrain PDU size for BR/EDR connections */ 2394 if (!chan->hs_hcon) 2395 pdu_len = min_t(size_t, pdu_len, L2CAP_BREDR_MAX_PAYLOAD); 2396 2397 /* Adjust for largest possible L2CAP overhead. */ 2398 if (chan->fcs) 2399 pdu_len -= L2CAP_FCS_SIZE; 2400 2401 pdu_len -= __ertm_hdr_size(chan); 2402 2403 /* Remote device may have requested smaller PDUs */ 2404 pdu_len = min_t(size_t, pdu_len, chan->remote_mps); 2405 2406 if (len <= pdu_len) { 2407 sar = L2CAP_SAR_UNSEGMENTED; 2408 sdu_len = 0; 2409 pdu_len = len; 2410 } else { 2411 sar = L2CAP_SAR_START; 2412 sdu_len = len; 2413 pdu_len -= L2CAP_SDULEN_SIZE; 2414 } 2415 2416 while (len > 0) { 2417 skb = l2cap_create_iframe_pdu(chan, msg, pdu_len, sdu_len); 2418 2419 if (IS_ERR(skb)) { 2420 __skb_queue_purge(seg_queue); 2421 return PTR_ERR(skb); 2422 } 2423 2424 bt_cb(skb)->control.sar = sar; 2425 __skb_queue_tail(seg_queue, skb); 2426 2427 len -= pdu_len; 2428 if (sdu_len) { 2429 sdu_len = 0; 2430 pdu_len += L2CAP_SDULEN_SIZE; 2431 } 2432 2433 if (len <= pdu_len) { 2434 sar = L2CAP_SAR_END; 2435 pdu_len = len; 2436 } else { 2437 sar = L2CAP_SAR_CONTINUE; 2438 } 2439 } 2440 2441 return 0; 2442 } 2443 2444 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len, 2445 u32 priority) 2446 { 2447 struct sk_buff *skb; 2448 int err; 2449 struct sk_buff_head seg_queue; 2450 2451 /* Connectionless channel */ 2452 if (chan->chan_type == L2CAP_CHAN_CONN_LESS) { 2453 skb = l2cap_create_connless_pdu(chan, msg, len, priority); 2454 if (IS_ERR(skb)) 2455 return PTR_ERR(skb); 2456 2457 l2cap_do_send(chan, skb); 2458 return len; 2459 } 2460 2461 switch (chan->mode) { 2462 case L2CAP_MODE_BASIC: 2463 /* Check outgoing MTU */ 2464 if (len > chan->omtu) 2465 return -EMSGSIZE; 2466 2467 /* Create a basic PDU */ 2468 skb = l2cap_create_basic_pdu(chan, msg, len, priority); 2469 if (IS_ERR(skb)) 2470 return PTR_ERR(skb); 2471 2472 l2cap_do_send(chan, skb); 2473 err = len; 2474 break; 2475 2476 case L2CAP_MODE_ERTM: 2477 case L2CAP_MODE_STREAMING: 2478 /* Check outgoing MTU */ 2479 if (len > chan->omtu) { 2480 err = -EMSGSIZE; 2481 break; 2482 } 2483 2484 __skb_queue_head_init(&seg_queue); 2485 2486 /* Do segmentation before calling in to the state machine, 2487 * since it's possible to block while waiting for memory 2488 * allocation. 2489 */ 2490 err = l2cap_segment_sdu(chan, &seg_queue, msg, len); 2491 2492 /* The channel could have been closed while segmenting, 2493 * check that it is still connected. 2494 */ 2495 if (chan->state != BT_CONNECTED) { 2496 __skb_queue_purge(&seg_queue); 2497 err = -ENOTCONN; 2498 } 2499 2500 if (err) 2501 break; 2502 2503 if (chan->mode == L2CAP_MODE_ERTM) 2504 l2cap_tx(chan, NULL, &seg_queue, L2CAP_EV_DATA_REQUEST); 2505 else 2506 l2cap_streaming_send(chan, &seg_queue); 2507 2508 err = len; 2509 2510 /* If the skbs were not queued for sending, they'll still be in 2511 * seg_queue and need to be purged. 2512 */ 2513 __skb_queue_purge(&seg_queue); 2514 break; 2515 2516 default: 2517 BT_DBG("bad state %1.1x", chan->mode); 2518 err = -EBADFD; 2519 } 2520 2521 return err; 2522 } 2523 2524 static void l2cap_send_srej(struct l2cap_chan *chan, u16 txseq) 2525 { 2526 struct l2cap_ctrl control; 2527 u16 seq; 2528 2529 BT_DBG("chan %p, txseq %u", chan, txseq); 2530 2531 memset(&control, 0, sizeof(control)); 2532 control.sframe = 1; 2533 control.super = L2CAP_SUPER_SREJ; 2534 2535 for (seq = chan->expected_tx_seq; seq != txseq; 2536 seq = __next_seq(chan, seq)) { 2537 if (!l2cap_ertm_seq_in_queue(&chan->srej_q, seq)) { 2538 control.reqseq = seq; 2539 l2cap_send_sframe(chan, &control); 2540 l2cap_seq_list_append(&chan->srej_list, seq); 2541 } 2542 } 2543 2544 chan->expected_tx_seq = __next_seq(chan, txseq); 2545 } 2546 2547 static void l2cap_send_srej_tail(struct l2cap_chan *chan) 2548 { 2549 struct l2cap_ctrl control; 2550 2551 BT_DBG("chan %p", chan); 2552 2553 if (chan->srej_list.tail == L2CAP_SEQ_LIST_CLEAR) 2554 return; 2555 2556 memset(&control, 0, sizeof(control)); 2557 control.sframe = 1; 2558 control.super = L2CAP_SUPER_SREJ; 2559 control.reqseq = chan->srej_list.tail; 2560 l2cap_send_sframe(chan, &control); 2561 } 2562 2563 static void l2cap_send_srej_list(struct l2cap_chan *chan, u16 txseq) 2564 { 2565 struct l2cap_ctrl control; 2566 u16 initial_head; 2567 u16 seq; 2568 2569 BT_DBG("chan %p, txseq %u", chan, txseq); 2570 2571 memset(&control, 0, sizeof(control)); 2572 control.sframe = 1; 2573 control.super = L2CAP_SUPER_SREJ; 2574 2575 /* Capture initial list head to allow only one pass through the list. */ 2576 initial_head = chan->srej_list.head; 2577 2578 do { 2579 seq = l2cap_seq_list_pop(&chan->srej_list); 2580 if (seq == txseq || seq == L2CAP_SEQ_LIST_CLEAR) 2581 break; 2582 2583 control.reqseq = seq; 2584 l2cap_send_sframe(chan, &control); 2585 l2cap_seq_list_append(&chan->srej_list, seq); 2586 } while (chan->srej_list.head != initial_head); 2587 } 2588 2589 static void l2cap_process_reqseq(struct l2cap_chan *chan, u16 reqseq) 2590 { 2591 struct sk_buff *acked_skb; 2592 u16 ackseq; 2593 2594 BT_DBG("chan %p, reqseq %u", chan, reqseq); 2595 2596 if (chan->unacked_frames == 0 || reqseq == chan->expected_ack_seq) 2597 return; 2598 2599 BT_DBG("expected_ack_seq %u, unacked_frames %u", 2600 chan->expected_ack_seq, chan->unacked_frames); 2601 2602 for (ackseq = chan->expected_ack_seq; ackseq != reqseq; 2603 ackseq = __next_seq(chan, ackseq)) { 2604 2605 acked_skb = l2cap_ertm_seq_in_queue(&chan->tx_q, ackseq); 2606 if (acked_skb) { 2607 skb_unlink(acked_skb, &chan->tx_q); 2608 kfree_skb(acked_skb); 2609 chan->unacked_frames--; 2610 } 2611 } 2612 2613 chan->expected_ack_seq = reqseq; 2614 2615 if (chan->unacked_frames == 0) 2616 __clear_retrans_timer(chan); 2617 2618 BT_DBG("unacked_frames %u", chan->unacked_frames); 2619 } 2620 2621 static void l2cap_abort_rx_srej_sent(struct l2cap_chan *chan) 2622 { 2623 BT_DBG("chan %p", chan); 2624 2625 chan->expected_tx_seq = chan->buffer_seq; 2626 l2cap_seq_list_clear(&chan->srej_list); 2627 skb_queue_purge(&chan->srej_q); 2628 chan->rx_state = L2CAP_RX_STATE_RECV; 2629 } 2630 2631 static void l2cap_tx_state_xmit(struct l2cap_chan *chan, 2632 struct l2cap_ctrl *control, 2633 struct sk_buff_head *skbs, u8 event) 2634 { 2635 BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs, 2636 event); 2637 2638 switch (event) { 2639 case L2CAP_EV_DATA_REQUEST: 2640 if (chan->tx_send_head == NULL) 2641 chan->tx_send_head = skb_peek(skbs); 2642 2643 skb_queue_splice_tail_init(skbs, &chan->tx_q); 2644 l2cap_ertm_send(chan); 2645 break; 2646 case L2CAP_EV_LOCAL_BUSY_DETECTED: 2647 BT_DBG("Enter LOCAL_BUSY"); 2648 set_bit(CONN_LOCAL_BUSY, &chan->conn_state); 2649 2650 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) { 2651 /* The SREJ_SENT state must be aborted if we are to 2652 * enter the LOCAL_BUSY state. 2653 */ 2654 l2cap_abort_rx_srej_sent(chan); 2655 } 2656 2657 l2cap_send_ack(chan); 2658 2659 break; 2660 case L2CAP_EV_LOCAL_BUSY_CLEAR: 2661 BT_DBG("Exit LOCAL_BUSY"); 2662 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state); 2663 2664 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) { 2665 struct l2cap_ctrl local_control; 2666 2667 memset(&local_control, 0, sizeof(local_control)); 2668 local_control.sframe = 1; 2669 local_control.super = L2CAP_SUPER_RR; 2670 local_control.poll = 1; 2671 local_control.reqseq = chan->buffer_seq; 2672 l2cap_send_sframe(chan, &local_control); 2673 2674 chan->retry_count = 1; 2675 __set_monitor_timer(chan); 2676 chan->tx_state = L2CAP_TX_STATE_WAIT_F; 2677 } 2678 break; 2679 case L2CAP_EV_RECV_REQSEQ_AND_FBIT: 2680 l2cap_process_reqseq(chan, control->reqseq); 2681 break; 2682 case L2CAP_EV_EXPLICIT_POLL: 2683 l2cap_send_rr_or_rnr(chan, 1); 2684 chan->retry_count = 1; 2685 __set_monitor_timer(chan); 2686 __clear_ack_timer(chan); 2687 chan->tx_state = L2CAP_TX_STATE_WAIT_F; 2688 break; 2689 case L2CAP_EV_RETRANS_TO: 2690 l2cap_send_rr_or_rnr(chan, 1); 2691 chan->retry_count = 1; 2692 __set_monitor_timer(chan); 2693 chan->tx_state = L2CAP_TX_STATE_WAIT_F; 2694 break; 2695 case L2CAP_EV_RECV_FBIT: 2696 /* Nothing to process */ 2697 break; 2698 default: 2699 break; 2700 } 2701 } 2702 2703 static void l2cap_tx_state_wait_f(struct l2cap_chan *chan, 2704 struct l2cap_ctrl *control, 2705 struct sk_buff_head *skbs, u8 event) 2706 { 2707 BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs, 2708 event); 2709 2710 switch (event) { 2711 case L2CAP_EV_DATA_REQUEST: 2712 if (chan->tx_send_head == NULL) 2713 chan->tx_send_head = skb_peek(skbs); 2714 /* Queue data, but don't send. */ 2715 skb_queue_splice_tail_init(skbs, &chan->tx_q); 2716 break; 2717 case L2CAP_EV_LOCAL_BUSY_DETECTED: 2718 BT_DBG("Enter LOCAL_BUSY"); 2719 set_bit(CONN_LOCAL_BUSY, &chan->conn_state); 2720 2721 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) { 2722 /* The SREJ_SENT state must be aborted if we are to 2723 * enter the LOCAL_BUSY state. 2724 */ 2725 l2cap_abort_rx_srej_sent(chan); 2726 } 2727 2728 l2cap_send_ack(chan); 2729 2730 break; 2731 case L2CAP_EV_LOCAL_BUSY_CLEAR: 2732 BT_DBG("Exit LOCAL_BUSY"); 2733 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state); 2734 2735 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) { 2736 struct l2cap_ctrl local_control; 2737 memset(&local_control, 0, sizeof(local_control)); 2738 local_control.sframe = 1; 2739 local_control.super = L2CAP_SUPER_RR; 2740 local_control.poll = 1; 2741 local_control.reqseq = chan->buffer_seq; 2742 l2cap_send_sframe(chan, &local_control); 2743 2744 chan->retry_count = 1; 2745 __set_monitor_timer(chan); 2746 chan->tx_state = L2CAP_TX_STATE_WAIT_F; 2747 } 2748 break; 2749 case L2CAP_EV_RECV_REQSEQ_AND_FBIT: 2750 l2cap_process_reqseq(chan, control->reqseq); 2751 2752 /* Fall through */ 2753 2754 case L2CAP_EV_RECV_FBIT: 2755 if (control && control->final) { 2756 __clear_monitor_timer(chan); 2757 if (chan->unacked_frames > 0) 2758 __set_retrans_timer(chan); 2759 chan->retry_count = 0; 2760 chan->tx_state = L2CAP_TX_STATE_XMIT; 2761 BT_DBG("recv fbit tx_state 0x2.2%x", chan->tx_state); 2762 } 2763 break; 2764 case L2CAP_EV_EXPLICIT_POLL: 2765 /* Ignore */ 2766 break; 2767 case L2CAP_EV_MONITOR_TO: 2768 if (chan->max_tx == 0 || chan->retry_count < chan->max_tx) { 2769 l2cap_send_rr_or_rnr(chan, 1); 2770 __set_monitor_timer(chan); 2771 chan->retry_count++; 2772 } else { 2773 l2cap_send_disconn_req(chan, ECONNABORTED); 2774 } 2775 break; 2776 default: 2777 break; 2778 } 2779 } 2780 2781 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control, 2782 struct sk_buff_head *skbs, u8 event) 2783 { 2784 BT_DBG("chan %p, control %p, skbs %p, event %d, state %d", 2785 chan, control, skbs, event, chan->tx_state); 2786 2787 switch (chan->tx_state) { 2788 case L2CAP_TX_STATE_XMIT: 2789 l2cap_tx_state_xmit(chan, control, skbs, event); 2790 break; 2791 case L2CAP_TX_STATE_WAIT_F: 2792 l2cap_tx_state_wait_f(chan, control, skbs, event); 2793 break; 2794 default: 2795 /* Ignore event */ 2796 break; 2797 } 2798 } 2799 2800 static void l2cap_pass_to_tx(struct l2cap_chan *chan, 2801 struct l2cap_ctrl *control) 2802 { 2803 BT_DBG("chan %p, control %p", chan, control); 2804 l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_REQSEQ_AND_FBIT); 2805 } 2806 2807 static void l2cap_pass_to_tx_fbit(struct l2cap_chan *chan, 2808 struct l2cap_ctrl *control) 2809 { 2810 BT_DBG("chan %p, control %p", chan, control); 2811 l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_FBIT); 2812 } 2813 2814 /* Copy frame to all raw sockets on that connection */ 2815 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb) 2816 { 2817 struct sk_buff *nskb; 2818 struct l2cap_chan *chan; 2819 2820 BT_DBG("conn %p", conn); 2821 2822 mutex_lock(&conn->chan_lock); 2823 2824 list_for_each_entry(chan, &conn->chan_l, list) { 2825 struct sock *sk = chan->sk; 2826 if (chan->chan_type != L2CAP_CHAN_RAW) 2827 continue; 2828 2829 /* Don't send frame to the socket it came from */ 2830 if (skb->sk == sk) 2831 continue; 2832 nskb = skb_clone(skb, GFP_KERNEL); 2833 if (!nskb) 2834 continue; 2835 2836 if (chan->ops->recv(chan, nskb)) 2837 kfree_skb(nskb); 2838 } 2839 2840 mutex_unlock(&conn->chan_lock); 2841 } 2842 2843 /* ---- L2CAP signalling commands ---- */ 2844 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, u8 code, 2845 u8 ident, u16 dlen, void *data) 2846 { 2847 struct sk_buff *skb, **frag; 2848 struct l2cap_cmd_hdr *cmd; 2849 struct l2cap_hdr *lh; 2850 int len, count; 2851 2852 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u", 2853 conn, code, ident, dlen); 2854 2855 if (conn->mtu < L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE) 2856 return NULL; 2857 2858 len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen; 2859 count = min_t(unsigned int, conn->mtu, len); 2860 2861 skb = bt_skb_alloc(count, GFP_KERNEL); 2862 if (!skb) 2863 return NULL; 2864 2865 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 2866 lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen); 2867 2868 if (conn->hcon->type == LE_LINK) 2869 lh->cid = __constant_cpu_to_le16(L2CAP_CID_LE_SIGNALING); 2870 else 2871 lh->cid = __constant_cpu_to_le16(L2CAP_CID_SIGNALING); 2872 2873 cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE); 2874 cmd->code = code; 2875 cmd->ident = ident; 2876 cmd->len = cpu_to_le16(dlen); 2877 2878 if (dlen) { 2879 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE; 2880 memcpy(skb_put(skb, count), data, count); 2881 data += count; 2882 } 2883 2884 len -= skb->len; 2885 2886 /* Continuation fragments (no L2CAP header) */ 2887 frag = &skb_shinfo(skb)->frag_list; 2888 while (len) { 2889 count = min_t(unsigned int, conn->mtu, len); 2890 2891 *frag = bt_skb_alloc(count, GFP_KERNEL); 2892 if (!*frag) 2893 goto fail; 2894 2895 memcpy(skb_put(*frag, count), data, count); 2896 2897 len -= count; 2898 data += count; 2899 2900 frag = &(*frag)->next; 2901 } 2902 2903 return skb; 2904 2905 fail: 2906 kfree_skb(skb); 2907 return NULL; 2908 } 2909 2910 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, 2911 unsigned long *val) 2912 { 2913 struct l2cap_conf_opt *opt = *ptr; 2914 int len; 2915 2916 len = L2CAP_CONF_OPT_SIZE + opt->len; 2917 *ptr += len; 2918 2919 *type = opt->type; 2920 *olen = opt->len; 2921 2922 switch (opt->len) { 2923 case 1: 2924 *val = *((u8 *) opt->val); 2925 break; 2926 2927 case 2: 2928 *val = get_unaligned_le16(opt->val); 2929 break; 2930 2931 case 4: 2932 *val = get_unaligned_le32(opt->val); 2933 break; 2934 2935 default: 2936 *val = (unsigned long) opt->val; 2937 break; 2938 } 2939 2940 BT_DBG("type 0x%2.2x len %u val 0x%lx", *type, opt->len, *val); 2941 return len; 2942 } 2943 2944 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val) 2945 { 2946 struct l2cap_conf_opt *opt = *ptr; 2947 2948 BT_DBG("type 0x%2.2x len %u val 0x%lx", type, len, val); 2949 2950 opt->type = type; 2951 opt->len = len; 2952 2953 switch (len) { 2954 case 1: 2955 *((u8 *) opt->val) = val; 2956 break; 2957 2958 case 2: 2959 put_unaligned_le16(val, opt->val); 2960 break; 2961 2962 case 4: 2963 put_unaligned_le32(val, opt->val); 2964 break; 2965 2966 default: 2967 memcpy(opt->val, (void *) val, len); 2968 break; 2969 } 2970 2971 *ptr += L2CAP_CONF_OPT_SIZE + len; 2972 } 2973 2974 static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan) 2975 { 2976 struct l2cap_conf_efs efs; 2977 2978 switch (chan->mode) { 2979 case L2CAP_MODE_ERTM: 2980 efs.id = chan->local_id; 2981 efs.stype = chan->local_stype; 2982 efs.msdu = cpu_to_le16(chan->local_msdu); 2983 efs.sdu_itime = cpu_to_le32(chan->local_sdu_itime); 2984 efs.acc_lat = __constant_cpu_to_le32(L2CAP_DEFAULT_ACC_LAT); 2985 efs.flush_to = __constant_cpu_to_le32(L2CAP_EFS_DEFAULT_FLUSH_TO); 2986 break; 2987 2988 case L2CAP_MODE_STREAMING: 2989 efs.id = 1; 2990 efs.stype = L2CAP_SERV_BESTEFFORT; 2991 efs.msdu = cpu_to_le16(chan->local_msdu); 2992 efs.sdu_itime = cpu_to_le32(chan->local_sdu_itime); 2993 efs.acc_lat = 0; 2994 efs.flush_to = 0; 2995 break; 2996 2997 default: 2998 return; 2999 } 3000 3001 l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs), 3002 (unsigned long) &efs); 3003 } 3004 3005 static void l2cap_ack_timeout(struct work_struct *work) 3006 { 3007 struct l2cap_chan *chan = container_of(work, struct l2cap_chan, 3008 ack_timer.work); 3009 u16 frames_to_ack; 3010 3011 BT_DBG("chan %p", chan); 3012 3013 l2cap_chan_lock(chan); 3014 3015 frames_to_ack = __seq_offset(chan, chan->buffer_seq, 3016 chan->last_acked_seq); 3017 3018 if (frames_to_ack) 3019 l2cap_send_rr_or_rnr(chan, 0); 3020 3021 l2cap_chan_unlock(chan); 3022 l2cap_chan_put(chan); 3023 } 3024 3025 int l2cap_ertm_init(struct l2cap_chan *chan) 3026 { 3027 int err; 3028 3029 chan->next_tx_seq = 0; 3030 chan->expected_tx_seq = 0; 3031 chan->expected_ack_seq = 0; 3032 chan->unacked_frames = 0; 3033 chan->buffer_seq = 0; 3034 chan->frames_sent = 0; 3035 chan->last_acked_seq = 0; 3036 chan->sdu = NULL; 3037 chan->sdu_last_frag = NULL; 3038 chan->sdu_len = 0; 3039 3040 skb_queue_head_init(&chan->tx_q); 3041 3042 chan->local_amp_id = 0; 3043 chan->move_id = 0; 3044 chan->move_state = L2CAP_MOVE_STABLE; 3045 chan->move_role = L2CAP_MOVE_ROLE_NONE; 3046 3047 if (chan->mode != L2CAP_MODE_ERTM) 3048 return 0; 3049 3050 chan->rx_state = L2CAP_RX_STATE_RECV; 3051 chan->tx_state = L2CAP_TX_STATE_XMIT; 3052 3053 INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout); 3054 INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout); 3055 INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout); 3056 3057 skb_queue_head_init(&chan->srej_q); 3058 3059 err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win); 3060 if (err < 0) 3061 return err; 3062 3063 err = l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win); 3064 if (err < 0) 3065 l2cap_seq_list_free(&chan->srej_list); 3066 3067 return err; 3068 } 3069 3070 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask) 3071 { 3072 switch (mode) { 3073 case L2CAP_MODE_STREAMING: 3074 case L2CAP_MODE_ERTM: 3075 if (l2cap_mode_supported(mode, remote_feat_mask)) 3076 return mode; 3077 /* fall through */ 3078 default: 3079 return L2CAP_MODE_BASIC; 3080 } 3081 } 3082 3083 static inline bool __l2cap_ews_supported(struct l2cap_chan *chan) 3084 { 3085 return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW; 3086 } 3087 3088 static inline bool __l2cap_efs_supported(struct l2cap_chan *chan) 3089 { 3090 return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW; 3091 } 3092 3093 static void __l2cap_set_ertm_timeouts(struct l2cap_chan *chan, 3094 struct l2cap_conf_rfc *rfc) 3095 { 3096 if (chan->local_amp_id && chan->hs_hcon) { 3097 u64 ertm_to = chan->hs_hcon->hdev->amp_be_flush_to; 3098 3099 /* Class 1 devices have must have ERTM timeouts 3100 * exceeding the Link Supervision Timeout. The 3101 * default Link Supervision Timeout for AMP 3102 * controllers is 10 seconds. 3103 * 3104 * Class 1 devices use 0xffffffff for their 3105 * best-effort flush timeout, so the clamping logic 3106 * will result in a timeout that meets the above 3107 * requirement. ERTM timeouts are 16-bit values, so 3108 * the maximum timeout is 65.535 seconds. 3109 */ 3110 3111 /* Convert timeout to milliseconds and round */ 3112 ertm_to = DIV_ROUND_UP_ULL(ertm_to, 1000); 3113 3114 /* This is the recommended formula for class 2 devices 3115 * that start ERTM timers when packets are sent to the 3116 * controller. 3117 */ 3118 ertm_to = 3 * ertm_to + 500; 3119 3120 if (ertm_to > 0xffff) 3121 ertm_to = 0xffff; 3122 3123 rfc->retrans_timeout = cpu_to_le16((u16) ertm_to); 3124 rfc->monitor_timeout = rfc->retrans_timeout; 3125 } else { 3126 rfc->retrans_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO); 3127 rfc->monitor_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO); 3128 } 3129 } 3130 3131 static inline void l2cap_txwin_setup(struct l2cap_chan *chan) 3132 { 3133 if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW && 3134 __l2cap_ews_supported(chan)) { 3135 /* use extended control field */ 3136 set_bit(FLAG_EXT_CTRL, &chan->flags); 3137 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW; 3138 } else { 3139 chan->tx_win = min_t(u16, chan->tx_win, 3140 L2CAP_DEFAULT_TX_WINDOW); 3141 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW; 3142 } 3143 chan->ack_win = chan->tx_win; 3144 } 3145 3146 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data) 3147 { 3148 struct l2cap_conf_req *req = data; 3149 struct l2cap_conf_rfc rfc = { .mode = chan->mode }; 3150 void *ptr = req->data; 3151 u16 size; 3152 3153 BT_DBG("chan %p", chan); 3154 3155 if (chan->num_conf_req || chan->num_conf_rsp) 3156 goto done; 3157 3158 switch (chan->mode) { 3159 case L2CAP_MODE_STREAMING: 3160 case L2CAP_MODE_ERTM: 3161 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) 3162 break; 3163 3164 if (__l2cap_efs_supported(chan)) 3165 set_bit(FLAG_EFS_ENABLE, &chan->flags); 3166 3167 /* fall through */ 3168 default: 3169 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask); 3170 break; 3171 } 3172 3173 done: 3174 if (chan->imtu != L2CAP_DEFAULT_MTU) 3175 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu); 3176 3177 switch (chan->mode) { 3178 case L2CAP_MODE_BASIC: 3179 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) && 3180 !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING)) 3181 break; 3182 3183 rfc.mode = L2CAP_MODE_BASIC; 3184 rfc.txwin_size = 0; 3185 rfc.max_transmit = 0; 3186 rfc.retrans_timeout = 0; 3187 rfc.monitor_timeout = 0; 3188 rfc.max_pdu_size = 0; 3189 3190 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 3191 (unsigned long) &rfc); 3192 break; 3193 3194 case L2CAP_MODE_ERTM: 3195 rfc.mode = L2CAP_MODE_ERTM; 3196 rfc.max_transmit = chan->max_tx; 3197 3198 __l2cap_set_ertm_timeouts(chan, &rfc); 3199 3200 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu - 3201 L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE - 3202 L2CAP_FCS_SIZE); 3203 rfc.max_pdu_size = cpu_to_le16(size); 3204 3205 l2cap_txwin_setup(chan); 3206 3207 rfc.txwin_size = min_t(u16, chan->tx_win, 3208 L2CAP_DEFAULT_TX_WINDOW); 3209 3210 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 3211 (unsigned long) &rfc); 3212 3213 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) 3214 l2cap_add_opt_efs(&ptr, chan); 3215 3216 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 3217 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2, 3218 chan->tx_win); 3219 3220 if (chan->conn->feat_mask & L2CAP_FEAT_FCS) 3221 if (chan->fcs == L2CAP_FCS_NONE || 3222 test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) { 3223 chan->fcs = L2CAP_FCS_NONE; 3224 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, 3225 chan->fcs); 3226 } 3227 break; 3228 3229 case L2CAP_MODE_STREAMING: 3230 l2cap_txwin_setup(chan); 3231 rfc.mode = L2CAP_MODE_STREAMING; 3232 rfc.txwin_size = 0; 3233 rfc.max_transmit = 0; 3234 rfc.retrans_timeout = 0; 3235 rfc.monitor_timeout = 0; 3236 3237 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu - 3238 L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE - 3239 L2CAP_FCS_SIZE); 3240 rfc.max_pdu_size = cpu_to_le16(size); 3241 3242 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 3243 (unsigned long) &rfc); 3244 3245 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) 3246 l2cap_add_opt_efs(&ptr, chan); 3247 3248 if (chan->conn->feat_mask & L2CAP_FEAT_FCS) 3249 if (chan->fcs == L2CAP_FCS_NONE || 3250 test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) { 3251 chan->fcs = L2CAP_FCS_NONE; 3252 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, 3253 chan->fcs); 3254 } 3255 break; 3256 } 3257 3258 req->dcid = cpu_to_le16(chan->dcid); 3259 req->flags = __constant_cpu_to_le16(0); 3260 3261 return ptr - data; 3262 } 3263 3264 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data) 3265 { 3266 struct l2cap_conf_rsp *rsp = data; 3267 void *ptr = rsp->data; 3268 void *req = chan->conf_req; 3269 int len = chan->conf_len; 3270 int type, hint, olen; 3271 unsigned long val; 3272 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC }; 3273 struct l2cap_conf_efs efs; 3274 u8 remote_efs = 0; 3275 u16 mtu = L2CAP_DEFAULT_MTU; 3276 u16 result = L2CAP_CONF_SUCCESS; 3277 u16 size; 3278 3279 BT_DBG("chan %p", chan); 3280 3281 while (len >= L2CAP_CONF_OPT_SIZE) { 3282 len -= l2cap_get_conf_opt(&req, &type, &olen, &val); 3283 3284 hint = type & L2CAP_CONF_HINT; 3285 type &= L2CAP_CONF_MASK; 3286 3287 switch (type) { 3288 case L2CAP_CONF_MTU: 3289 mtu = val; 3290 break; 3291 3292 case L2CAP_CONF_FLUSH_TO: 3293 chan->flush_to = val; 3294 break; 3295 3296 case L2CAP_CONF_QOS: 3297 break; 3298 3299 case L2CAP_CONF_RFC: 3300 if (olen == sizeof(rfc)) 3301 memcpy(&rfc, (void *) val, olen); 3302 break; 3303 3304 case L2CAP_CONF_FCS: 3305 if (val == L2CAP_FCS_NONE) 3306 set_bit(CONF_RECV_NO_FCS, &chan->conf_state); 3307 break; 3308 3309 case L2CAP_CONF_EFS: 3310 remote_efs = 1; 3311 if (olen == sizeof(efs)) 3312 memcpy(&efs, (void *) val, olen); 3313 break; 3314 3315 case L2CAP_CONF_EWS: 3316 if (!enable_hs) 3317 return -ECONNREFUSED; 3318 3319 set_bit(FLAG_EXT_CTRL, &chan->flags); 3320 set_bit(CONF_EWS_RECV, &chan->conf_state); 3321 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW; 3322 chan->remote_tx_win = val; 3323 break; 3324 3325 default: 3326 if (hint) 3327 break; 3328 3329 result = L2CAP_CONF_UNKNOWN; 3330 *((u8 *) ptr++) = type; 3331 break; 3332 } 3333 } 3334 3335 if (chan->num_conf_rsp || chan->num_conf_req > 1) 3336 goto done; 3337 3338 switch (chan->mode) { 3339 case L2CAP_MODE_STREAMING: 3340 case L2CAP_MODE_ERTM: 3341 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) { 3342 chan->mode = l2cap_select_mode(rfc.mode, 3343 chan->conn->feat_mask); 3344 break; 3345 } 3346 3347 if (remote_efs) { 3348 if (__l2cap_efs_supported(chan)) 3349 set_bit(FLAG_EFS_ENABLE, &chan->flags); 3350 else 3351 return -ECONNREFUSED; 3352 } 3353 3354 if (chan->mode != rfc.mode) 3355 return -ECONNREFUSED; 3356 3357 break; 3358 } 3359 3360 done: 3361 if (chan->mode != rfc.mode) { 3362 result = L2CAP_CONF_UNACCEPT; 3363 rfc.mode = chan->mode; 3364 3365 if (chan->num_conf_rsp == 1) 3366 return -ECONNREFUSED; 3367 3368 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 3369 (unsigned long) &rfc); 3370 } 3371 3372 if (result == L2CAP_CONF_SUCCESS) { 3373 /* Configure output options and let the other side know 3374 * which ones we don't like. */ 3375 3376 if (mtu < L2CAP_DEFAULT_MIN_MTU) 3377 result = L2CAP_CONF_UNACCEPT; 3378 else { 3379 chan->omtu = mtu; 3380 set_bit(CONF_MTU_DONE, &chan->conf_state); 3381 } 3382 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu); 3383 3384 if (remote_efs) { 3385 if (chan->local_stype != L2CAP_SERV_NOTRAFIC && 3386 efs.stype != L2CAP_SERV_NOTRAFIC && 3387 efs.stype != chan->local_stype) { 3388 3389 result = L2CAP_CONF_UNACCEPT; 3390 3391 if (chan->num_conf_req >= 1) 3392 return -ECONNREFUSED; 3393 3394 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, 3395 sizeof(efs), 3396 (unsigned long) &efs); 3397 } else { 3398 /* Send PENDING Conf Rsp */ 3399 result = L2CAP_CONF_PENDING; 3400 set_bit(CONF_LOC_CONF_PEND, &chan->conf_state); 3401 } 3402 } 3403 3404 switch (rfc.mode) { 3405 case L2CAP_MODE_BASIC: 3406 chan->fcs = L2CAP_FCS_NONE; 3407 set_bit(CONF_MODE_DONE, &chan->conf_state); 3408 break; 3409 3410 case L2CAP_MODE_ERTM: 3411 if (!test_bit(CONF_EWS_RECV, &chan->conf_state)) 3412 chan->remote_tx_win = rfc.txwin_size; 3413 else 3414 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW; 3415 3416 chan->remote_max_tx = rfc.max_transmit; 3417 3418 size = min_t(u16, le16_to_cpu(rfc.max_pdu_size), 3419 chan->conn->mtu - L2CAP_EXT_HDR_SIZE - 3420 L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE); 3421 rfc.max_pdu_size = cpu_to_le16(size); 3422 chan->remote_mps = size; 3423 3424 __l2cap_set_ertm_timeouts(chan, &rfc); 3425 3426 set_bit(CONF_MODE_DONE, &chan->conf_state); 3427 3428 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, 3429 sizeof(rfc), (unsigned long) &rfc); 3430 3431 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) { 3432 chan->remote_id = efs.id; 3433 chan->remote_stype = efs.stype; 3434 chan->remote_msdu = le16_to_cpu(efs.msdu); 3435 chan->remote_flush_to = 3436 le32_to_cpu(efs.flush_to); 3437 chan->remote_acc_lat = 3438 le32_to_cpu(efs.acc_lat); 3439 chan->remote_sdu_itime = 3440 le32_to_cpu(efs.sdu_itime); 3441 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, 3442 sizeof(efs), 3443 (unsigned long) &efs); 3444 } 3445 break; 3446 3447 case L2CAP_MODE_STREAMING: 3448 size = min_t(u16, le16_to_cpu(rfc.max_pdu_size), 3449 chan->conn->mtu - L2CAP_EXT_HDR_SIZE - 3450 L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE); 3451 rfc.max_pdu_size = cpu_to_le16(size); 3452 chan->remote_mps = size; 3453 3454 set_bit(CONF_MODE_DONE, &chan->conf_state); 3455 3456 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), 3457 (unsigned long) &rfc); 3458 3459 break; 3460 3461 default: 3462 result = L2CAP_CONF_UNACCEPT; 3463 3464 memset(&rfc, 0, sizeof(rfc)); 3465 rfc.mode = chan->mode; 3466 } 3467 3468 if (result == L2CAP_CONF_SUCCESS) 3469 set_bit(CONF_OUTPUT_DONE, &chan->conf_state); 3470 } 3471 rsp->scid = cpu_to_le16(chan->dcid); 3472 rsp->result = cpu_to_le16(result); 3473 rsp->flags = __constant_cpu_to_le16(0); 3474 3475 return ptr - data; 3476 } 3477 3478 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, 3479 void *data, u16 *result) 3480 { 3481 struct l2cap_conf_req *req = data; 3482 void *ptr = req->data; 3483 int type, olen; 3484 unsigned long val; 3485 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC }; 3486 struct l2cap_conf_efs efs; 3487 3488 BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data); 3489 3490 while (len >= L2CAP_CONF_OPT_SIZE) { 3491 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val); 3492 3493 switch (type) { 3494 case L2CAP_CONF_MTU: 3495 if (val < L2CAP_DEFAULT_MIN_MTU) { 3496 *result = L2CAP_CONF_UNACCEPT; 3497 chan->imtu = L2CAP_DEFAULT_MIN_MTU; 3498 } else 3499 chan->imtu = val; 3500 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu); 3501 break; 3502 3503 case L2CAP_CONF_FLUSH_TO: 3504 chan->flush_to = val; 3505 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 3506 2, chan->flush_to); 3507 break; 3508 3509 case L2CAP_CONF_RFC: 3510 if (olen == sizeof(rfc)) 3511 memcpy(&rfc, (void *)val, olen); 3512 3513 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) && 3514 rfc.mode != chan->mode) 3515 return -ECONNREFUSED; 3516 3517 chan->fcs = 0; 3518 3519 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, 3520 sizeof(rfc), (unsigned long) &rfc); 3521 break; 3522 3523 case L2CAP_CONF_EWS: 3524 chan->ack_win = min_t(u16, val, chan->ack_win); 3525 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2, 3526 chan->tx_win); 3527 break; 3528 3529 case L2CAP_CONF_EFS: 3530 if (olen == sizeof(efs)) 3531 memcpy(&efs, (void *)val, olen); 3532 3533 if (chan->local_stype != L2CAP_SERV_NOTRAFIC && 3534 efs.stype != L2CAP_SERV_NOTRAFIC && 3535 efs.stype != chan->local_stype) 3536 return -ECONNREFUSED; 3537 3538 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs), 3539 (unsigned long) &efs); 3540 break; 3541 3542 case L2CAP_CONF_FCS: 3543 if (*result == L2CAP_CONF_PENDING) 3544 if (val == L2CAP_FCS_NONE) 3545 set_bit(CONF_RECV_NO_FCS, 3546 &chan->conf_state); 3547 break; 3548 } 3549 } 3550 3551 if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode) 3552 return -ECONNREFUSED; 3553 3554 chan->mode = rfc.mode; 3555 3556 if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) { 3557 switch (rfc.mode) { 3558 case L2CAP_MODE_ERTM: 3559 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout); 3560 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout); 3561 chan->mps = le16_to_cpu(rfc.max_pdu_size); 3562 if (!test_bit(FLAG_EXT_CTRL, &chan->flags)) 3563 chan->ack_win = min_t(u16, chan->ack_win, 3564 rfc.txwin_size); 3565 3566 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) { 3567 chan->local_msdu = le16_to_cpu(efs.msdu); 3568 chan->local_sdu_itime = 3569 le32_to_cpu(efs.sdu_itime); 3570 chan->local_acc_lat = le32_to_cpu(efs.acc_lat); 3571 chan->local_flush_to = 3572 le32_to_cpu(efs.flush_to); 3573 } 3574 break; 3575 3576 case L2CAP_MODE_STREAMING: 3577 chan->mps = le16_to_cpu(rfc.max_pdu_size); 3578 } 3579 } 3580 3581 req->dcid = cpu_to_le16(chan->dcid); 3582 req->flags = __constant_cpu_to_le16(0); 3583 3584 return ptr - data; 3585 } 3586 3587 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, 3588 u16 result, u16 flags) 3589 { 3590 struct l2cap_conf_rsp *rsp = data; 3591 void *ptr = rsp->data; 3592 3593 BT_DBG("chan %p", chan); 3594 3595 rsp->scid = cpu_to_le16(chan->dcid); 3596 rsp->result = cpu_to_le16(result); 3597 rsp->flags = cpu_to_le16(flags); 3598 3599 return ptr - data; 3600 } 3601 3602 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan) 3603 { 3604 struct l2cap_conn_rsp rsp; 3605 struct l2cap_conn *conn = chan->conn; 3606 u8 buf[128]; 3607 u8 rsp_code; 3608 3609 rsp.scid = cpu_to_le16(chan->dcid); 3610 rsp.dcid = cpu_to_le16(chan->scid); 3611 rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS); 3612 rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO); 3613 3614 if (chan->hs_hcon) 3615 rsp_code = L2CAP_CREATE_CHAN_RSP; 3616 else 3617 rsp_code = L2CAP_CONN_RSP; 3618 3619 BT_DBG("chan %p rsp_code %u", chan, rsp_code); 3620 3621 l2cap_send_cmd(conn, chan->ident, rsp_code, sizeof(rsp), &rsp); 3622 3623 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) 3624 return; 3625 3626 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 3627 l2cap_build_conf_req(chan, buf), buf); 3628 chan->num_conf_req++; 3629 } 3630 3631 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len) 3632 { 3633 int type, olen; 3634 unsigned long val; 3635 /* Use sane default values in case a misbehaving remote device 3636 * did not send an RFC or extended window size option. 3637 */ 3638 u16 txwin_ext = chan->ack_win; 3639 struct l2cap_conf_rfc rfc = { 3640 .mode = chan->mode, 3641 .retrans_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO), 3642 .monitor_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO), 3643 .max_pdu_size = cpu_to_le16(chan->imtu), 3644 .txwin_size = min_t(u16, chan->ack_win, L2CAP_DEFAULT_TX_WINDOW), 3645 }; 3646 3647 BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len); 3648 3649 if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING)) 3650 return; 3651 3652 while (len >= L2CAP_CONF_OPT_SIZE) { 3653 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val); 3654 3655 switch (type) { 3656 case L2CAP_CONF_RFC: 3657 if (olen == sizeof(rfc)) 3658 memcpy(&rfc, (void *)val, olen); 3659 break; 3660 case L2CAP_CONF_EWS: 3661 txwin_ext = val; 3662 break; 3663 } 3664 } 3665 3666 switch (rfc.mode) { 3667 case L2CAP_MODE_ERTM: 3668 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout); 3669 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout); 3670 chan->mps = le16_to_cpu(rfc.max_pdu_size); 3671 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 3672 chan->ack_win = min_t(u16, chan->ack_win, txwin_ext); 3673 else 3674 chan->ack_win = min_t(u16, chan->ack_win, 3675 rfc.txwin_size); 3676 break; 3677 case L2CAP_MODE_STREAMING: 3678 chan->mps = le16_to_cpu(rfc.max_pdu_size); 3679 } 3680 } 3681 3682 static inline int l2cap_command_rej(struct l2cap_conn *conn, 3683 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 3684 u8 *data) 3685 { 3686 struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data; 3687 3688 if (cmd_len < sizeof(*rej)) 3689 return -EPROTO; 3690 3691 if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD) 3692 return 0; 3693 3694 if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) && 3695 cmd->ident == conn->info_ident) { 3696 cancel_delayed_work(&conn->info_timer); 3697 3698 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; 3699 conn->info_ident = 0; 3700 3701 l2cap_conn_start(conn); 3702 } 3703 3704 return 0; 3705 } 3706 3707 static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn, 3708 struct l2cap_cmd_hdr *cmd, 3709 u8 *data, u8 rsp_code, u8 amp_id) 3710 { 3711 struct l2cap_conn_req *req = (struct l2cap_conn_req *) data; 3712 struct l2cap_conn_rsp rsp; 3713 struct l2cap_chan *chan = NULL, *pchan; 3714 struct sock *parent, *sk = NULL; 3715 int result, status = L2CAP_CS_NO_INFO; 3716 3717 u16 dcid = 0, scid = __le16_to_cpu(req->scid); 3718 __le16 psm = req->psm; 3719 3720 BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid); 3721 3722 /* Check if we have socket listening on psm */ 3723 pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src, conn->dst); 3724 if (!pchan) { 3725 result = L2CAP_CR_BAD_PSM; 3726 goto sendresp; 3727 } 3728 3729 parent = pchan->sk; 3730 3731 mutex_lock(&conn->chan_lock); 3732 lock_sock(parent); 3733 3734 /* Check if the ACL is secure enough (if not SDP) */ 3735 if (psm != __constant_cpu_to_le16(L2CAP_PSM_SDP) && 3736 !hci_conn_check_link_mode(conn->hcon)) { 3737 conn->disc_reason = HCI_ERROR_AUTH_FAILURE; 3738 result = L2CAP_CR_SEC_BLOCK; 3739 goto response; 3740 } 3741 3742 result = L2CAP_CR_NO_MEM; 3743 3744 /* Check if we already have channel with that dcid */ 3745 if (__l2cap_get_chan_by_dcid(conn, scid)) 3746 goto response; 3747 3748 chan = pchan->ops->new_connection(pchan); 3749 if (!chan) 3750 goto response; 3751 3752 sk = chan->sk; 3753 3754 hci_conn_hold(conn->hcon); 3755 3756 bacpy(&bt_sk(sk)->src, conn->src); 3757 bacpy(&bt_sk(sk)->dst, conn->dst); 3758 chan->psm = psm; 3759 chan->dcid = scid; 3760 chan->local_amp_id = amp_id; 3761 3762 __l2cap_chan_add(conn, chan); 3763 3764 dcid = chan->scid; 3765 3766 __set_chan_timer(chan, sk->sk_sndtimeo); 3767 3768 chan->ident = cmd->ident; 3769 3770 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) { 3771 if (l2cap_chan_check_security(chan)) { 3772 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { 3773 __l2cap_state_change(chan, BT_CONNECT2); 3774 result = L2CAP_CR_PEND; 3775 status = L2CAP_CS_AUTHOR_PEND; 3776 chan->ops->defer(chan); 3777 } else { 3778 /* Force pending result for AMP controllers. 3779 * The connection will succeed after the 3780 * physical link is up. 3781 */ 3782 if (amp_id) { 3783 __l2cap_state_change(chan, BT_CONNECT2); 3784 result = L2CAP_CR_PEND; 3785 } else { 3786 __l2cap_state_change(chan, BT_CONFIG); 3787 result = L2CAP_CR_SUCCESS; 3788 } 3789 status = L2CAP_CS_NO_INFO; 3790 } 3791 } else { 3792 __l2cap_state_change(chan, BT_CONNECT2); 3793 result = L2CAP_CR_PEND; 3794 status = L2CAP_CS_AUTHEN_PEND; 3795 } 3796 } else { 3797 __l2cap_state_change(chan, BT_CONNECT2); 3798 result = L2CAP_CR_PEND; 3799 status = L2CAP_CS_NO_INFO; 3800 } 3801 3802 response: 3803 release_sock(parent); 3804 mutex_unlock(&conn->chan_lock); 3805 3806 sendresp: 3807 rsp.scid = cpu_to_le16(scid); 3808 rsp.dcid = cpu_to_le16(dcid); 3809 rsp.result = cpu_to_le16(result); 3810 rsp.status = cpu_to_le16(status); 3811 l2cap_send_cmd(conn, cmd->ident, rsp_code, sizeof(rsp), &rsp); 3812 3813 if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) { 3814 struct l2cap_info_req info; 3815 info.type = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK); 3816 3817 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT; 3818 conn->info_ident = l2cap_get_ident(conn); 3819 3820 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT); 3821 3822 l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ, 3823 sizeof(info), &info); 3824 } 3825 3826 if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) && 3827 result == L2CAP_CR_SUCCESS) { 3828 u8 buf[128]; 3829 set_bit(CONF_REQ_SENT, &chan->conf_state); 3830 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 3831 l2cap_build_conf_req(chan, buf), buf); 3832 chan->num_conf_req++; 3833 } 3834 3835 return chan; 3836 } 3837 3838 static int l2cap_connect_req(struct l2cap_conn *conn, 3839 struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data) 3840 { 3841 struct hci_dev *hdev = conn->hcon->hdev; 3842 struct hci_conn *hcon = conn->hcon; 3843 3844 if (cmd_len < sizeof(struct l2cap_conn_req)) 3845 return -EPROTO; 3846 3847 hci_dev_lock(hdev); 3848 if (test_bit(HCI_MGMT, &hdev->dev_flags) && 3849 !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags)) 3850 mgmt_device_connected(hdev, &hcon->dst, hcon->type, 3851 hcon->dst_type, 0, NULL, 0, 3852 hcon->dev_class); 3853 hci_dev_unlock(hdev); 3854 3855 l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0); 3856 return 0; 3857 } 3858 3859 static int l2cap_connect_create_rsp(struct l2cap_conn *conn, 3860 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 3861 u8 *data) 3862 { 3863 struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data; 3864 u16 scid, dcid, result, status; 3865 struct l2cap_chan *chan; 3866 u8 req[128]; 3867 int err; 3868 3869 if (cmd_len < sizeof(*rsp)) 3870 return -EPROTO; 3871 3872 scid = __le16_to_cpu(rsp->scid); 3873 dcid = __le16_to_cpu(rsp->dcid); 3874 result = __le16_to_cpu(rsp->result); 3875 status = __le16_to_cpu(rsp->status); 3876 3877 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", 3878 dcid, scid, result, status); 3879 3880 mutex_lock(&conn->chan_lock); 3881 3882 if (scid) { 3883 chan = __l2cap_get_chan_by_scid(conn, scid); 3884 if (!chan) { 3885 err = -EFAULT; 3886 goto unlock; 3887 } 3888 } else { 3889 chan = __l2cap_get_chan_by_ident(conn, cmd->ident); 3890 if (!chan) { 3891 err = -EFAULT; 3892 goto unlock; 3893 } 3894 } 3895 3896 err = 0; 3897 3898 l2cap_chan_lock(chan); 3899 3900 switch (result) { 3901 case L2CAP_CR_SUCCESS: 3902 l2cap_state_change(chan, BT_CONFIG); 3903 chan->ident = 0; 3904 chan->dcid = dcid; 3905 clear_bit(CONF_CONNECT_PEND, &chan->conf_state); 3906 3907 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) 3908 break; 3909 3910 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 3911 l2cap_build_conf_req(chan, req), req); 3912 chan->num_conf_req++; 3913 break; 3914 3915 case L2CAP_CR_PEND: 3916 set_bit(CONF_CONNECT_PEND, &chan->conf_state); 3917 break; 3918 3919 default: 3920 l2cap_chan_del(chan, ECONNREFUSED); 3921 break; 3922 } 3923 3924 l2cap_chan_unlock(chan); 3925 3926 unlock: 3927 mutex_unlock(&conn->chan_lock); 3928 3929 return err; 3930 } 3931 3932 static inline void set_default_fcs(struct l2cap_chan *chan) 3933 { 3934 /* FCS is enabled only in ERTM or streaming mode, if one or both 3935 * sides request it. 3936 */ 3937 if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING) 3938 chan->fcs = L2CAP_FCS_NONE; 3939 else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) 3940 chan->fcs = L2CAP_FCS_CRC16; 3941 } 3942 3943 static void l2cap_send_efs_conf_rsp(struct l2cap_chan *chan, void *data, 3944 u8 ident, u16 flags) 3945 { 3946 struct l2cap_conn *conn = chan->conn; 3947 3948 BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn, chan, ident, 3949 flags); 3950 3951 clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state); 3952 set_bit(CONF_OUTPUT_DONE, &chan->conf_state); 3953 3954 l2cap_send_cmd(conn, ident, L2CAP_CONF_RSP, 3955 l2cap_build_conf_rsp(chan, data, 3956 L2CAP_CONF_SUCCESS, flags), data); 3957 } 3958 3959 static inline int l2cap_config_req(struct l2cap_conn *conn, 3960 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 3961 u8 *data) 3962 { 3963 struct l2cap_conf_req *req = (struct l2cap_conf_req *) data; 3964 u16 dcid, flags; 3965 u8 rsp[64]; 3966 struct l2cap_chan *chan; 3967 int len, err = 0; 3968 3969 if (cmd_len < sizeof(*req)) 3970 return -EPROTO; 3971 3972 dcid = __le16_to_cpu(req->dcid); 3973 flags = __le16_to_cpu(req->flags); 3974 3975 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags); 3976 3977 chan = l2cap_get_chan_by_scid(conn, dcid); 3978 if (!chan) 3979 return -ENOENT; 3980 3981 if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) { 3982 struct l2cap_cmd_rej_cid rej; 3983 3984 rej.reason = __constant_cpu_to_le16(L2CAP_REJ_INVALID_CID); 3985 rej.scid = cpu_to_le16(chan->scid); 3986 rej.dcid = cpu_to_le16(chan->dcid); 3987 3988 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ, 3989 sizeof(rej), &rej); 3990 goto unlock; 3991 } 3992 3993 /* Reject if config buffer is too small. */ 3994 len = cmd_len - sizeof(*req); 3995 if (chan->conf_len + len > sizeof(chan->conf_req)) { 3996 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, 3997 l2cap_build_conf_rsp(chan, rsp, 3998 L2CAP_CONF_REJECT, flags), rsp); 3999 goto unlock; 4000 } 4001 4002 /* Store config. */ 4003 memcpy(chan->conf_req + chan->conf_len, req->data, len); 4004 chan->conf_len += len; 4005 4006 if (flags & L2CAP_CONF_FLAG_CONTINUATION) { 4007 /* Incomplete config. Send empty response. */ 4008 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, 4009 l2cap_build_conf_rsp(chan, rsp, 4010 L2CAP_CONF_SUCCESS, flags), rsp); 4011 goto unlock; 4012 } 4013 4014 /* Complete config. */ 4015 len = l2cap_parse_conf_req(chan, rsp); 4016 if (len < 0) { 4017 l2cap_send_disconn_req(chan, ECONNRESET); 4018 goto unlock; 4019 } 4020 4021 chan->ident = cmd->ident; 4022 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp); 4023 chan->num_conf_rsp++; 4024 4025 /* Reset config buffer. */ 4026 chan->conf_len = 0; 4027 4028 if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) 4029 goto unlock; 4030 4031 if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) { 4032 set_default_fcs(chan); 4033 4034 if (chan->mode == L2CAP_MODE_ERTM || 4035 chan->mode == L2CAP_MODE_STREAMING) 4036 err = l2cap_ertm_init(chan); 4037 4038 if (err < 0) 4039 l2cap_send_disconn_req(chan, -err); 4040 else 4041 l2cap_chan_ready(chan); 4042 4043 goto unlock; 4044 } 4045 4046 if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) { 4047 u8 buf[64]; 4048 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, 4049 l2cap_build_conf_req(chan, buf), buf); 4050 chan->num_conf_req++; 4051 } 4052 4053 /* Got Conf Rsp PENDING from remote side and asume we sent 4054 Conf Rsp PENDING in the code above */ 4055 if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) && 4056 test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) { 4057 4058 /* check compatibility */ 4059 4060 /* Send rsp for BR/EDR channel */ 4061 if (!chan->hs_hcon) 4062 l2cap_send_efs_conf_rsp(chan, rsp, cmd->ident, flags); 4063 else 4064 chan->ident = cmd->ident; 4065 } 4066 4067 unlock: 4068 l2cap_chan_unlock(chan); 4069 return err; 4070 } 4071 4072 static inline int l2cap_config_rsp(struct l2cap_conn *conn, 4073 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 4074 u8 *data) 4075 { 4076 struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data; 4077 u16 scid, flags, result; 4078 struct l2cap_chan *chan; 4079 int len = cmd_len - sizeof(*rsp); 4080 int err = 0; 4081 4082 if (cmd_len < sizeof(*rsp)) 4083 return -EPROTO; 4084 4085 scid = __le16_to_cpu(rsp->scid); 4086 flags = __le16_to_cpu(rsp->flags); 4087 result = __le16_to_cpu(rsp->result); 4088 4089 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags, 4090 result, len); 4091 4092 chan = l2cap_get_chan_by_scid(conn, scid); 4093 if (!chan) 4094 return 0; 4095 4096 switch (result) { 4097 case L2CAP_CONF_SUCCESS: 4098 l2cap_conf_rfc_get(chan, rsp->data, len); 4099 clear_bit(CONF_REM_CONF_PEND, &chan->conf_state); 4100 break; 4101 4102 case L2CAP_CONF_PENDING: 4103 set_bit(CONF_REM_CONF_PEND, &chan->conf_state); 4104 4105 if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) { 4106 char buf[64]; 4107 4108 len = l2cap_parse_conf_rsp(chan, rsp->data, len, 4109 buf, &result); 4110 if (len < 0) { 4111 l2cap_send_disconn_req(chan, ECONNRESET); 4112 goto done; 4113 } 4114 4115 if (!chan->hs_hcon) { 4116 l2cap_send_efs_conf_rsp(chan, buf, cmd->ident, 4117 0); 4118 } else { 4119 if (l2cap_check_efs(chan)) { 4120 amp_create_logical_link(chan); 4121 chan->ident = cmd->ident; 4122 } 4123 } 4124 } 4125 goto done; 4126 4127 case L2CAP_CONF_UNACCEPT: 4128 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) { 4129 char req[64]; 4130 4131 if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) { 4132 l2cap_send_disconn_req(chan, ECONNRESET); 4133 goto done; 4134 } 4135 4136 /* throw out any old stored conf requests */ 4137 result = L2CAP_CONF_SUCCESS; 4138 len = l2cap_parse_conf_rsp(chan, rsp->data, len, 4139 req, &result); 4140 if (len < 0) { 4141 l2cap_send_disconn_req(chan, ECONNRESET); 4142 goto done; 4143 } 4144 4145 l2cap_send_cmd(conn, l2cap_get_ident(conn), 4146 L2CAP_CONF_REQ, len, req); 4147 chan->num_conf_req++; 4148 if (result != L2CAP_CONF_SUCCESS) 4149 goto done; 4150 break; 4151 } 4152 4153 default: 4154 l2cap_chan_set_err(chan, ECONNRESET); 4155 4156 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT); 4157 l2cap_send_disconn_req(chan, ECONNRESET); 4158 goto done; 4159 } 4160 4161 if (flags & L2CAP_CONF_FLAG_CONTINUATION) 4162 goto done; 4163 4164 set_bit(CONF_INPUT_DONE, &chan->conf_state); 4165 4166 if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) { 4167 set_default_fcs(chan); 4168 4169 if (chan->mode == L2CAP_MODE_ERTM || 4170 chan->mode == L2CAP_MODE_STREAMING) 4171 err = l2cap_ertm_init(chan); 4172 4173 if (err < 0) 4174 l2cap_send_disconn_req(chan, -err); 4175 else 4176 l2cap_chan_ready(chan); 4177 } 4178 4179 done: 4180 l2cap_chan_unlock(chan); 4181 return err; 4182 } 4183 4184 static inline int l2cap_disconnect_req(struct l2cap_conn *conn, 4185 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 4186 u8 *data) 4187 { 4188 struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data; 4189 struct l2cap_disconn_rsp rsp; 4190 u16 dcid, scid; 4191 struct l2cap_chan *chan; 4192 struct sock *sk; 4193 4194 if (cmd_len != sizeof(*req)) 4195 return -EPROTO; 4196 4197 scid = __le16_to_cpu(req->scid); 4198 dcid = __le16_to_cpu(req->dcid); 4199 4200 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid); 4201 4202 mutex_lock(&conn->chan_lock); 4203 4204 chan = __l2cap_get_chan_by_scid(conn, dcid); 4205 if (!chan) { 4206 mutex_unlock(&conn->chan_lock); 4207 return 0; 4208 } 4209 4210 l2cap_chan_lock(chan); 4211 4212 sk = chan->sk; 4213 4214 rsp.dcid = cpu_to_le16(chan->scid); 4215 rsp.scid = cpu_to_le16(chan->dcid); 4216 l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp); 4217 4218 lock_sock(sk); 4219 sk->sk_shutdown = SHUTDOWN_MASK; 4220 release_sock(sk); 4221 4222 l2cap_chan_hold(chan); 4223 l2cap_chan_del(chan, ECONNRESET); 4224 4225 l2cap_chan_unlock(chan); 4226 4227 chan->ops->close(chan); 4228 l2cap_chan_put(chan); 4229 4230 mutex_unlock(&conn->chan_lock); 4231 4232 return 0; 4233 } 4234 4235 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, 4236 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 4237 u8 *data) 4238 { 4239 struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data; 4240 u16 dcid, scid; 4241 struct l2cap_chan *chan; 4242 4243 if (cmd_len != sizeof(*rsp)) 4244 return -EPROTO; 4245 4246 scid = __le16_to_cpu(rsp->scid); 4247 dcid = __le16_to_cpu(rsp->dcid); 4248 4249 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid); 4250 4251 mutex_lock(&conn->chan_lock); 4252 4253 chan = __l2cap_get_chan_by_scid(conn, scid); 4254 if (!chan) { 4255 mutex_unlock(&conn->chan_lock); 4256 return 0; 4257 } 4258 4259 l2cap_chan_lock(chan); 4260 4261 l2cap_chan_hold(chan); 4262 l2cap_chan_del(chan, 0); 4263 4264 l2cap_chan_unlock(chan); 4265 4266 chan->ops->close(chan); 4267 l2cap_chan_put(chan); 4268 4269 mutex_unlock(&conn->chan_lock); 4270 4271 return 0; 4272 } 4273 4274 static inline int l2cap_information_req(struct l2cap_conn *conn, 4275 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 4276 u8 *data) 4277 { 4278 struct l2cap_info_req *req = (struct l2cap_info_req *) data; 4279 u16 type; 4280 4281 if (cmd_len != sizeof(*req)) 4282 return -EPROTO; 4283 4284 type = __le16_to_cpu(req->type); 4285 4286 BT_DBG("type 0x%4.4x", type); 4287 4288 if (type == L2CAP_IT_FEAT_MASK) { 4289 u8 buf[8]; 4290 u32 feat_mask = l2cap_feat_mask; 4291 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf; 4292 rsp->type = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK); 4293 rsp->result = __constant_cpu_to_le16(L2CAP_IR_SUCCESS); 4294 if (!disable_ertm) 4295 feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING 4296 | L2CAP_FEAT_FCS; 4297 if (enable_hs) 4298 feat_mask |= L2CAP_FEAT_EXT_FLOW 4299 | L2CAP_FEAT_EXT_WINDOW; 4300 4301 put_unaligned_le32(feat_mask, rsp->data); 4302 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf), 4303 buf); 4304 } else if (type == L2CAP_IT_FIXED_CHAN) { 4305 u8 buf[12]; 4306 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf; 4307 4308 if (enable_hs) 4309 l2cap_fixed_chan[0] |= L2CAP_FC_A2MP; 4310 else 4311 l2cap_fixed_chan[0] &= ~L2CAP_FC_A2MP; 4312 4313 rsp->type = __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN); 4314 rsp->result = __constant_cpu_to_le16(L2CAP_IR_SUCCESS); 4315 memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan)); 4316 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf), 4317 buf); 4318 } else { 4319 struct l2cap_info_rsp rsp; 4320 rsp.type = cpu_to_le16(type); 4321 rsp.result = __constant_cpu_to_le16(L2CAP_IR_NOTSUPP); 4322 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp), 4323 &rsp); 4324 } 4325 4326 return 0; 4327 } 4328 4329 static inline int l2cap_information_rsp(struct l2cap_conn *conn, 4330 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 4331 u8 *data) 4332 { 4333 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data; 4334 u16 type, result; 4335 4336 if (cmd_len < sizeof(*rsp)) 4337 return -EPROTO; 4338 4339 type = __le16_to_cpu(rsp->type); 4340 result = __le16_to_cpu(rsp->result); 4341 4342 BT_DBG("type 0x%4.4x result 0x%2.2x", type, result); 4343 4344 /* L2CAP Info req/rsp are unbound to channels, add extra checks */ 4345 if (cmd->ident != conn->info_ident || 4346 conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) 4347 return 0; 4348 4349 cancel_delayed_work(&conn->info_timer); 4350 4351 if (result != L2CAP_IR_SUCCESS) { 4352 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; 4353 conn->info_ident = 0; 4354 4355 l2cap_conn_start(conn); 4356 4357 return 0; 4358 } 4359 4360 switch (type) { 4361 case L2CAP_IT_FEAT_MASK: 4362 conn->feat_mask = get_unaligned_le32(rsp->data); 4363 4364 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) { 4365 struct l2cap_info_req req; 4366 req.type = __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN); 4367 4368 conn->info_ident = l2cap_get_ident(conn); 4369 4370 l2cap_send_cmd(conn, conn->info_ident, 4371 L2CAP_INFO_REQ, sizeof(req), &req); 4372 } else { 4373 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; 4374 conn->info_ident = 0; 4375 4376 l2cap_conn_start(conn); 4377 } 4378 break; 4379 4380 case L2CAP_IT_FIXED_CHAN: 4381 conn->fixed_chan_mask = rsp->data[0]; 4382 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; 4383 conn->info_ident = 0; 4384 4385 l2cap_conn_start(conn); 4386 break; 4387 } 4388 4389 return 0; 4390 } 4391 4392 static int l2cap_create_channel_req(struct l2cap_conn *conn, 4393 struct l2cap_cmd_hdr *cmd, 4394 u16 cmd_len, void *data) 4395 { 4396 struct l2cap_create_chan_req *req = data; 4397 struct l2cap_create_chan_rsp rsp; 4398 struct l2cap_chan *chan; 4399 struct hci_dev *hdev; 4400 u16 psm, scid; 4401 4402 if (cmd_len != sizeof(*req)) 4403 return -EPROTO; 4404 4405 if (!enable_hs) 4406 return -EINVAL; 4407 4408 psm = le16_to_cpu(req->psm); 4409 scid = le16_to_cpu(req->scid); 4410 4411 BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm, scid, req->amp_id); 4412 4413 /* For controller id 0 make BR/EDR connection */ 4414 if (req->amp_id == HCI_BREDR_ID) { 4415 l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP, 4416 req->amp_id); 4417 return 0; 4418 } 4419 4420 /* Validate AMP controller id */ 4421 hdev = hci_dev_get(req->amp_id); 4422 if (!hdev) 4423 goto error; 4424 4425 if (hdev->dev_type != HCI_AMP || !test_bit(HCI_UP, &hdev->flags)) { 4426 hci_dev_put(hdev); 4427 goto error; 4428 } 4429 4430 chan = l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP, 4431 req->amp_id); 4432 if (chan) { 4433 struct amp_mgr *mgr = conn->hcon->amp_mgr; 4434 struct hci_conn *hs_hcon; 4435 4436 hs_hcon = hci_conn_hash_lookup_ba(hdev, AMP_LINK, conn->dst); 4437 if (!hs_hcon) { 4438 hci_dev_put(hdev); 4439 return -EFAULT; 4440 } 4441 4442 BT_DBG("mgr %p bredr_chan %p hs_hcon %p", mgr, chan, hs_hcon); 4443 4444 mgr->bredr_chan = chan; 4445 chan->hs_hcon = hs_hcon; 4446 chan->fcs = L2CAP_FCS_NONE; 4447 conn->mtu = hdev->block_mtu; 4448 } 4449 4450 hci_dev_put(hdev); 4451 4452 return 0; 4453 4454 error: 4455 rsp.dcid = 0; 4456 rsp.scid = cpu_to_le16(scid); 4457 rsp.result = __constant_cpu_to_le16(L2CAP_CR_BAD_AMP); 4458 rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO); 4459 4460 l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP, 4461 sizeof(rsp), &rsp); 4462 4463 return -EFAULT; 4464 } 4465 4466 static void l2cap_send_move_chan_req(struct l2cap_chan *chan, u8 dest_amp_id) 4467 { 4468 struct l2cap_move_chan_req req; 4469 u8 ident; 4470 4471 BT_DBG("chan %p, dest_amp_id %d", chan, dest_amp_id); 4472 4473 ident = l2cap_get_ident(chan->conn); 4474 chan->ident = ident; 4475 4476 req.icid = cpu_to_le16(chan->scid); 4477 req.dest_amp_id = dest_amp_id; 4478 4479 l2cap_send_cmd(chan->conn, ident, L2CAP_MOVE_CHAN_REQ, sizeof(req), 4480 &req); 4481 4482 __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT); 4483 } 4484 4485 static void l2cap_send_move_chan_rsp(struct l2cap_chan *chan, u16 result) 4486 { 4487 struct l2cap_move_chan_rsp rsp; 4488 4489 BT_DBG("chan %p, result 0x%4.4x", chan, result); 4490 4491 rsp.icid = cpu_to_le16(chan->dcid); 4492 rsp.result = cpu_to_le16(result); 4493 4494 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_RSP, 4495 sizeof(rsp), &rsp); 4496 } 4497 4498 static void l2cap_send_move_chan_cfm(struct l2cap_chan *chan, u16 result) 4499 { 4500 struct l2cap_move_chan_cfm cfm; 4501 4502 BT_DBG("chan %p, result 0x%4.4x", chan, result); 4503 4504 chan->ident = l2cap_get_ident(chan->conn); 4505 4506 cfm.icid = cpu_to_le16(chan->scid); 4507 cfm.result = cpu_to_le16(result); 4508 4509 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_CFM, 4510 sizeof(cfm), &cfm); 4511 4512 __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT); 4513 } 4514 4515 static void l2cap_send_move_chan_cfm_icid(struct l2cap_conn *conn, u16 icid) 4516 { 4517 struct l2cap_move_chan_cfm cfm; 4518 4519 BT_DBG("conn %p, icid 0x%4.4x", conn, icid); 4520 4521 cfm.icid = cpu_to_le16(icid); 4522 cfm.result = __constant_cpu_to_le16(L2CAP_MC_UNCONFIRMED); 4523 4524 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_MOVE_CHAN_CFM, 4525 sizeof(cfm), &cfm); 4526 } 4527 4528 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident, 4529 u16 icid) 4530 { 4531 struct l2cap_move_chan_cfm_rsp rsp; 4532 4533 BT_DBG("icid 0x%4.4x", icid); 4534 4535 rsp.icid = cpu_to_le16(icid); 4536 l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp); 4537 } 4538 4539 static void __release_logical_link(struct l2cap_chan *chan) 4540 { 4541 chan->hs_hchan = NULL; 4542 chan->hs_hcon = NULL; 4543 4544 /* Placeholder - release the logical link */ 4545 } 4546 4547 static void l2cap_logical_fail(struct l2cap_chan *chan) 4548 { 4549 /* Logical link setup failed */ 4550 if (chan->state != BT_CONNECTED) { 4551 /* Create channel failure, disconnect */ 4552 l2cap_send_disconn_req(chan, ECONNRESET); 4553 return; 4554 } 4555 4556 switch (chan->move_role) { 4557 case L2CAP_MOVE_ROLE_RESPONDER: 4558 l2cap_move_done(chan); 4559 l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_SUPP); 4560 break; 4561 case L2CAP_MOVE_ROLE_INITIATOR: 4562 if (chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_COMP || 4563 chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_CFM) { 4564 /* Remote has only sent pending or 4565 * success responses, clean up 4566 */ 4567 l2cap_move_done(chan); 4568 } 4569 4570 /* Other amp move states imply that the move 4571 * has already aborted 4572 */ 4573 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED); 4574 break; 4575 } 4576 } 4577 4578 static void l2cap_logical_finish_create(struct l2cap_chan *chan, 4579 struct hci_chan *hchan) 4580 { 4581 struct l2cap_conf_rsp rsp; 4582 4583 chan->hs_hchan = hchan; 4584 chan->hs_hcon->l2cap_data = chan->conn; 4585 4586 l2cap_send_efs_conf_rsp(chan, &rsp, chan->ident, 0); 4587 4588 if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) { 4589 int err; 4590 4591 set_default_fcs(chan); 4592 4593 err = l2cap_ertm_init(chan); 4594 if (err < 0) 4595 l2cap_send_disconn_req(chan, -err); 4596 else 4597 l2cap_chan_ready(chan); 4598 } 4599 } 4600 4601 static void l2cap_logical_finish_move(struct l2cap_chan *chan, 4602 struct hci_chan *hchan) 4603 { 4604 chan->hs_hcon = hchan->conn; 4605 chan->hs_hcon->l2cap_data = chan->conn; 4606 4607 BT_DBG("move_state %d", chan->move_state); 4608 4609 switch (chan->move_state) { 4610 case L2CAP_MOVE_WAIT_LOGICAL_COMP: 4611 /* Move confirm will be sent after a success 4612 * response is received 4613 */ 4614 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS; 4615 break; 4616 case L2CAP_MOVE_WAIT_LOGICAL_CFM: 4617 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) { 4618 chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY; 4619 } else if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) { 4620 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP; 4621 l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED); 4622 } else if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) { 4623 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM; 4624 l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS); 4625 } 4626 break; 4627 default: 4628 /* Move was not in expected state, free the channel */ 4629 __release_logical_link(chan); 4630 4631 chan->move_state = L2CAP_MOVE_STABLE; 4632 } 4633 } 4634 4635 /* Call with chan locked */ 4636 void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan, 4637 u8 status) 4638 { 4639 BT_DBG("chan %p, hchan %p, status %d", chan, hchan, status); 4640 4641 if (status) { 4642 l2cap_logical_fail(chan); 4643 __release_logical_link(chan); 4644 return; 4645 } 4646 4647 if (chan->state != BT_CONNECTED) { 4648 /* Ignore logical link if channel is on BR/EDR */ 4649 if (chan->local_amp_id) 4650 l2cap_logical_finish_create(chan, hchan); 4651 } else { 4652 l2cap_logical_finish_move(chan, hchan); 4653 } 4654 } 4655 4656 void l2cap_move_start(struct l2cap_chan *chan) 4657 { 4658 BT_DBG("chan %p", chan); 4659 4660 if (chan->local_amp_id == HCI_BREDR_ID) { 4661 if (chan->chan_policy != BT_CHANNEL_POLICY_AMP_PREFERRED) 4662 return; 4663 chan->move_role = L2CAP_MOVE_ROLE_INITIATOR; 4664 chan->move_state = L2CAP_MOVE_WAIT_PREPARE; 4665 /* Placeholder - start physical link setup */ 4666 } else { 4667 chan->move_role = L2CAP_MOVE_ROLE_INITIATOR; 4668 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS; 4669 chan->move_id = 0; 4670 l2cap_move_setup(chan); 4671 l2cap_send_move_chan_req(chan, 0); 4672 } 4673 } 4674 4675 static void l2cap_do_create(struct l2cap_chan *chan, int result, 4676 u8 local_amp_id, u8 remote_amp_id) 4677 { 4678 BT_DBG("chan %p state %s %u -> %u", chan, state_to_string(chan->state), 4679 local_amp_id, remote_amp_id); 4680 4681 chan->fcs = L2CAP_FCS_NONE; 4682 4683 /* Outgoing channel on AMP */ 4684 if (chan->state == BT_CONNECT) { 4685 if (result == L2CAP_CR_SUCCESS) { 4686 chan->local_amp_id = local_amp_id; 4687 l2cap_send_create_chan_req(chan, remote_amp_id); 4688 } else { 4689 /* Revert to BR/EDR connect */ 4690 l2cap_send_conn_req(chan); 4691 } 4692 4693 return; 4694 } 4695 4696 /* Incoming channel on AMP */ 4697 if (__l2cap_no_conn_pending(chan)) { 4698 struct l2cap_conn_rsp rsp; 4699 char buf[128]; 4700 rsp.scid = cpu_to_le16(chan->dcid); 4701 rsp.dcid = cpu_to_le16(chan->scid); 4702 4703 if (result == L2CAP_CR_SUCCESS) { 4704 /* Send successful response */ 4705 rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS); 4706 rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO); 4707 } else { 4708 /* Send negative response */ 4709 rsp.result = __constant_cpu_to_le16(L2CAP_CR_NO_MEM); 4710 rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO); 4711 } 4712 4713 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_RSP, 4714 sizeof(rsp), &rsp); 4715 4716 if (result == L2CAP_CR_SUCCESS) { 4717 __l2cap_state_change(chan, BT_CONFIG); 4718 set_bit(CONF_REQ_SENT, &chan->conf_state); 4719 l2cap_send_cmd(chan->conn, l2cap_get_ident(chan->conn), 4720 L2CAP_CONF_REQ, 4721 l2cap_build_conf_req(chan, buf), buf); 4722 chan->num_conf_req++; 4723 } 4724 } 4725 } 4726 4727 static void l2cap_do_move_initiate(struct l2cap_chan *chan, u8 local_amp_id, 4728 u8 remote_amp_id) 4729 { 4730 l2cap_move_setup(chan); 4731 chan->move_id = local_amp_id; 4732 chan->move_state = L2CAP_MOVE_WAIT_RSP; 4733 4734 l2cap_send_move_chan_req(chan, remote_amp_id); 4735 } 4736 4737 static void l2cap_do_move_respond(struct l2cap_chan *chan, int result) 4738 { 4739 struct hci_chan *hchan = NULL; 4740 4741 /* Placeholder - get hci_chan for logical link */ 4742 4743 if (hchan) { 4744 if (hchan->state == BT_CONNECTED) { 4745 /* Logical link is ready to go */ 4746 chan->hs_hcon = hchan->conn; 4747 chan->hs_hcon->l2cap_data = chan->conn; 4748 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM; 4749 l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS); 4750 4751 l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS); 4752 } else { 4753 /* Wait for logical link to be ready */ 4754 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM; 4755 } 4756 } else { 4757 /* Logical link not available */ 4758 l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_ALLOWED); 4759 } 4760 } 4761 4762 static void l2cap_do_move_cancel(struct l2cap_chan *chan, int result) 4763 { 4764 if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) { 4765 u8 rsp_result; 4766 if (result == -EINVAL) 4767 rsp_result = L2CAP_MR_BAD_ID; 4768 else 4769 rsp_result = L2CAP_MR_NOT_ALLOWED; 4770 4771 l2cap_send_move_chan_rsp(chan, rsp_result); 4772 } 4773 4774 chan->move_role = L2CAP_MOVE_ROLE_NONE; 4775 chan->move_state = L2CAP_MOVE_STABLE; 4776 4777 /* Restart data transmission */ 4778 l2cap_ertm_send(chan); 4779 } 4780 4781 /* Invoke with locked chan */ 4782 void __l2cap_physical_cfm(struct l2cap_chan *chan, int result) 4783 { 4784 u8 local_amp_id = chan->local_amp_id; 4785 u8 remote_amp_id = chan->remote_amp_id; 4786 4787 BT_DBG("chan %p, result %d, local_amp_id %d, remote_amp_id %d", 4788 chan, result, local_amp_id, remote_amp_id); 4789 4790 if (chan->state == BT_DISCONN || chan->state == BT_CLOSED) { 4791 l2cap_chan_unlock(chan); 4792 return; 4793 } 4794 4795 if (chan->state != BT_CONNECTED) { 4796 l2cap_do_create(chan, result, local_amp_id, remote_amp_id); 4797 } else if (result != L2CAP_MR_SUCCESS) { 4798 l2cap_do_move_cancel(chan, result); 4799 } else { 4800 switch (chan->move_role) { 4801 case L2CAP_MOVE_ROLE_INITIATOR: 4802 l2cap_do_move_initiate(chan, local_amp_id, 4803 remote_amp_id); 4804 break; 4805 case L2CAP_MOVE_ROLE_RESPONDER: 4806 l2cap_do_move_respond(chan, result); 4807 break; 4808 default: 4809 l2cap_do_move_cancel(chan, result); 4810 break; 4811 } 4812 } 4813 } 4814 4815 static inline int l2cap_move_channel_req(struct l2cap_conn *conn, 4816 struct l2cap_cmd_hdr *cmd, 4817 u16 cmd_len, void *data) 4818 { 4819 struct l2cap_move_chan_req *req = data; 4820 struct l2cap_move_chan_rsp rsp; 4821 struct l2cap_chan *chan; 4822 u16 icid = 0; 4823 u16 result = L2CAP_MR_NOT_ALLOWED; 4824 4825 if (cmd_len != sizeof(*req)) 4826 return -EPROTO; 4827 4828 icid = le16_to_cpu(req->icid); 4829 4830 BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid, req->dest_amp_id); 4831 4832 if (!enable_hs) 4833 return -EINVAL; 4834 4835 chan = l2cap_get_chan_by_dcid(conn, icid); 4836 if (!chan) { 4837 rsp.icid = cpu_to_le16(icid); 4838 rsp.result = __constant_cpu_to_le16(L2CAP_MR_NOT_ALLOWED); 4839 l2cap_send_cmd(conn, cmd->ident, L2CAP_MOVE_CHAN_RSP, 4840 sizeof(rsp), &rsp); 4841 return 0; 4842 } 4843 4844 chan->ident = cmd->ident; 4845 4846 if (chan->scid < L2CAP_CID_DYN_START || 4847 chan->chan_policy == BT_CHANNEL_POLICY_BREDR_ONLY || 4848 (chan->mode != L2CAP_MODE_ERTM && 4849 chan->mode != L2CAP_MODE_STREAMING)) { 4850 result = L2CAP_MR_NOT_ALLOWED; 4851 goto send_move_response; 4852 } 4853 4854 if (chan->local_amp_id == req->dest_amp_id) { 4855 result = L2CAP_MR_SAME_ID; 4856 goto send_move_response; 4857 } 4858 4859 if (req->dest_amp_id) { 4860 struct hci_dev *hdev; 4861 hdev = hci_dev_get(req->dest_amp_id); 4862 if (!hdev || hdev->dev_type != HCI_AMP || 4863 !test_bit(HCI_UP, &hdev->flags)) { 4864 if (hdev) 4865 hci_dev_put(hdev); 4866 4867 result = L2CAP_MR_BAD_ID; 4868 goto send_move_response; 4869 } 4870 hci_dev_put(hdev); 4871 } 4872 4873 /* Detect a move collision. Only send a collision response 4874 * if this side has "lost", otherwise proceed with the move. 4875 * The winner has the larger bd_addr. 4876 */ 4877 if ((__chan_is_moving(chan) || 4878 chan->move_role != L2CAP_MOVE_ROLE_NONE) && 4879 bacmp(conn->src, conn->dst) > 0) { 4880 result = L2CAP_MR_COLLISION; 4881 goto send_move_response; 4882 } 4883 4884 chan->move_role = L2CAP_MOVE_ROLE_RESPONDER; 4885 l2cap_move_setup(chan); 4886 chan->move_id = req->dest_amp_id; 4887 icid = chan->dcid; 4888 4889 if (!req->dest_amp_id) { 4890 /* Moving to BR/EDR */ 4891 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) { 4892 chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY; 4893 result = L2CAP_MR_PEND; 4894 } else { 4895 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM; 4896 result = L2CAP_MR_SUCCESS; 4897 } 4898 } else { 4899 chan->move_state = L2CAP_MOVE_WAIT_PREPARE; 4900 /* Placeholder - uncomment when amp functions are available */ 4901 /*amp_accept_physical(chan, req->dest_amp_id);*/ 4902 result = L2CAP_MR_PEND; 4903 } 4904 4905 send_move_response: 4906 l2cap_send_move_chan_rsp(chan, result); 4907 4908 l2cap_chan_unlock(chan); 4909 4910 return 0; 4911 } 4912 4913 static void l2cap_move_continue(struct l2cap_conn *conn, u16 icid, u16 result) 4914 { 4915 struct l2cap_chan *chan; 4916 struct hci_chan *hchan = NULL; 4917 4918 chan = l2cap_get_chan_by_scid(conn, icid); 4919 if (!chan) { 4920 l2cap_send_move_chan_cfm_icid(conn, icid); 4921 return; 4922 } 4923 4924 __clear_chan_timer(chan); 4925 if (result == L2CAP_MR_PEND) 4926 __set_chan_timer(chan, L2CAP_MOVE_ERTX_TIMEOUT); 4927 4928 switch (chan->move_state) { 4929 case L2CAP_MOVE_WAIT_LOGICAL_COMP: 4930 /* Move confirm will be sent when logical link 4931 * is complete. 4932 */ 4933 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM; 4934 break; 4935 case L2CAP_MOVE_WAIT_RSP_SUCCESS: 4936 if (result == L2CAP_MR_PEND) { 4937 break; 4938 } else if (test_bit(CONN_LOCAL_BUSY, 4939 &chan->conn_state)) { 4940 chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY; 4941 } else { 4942 /* Logical link is up or moving to BR/EDR, 4943 * proceed with move 4944 */ 4945 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP; 4946 l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED); 4947 } 4948 break; 4949 case L2CAP_MOVE_WAIT_RSP: 4950 /* Moving to AMP */ 4951 if (result == L2CAP_MR_SUCCESS) { 4952 /* Remote is ready, send confirm immediately 4953 * after logical link is ready 4954 */ 4955 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM; 4956 } else { 4957 /* Both logical link and move success 4958 * are required to confirm 4959 */ 4960 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_COMP; 4961 } 4962 4963 /* Placeholder - get hci_chan for logical link */ 4964 if (!hchan) { 4965 /* Logical link not available */ 4966 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED); 4967 break; 4968 } 4969 4970 /* If the logical link is not yet connected, do not 4971 * send confirmation. 4972 */ 4973 if (hchan->state != BT_CONNECTED) 4974 break; 4975 4976 /* Logical link is already ready to go */ 4977 4978 chan->hs_hcon = hchan->conn; 4979 chan->hs_hcon->l2cap_data = chan->conn; 4980 4981 if (result == L2CAP_MR_SUCCESS) { 4982 /* Can confirm now */ 4983 l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED); 4984 } else { 4985 /* Now only need move success 4986 * to confirm 4987 */ 4988 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS; 4989 } 4990 4991 l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS); 4992 break; 4993 default: 4994 /* Any other amp move state means the move failed. */ 4995 chan->move_id = chan->local_amp_id; 4996 l2cap_move_done(chan); 4997 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED); 4998 } 4999 5000 l2cap_chan_unlock(chan); 5001 } 5002 5003 static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid, 5004 u16 result) 5005 { 5006 struct l2cap_chan *chan; 5007 5008 chan = l2cap_get_chan_by_ident(conn, ident); 5009 if (!chan) { 5010 /* Could not locate channel, icid is best guess */ 5011 l2cap_send_move_chan_cfm_icid(conn, icid); 5012 return; 5013 } 5014 5015 __clear_chan_timer(chan); 5016 5017 if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) { 5018 if (result == L2CAP_MR_COLLISION) { 5019 chan->move_role = L2CAP_MOVE_ROLE_RESPONDER; 5020 } else { 5021 /* Cleanup - cancel move */ 5022 chan->move_id = chan->local_amp_id; 5023 l2cap_move_done(chan); 5024 } 5025 } 5026 5027 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED); 5028 5029 l2cap_chan_unlock(chan); 5030 } 5031 5032 static int l2cap_move_channel_rsp(struct l2cap_conn *conn, 5033 struct l2cap_cmd_hdr *cmd, 5034 u16 cmd_len, void *data) 5035 { 5036 struct l2cap_move_chan_rsp *rsp = data; 5037 u16 icid, result; 5038 5039 if (cmd_len != sizeof(*rsp)) 5040 return -EPROTO; 5041 5042 icid = le16_to_cpu(rsp->icid); 5043 result = le16_to_cpu(rsp->result); 5044 5045 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result); 5046 5047 if (result == L2CAP_MR_SUCCESS || result == L2CAP_MR_PEND) 5048 l2cap_move_continue(conn, icid, result); 5049 else 5050 l2cap_move_fail(conn, cmd->ident, icid, result); 5051 5052 return 0; 5053 } 5054 5055 static int l2cap_move_channel_confirm(struct l2cap_conn *conn, 5056 struct l2cap_cmd_hdr *cmd, 5057 u16 cmd_len, void *data) 5058 { 5059 struct l2cap_move_chan_cfm *cfm = data; 5060 struct l2cap_chan *chan; 5061 u16 icid, result; 5062 5063 if (cmd_len != sizeof(*cfm)) 5064 return -EPROTO; 5065 5066 icid = le16_to_cpu(cfm->icid); 5067 result = le16_to_cpu(cfm->result); 5068 5069 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result); 5070 5071 chan = l2cap_get_chan_by_dcid(conn, icid); 5072 if (!chan) { 5073 /* Spec requires a response even if the icid was not found */ 5074 l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid); 5075 return 0; 5076 } 5077 5078 if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM) { 5079 if (result == L2CAP_MC_CONFIRMED) { 5080 chan->local_amp_id = chan->move_id; 5081 if (!chan->local_amp_id) 5082 __release_logical_link(chan); 5083 } else { 5084 chan->move_id = chan->local_amp_id; 5085 } 5086 5087 l2cap_move_done(chan); 5088 } 5089 5090 l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid); 5091 5092 l2cap_chan_unlock(chan); 5093 5094 return 0; 5095 } 5096 5097 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn, 5098 struct l2cap_cmd_hdr *cmd, 5099 u16 cmd_len, void *data) 5100 { 5101 struct l2cap_move_chan_cfm_rsp *rsp = data; 5102 struct l2cap_chan *chan; 5103 u16 icid; 5104 5105 if (cmd_len != sizeof(*rsp)) 5106 return -EPROTO; 5107 5108 icid = le16_to_cpu(rsp->icid); 5109 5110 BT_DBG("icid 0x%4.4x", icid); 5111 5112 chan = l2cap_get_chan_by_scid(conn, icid); 5113 if (!chan) 5114 return 0; 5115 5116 __clear_chan_timer(chan); 5117 5118 if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM_RSP) { 5119 chan->local_amp_id = chan->move_id; 5120 5121 if (!chan->local_amp_id && chan->hs_hchan) 5122 __release_logical_link(chan); 5123 5124 l2cap_move_done(chan); 5125 } 5126 5127 l2cap_chan_unlock(chan); 5128 5129 return 0; 5130 } 5131 5132 static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency, 5133 u16 to_multiplier) 5134 { 5135 u16 max_latency; 5136 5137 if (min > max || min < 6 || max > 3200) 5138 return -EINVAL; 5139 5140 if (to_multiplier < 10 || to_multiplier > 3200) 5141 return -EINVAL; 5142 5143 if (max >= to_multiplier * 8) 5144 return -EINVAL; 5145 5146 max_latency = (to_multiplier * 8 / max) - 1; 5147 if (latency > 499 || latency > max_latency) 5148 return -EINVAL; 5149 5150 return 0; 5151 } 5152 5153 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn, 5154 struct l2cap_cmd_hdr *cmd, 5155 u8 *data) 5156 { 5157 struct hci_conn *hcon = conn->hcon; 5158 struct l2cap_conn_param_update_req *req; 5159 struct l2cap_conn_param_update_rsp rsp; 5160 u16 min, max, latency, to_multiplier, cmd_len; 5161 int err; 5162 5163 if (!(hcon->link_mode & HCI_LM_MASTER)) 5164 return -EINVAL; 5165 5166 cmd_len = __le16_to_cpu(cmd->len); 5167 if (cmd_len != sizeof(struct l2cap_conn_param_update_req)) 5168 return -EPROTO; 5169 5170 req = (struct l2cap_conn_param_update_req *) data; 5171 min = __le16_to_cpu(req->min); 5172 max = __le16_to_cpu(req->max); 5173 latency = __le16_to_cpu(req->latency); 5174 to_multiplier = __le16_to_cpu(req->to_multiplier); 5175 5176 BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x", 5177 min, max, latency, to_multiplier); 5178 5179 memset(&rsp, 0, sizeof(rsp)); 5180 5181 err = l2cap_check_conn_param(min, max, latency, to_multiplier); 5182 if (err) 5183 rsp.result = __constant_cpu_to_le16(L2CAP_CONN_PARAM_REJECTED); 5184 else 5185 rsp.result = __constant_cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED); 5186 5187 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP, 5188 sizeof(rsp), &rsp); 5189 5190 if (!err) 5191 hci_le_conn_update(hcon, min, max, latency, to_multiplier); 5192 5193 return 0; 5194 } 5195 5196 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn, 5197 struct l2cap_cmd_hdr *cmd, u16 cmd_len, 5198 u8 *data) 5199 { 5200 int err = 0; 5201 5202 switch (cmd->code) { 5203 case L2CAP_COMMAND_REJ: 5204 l2cap_command_rej(conn, cmd, cmd_len, data); 5205 break; 5206 5207 case L2CAP_CONN_REQ: 5208 err = l2cap_connect_req(conn, cmd, cmd_len, data); 5209 break; 5210 5211 case L2CAP_CONN_RSP: 5212 case L2CAP_CREATE_CHAN_RSP: 5213 err = l2cap_connect_create_rsp(conn, cmd, cmd_len, data); 5214 break; 5215 5216 case L2CAP_CONF_REQ: 5217 err = l2cap_config_req(conn, cmd, cmd_len, data); 5218 break; 5219 5220 case L2CAP_CONF_RSP: 5221 err = l2cap_config_rsp(conn, cmd, cmd_len, data); 5222 break; 5223 5224 case L2CAP_DISCONN_REQ: 5225 err = l2cap_disconnect_req(conn, cmd, cmd_len, data); 5226 break; 5227 5228 case L2CAP_DISCONN_RSP: 5229 err = l2cap_disconnect_rsp(conn, cmd, cmd_len, data); 5230 break; 5231 5232 case L2CAP_ECHO_REQ: 5233 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data); 5234 break; 5235 5236 case L2CAP_ECHO_RSP: 5237 break; 5238 5239 case L2CAP_INFO_REQ: 5240 err = l2cap_information_req(conn, cmd, cmd_len, data); 5241 break; 5242 5243 case L2CAP_INFO_RSP: 5244 err = l2cap_information_rsp(conn, cmd, cmd_len, data); 5245 break; 5246 5247 case L2CAP_CREATE_CHAN_REQ: 5248 err = l2cap_create_channel_req(conn, cmd, cmd_len, data); 5249 break; 5250 5251 case L2CAP_MOVE_CHAN_REQ: 5252 err = l2cap_move_channel_req(conn, cmd, cmd_len, data); 5253 break; 5254 5255 case L2CAP_MOVE_CHAN_RSP: 5256 err = l2cap_move_channel_rsp(conn, cmd, cmd_len, data); 5257 break; 5258 5259 case L2CAP_MOVE_CHAN_CFM: 5260 err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data); 5261 break; 5262 5263 case L2CAP_MOVE_CHAN_CFM_RSP: 5264 err = l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data); 5265 break; 5266 5267 default: 5268 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code); 5269 err = -EINVAL; 5270 break; 5271 } 5272 5273 return err; 5274 } 5275 5276 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn, 5277 struct l2cap_cmd_hdr *cmd, u8 *data) 5278 { 5279 switch (cmd->code) { 5280 case L2CAP_COMMAND_REJ: 5281 return 0; 5282 5283 case L2CAP_CONN_PARAM_UPDATE_REQ: 5284 return l2cap_conn_param_update_req(conn, cmd, data); 5285 5286 case L2CAP_CONN_PARAM_UPDATE_RSP: 5287 return 0; 5288 5289 default: 5290 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code); 5291 return -EINVAL; 5292 } 5293 } 5294 5295 static inline void l2cap_sig_channel(struct l2cap_conn *conn, 5296 struct sk_buff *skb) 5297 { 5298 u8 *data = skb->data; 5299 int len = skb->len; 5300 struct l2cap_cmd_hdr cmd; 5301 int err; 5302 5303 l2cap_raw_recv(conn, skb); 5304 5305 while (len >= L2CAP_CMD_HDR_SIZE) { 5306 u16 cmd_len; 5307 memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE); 5308 data += L2CAP_CMD_HDR_SIZE; 5309 len -= L2CAP_CMD_HDR_SIZE; 5310 5311 cmd_len = le16_to_cpu(cmd.len); 5312 5313 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, 5314 cmd.ident); 5315 5316 if (cmd_len > len || !cmd.ident) { 5317 BT_DBG("corrupted command"); 5318 break; 5319 } 5320 5321 if (conn->hcon->type == LE_LINK) 5322 err = l2cap_le_sig_cmd(conn, &cmd, data); 5323 else 5324 err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data); 5325 5326 if (err) { 5327 struct l2cap_cmd_rej_unk rej; 5328 5329 BT_ERR("Wrong link type (%d)", err); 5330 5331 /* FIXME: Map err to a valid reason */ 5332 rej.reason = __constant_cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD); 5333 l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, 5334 sizeof(rej), &rej); 5335 } 5336 5337 data += cmd_len; 5338 len -= cmd_len; 5339 } 5340 5341 kfree_skb(skb); 5342 } 5343 5344 static int l2cap_check_fcs(struct l2cap_chan *chan, struct sk_buff *skb) 5345 { 5346 u16 our_fcs, rcv_fcs; 5347 int hdr_size; 5348 5349 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 5350 hdr_size = L2CAP_EXT_HDR_SIZE; 5351 else 5352 hdr_size = L2CAP_ENH_HDR_SIZE; 5353 5354 if (chan->fcs == L2CAP_FCS_CRC16) { 5355 skb_trim(skb, skb->len - L2CAP_FCS_SIZE); 5356 rcv_fcs = get_unaligned_le16(skb->data + skb->len); 5357 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size); 5358 5359 if (our_fcs != rcv_fcs) 5360 return -EBADMSG; 5361 } 5362 return 0; 5363 } 5364 5365 static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan) 5366 { 5367 struct l2cap_ctrl control; 5368 5369 BT_DBG("chan %p", chan); 5370 5371 memset(&control, 0, sizeof(control)); 5372 control.sframe = 1; 5373 control.final = 1; 5374 control.reqseq = chan->buffer_seq; 5375 set_bit(CONN_SEND_FBIT, &chan->conn_state); 5376 5377 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) { 5378 control.super = L2CAP_SUPER_RNR; 5379 l2cap_send_sframe(chan, &control); 5380 } 5381 5382 if (test_and_clear_bit(CONN_REMOTE_BUSY, &chan->conn_state) && 5383 chan->unacked_frames > 0) 5384 __set_retrans_timer(chan); 5385 5386 /* Send pending iframes */ 5387 l2cap_ertm_send(chan); 5388 5389 if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) && 5390 test_bit(CONN_SEND_FBIT, &chan->conn_state)) { 5391 /* F-bit wasn't sent in an s-frame or i-frame yet, so 5392 * send it now. 5393 */ 5394 control.super = L2CAP_SUPER_RR; 5395 l2cap_send_sframe(chan, &control); 5396 } 5397 } 5398 5399 static void append_skb_frag(struct sk_buff *skb, struct sk_buff *new_frag, 5400 struct sk_buff **last_frag) 5401 { 5402 /* skb->len reflects data in skb as well as all fragments 5403 * skb->data_len reflects only data in fragments 5404 */ 5405 if (!skb_has_frag_list(skb)) 5406 skb_shinfo(skb)->frag_list = new_frag; 5407 5408 new_frag->next = NULL; 5409 5410 (*last_frag)->next = new_frag; 5411 *last_frag = new_frag; 5412 5413 skb->len += new_frag->len; 5414 skb->data_len += new_frag->len; 5415 skb->truesize += new_frag->truesize; 5416 } 5417 5418 static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, 5419 struct l2cap_ctrl *control) 5420 { 5421 int err = -EINVAL; 5422 5423 switch (control->sar) { 5424 case L2CAP_SAR_UNSEGMENTED: 5425 if (chan->sdu) 5426 break; 5427 5428 err = chan->ops->recv(chan, skb); 5429 break; 5430 5431 case L2CAP_SAR_START: 5432 if (chan->sdu) 5433 break; 5434 5435 chan->sdu_len = get_unaligned_le16(skb->data); 5436 skb_pull(skb, L2CAP_SDULEN_SIZE); 5437 5438 if (chan->sdu_len > chan->imtu) { 5439 err = -EMSGSIZE; 5440 break; 5441 } 5442 5443 if (skb->len >= chan->sdu_len) 5444 break; 5445 5446 chan->sdu = skb; 5447 chan->sdu_last_frag = skb; 5448 5449 skb = NULL; 5450 err = 0; 5451 break; 5452 5453 case L2CAP_SAR_CONTINUE: 5454 if (!chan->sdu) 5455 break; 5456 5457 append_skb_frag(chan->sdu, skb, 5458 &chan->sdu_last_frag); 5459 skb = NULL; 5460 5461 if (chan->sdu->len >= chan->sdu_len) 5462 break; 5463 5464 err = 0; 5465 break; 5466 5467 case L2CAP_SAR_END: 5468 if (!chan->sdu) 5469 break; 5470 5471 append_skb_frag(chan->sdu, skb, 5472 &chan->sdu_last_frag); 5473 skb = NULL; 5474 5475 if (chan->sdu->len != chan->sdu_len) 5476 break; 5477 5478 err = chan->ops->recv(chan, chan->sdu); 5479 5480 if (!err) { 5481 /* Reassembly complete */ 5482 chan->sdu = NULL; 5483 chan->sdu_last_frag = NULL; 5484 chan->sdu_len = 0; 5485 } 5486 break; 5487 } 5488 5489 if (err) { 5490 kfree_skb(skb); 5491 kfree_skb(chan->sdu); 5492 chan->sdu = NULL; 5493 chan->sdu_last_frag = NULL; 5494 chan->sdu_len = 0; 5495 } 5496 5497 return err; 5498 } 5499 5500 static int l2cap_resegment(struct l2cap_chan *chan) 5501 { 5502 /* Placeholder */ 5503 return 0; 5504 } 5505 5506 void l2cap_chan_busy(struct l2cap_chan *chan, int busy) 5507 { 5508 u8 event; 5509 5510 if (chan->mode != L2CAP_MODE_ERTM) 5511 return; 5512 5513 event = busy ? L2CAP_EV_LOCAL_BUSY_DETECTED : L2CAP_EV_LOCAL_BUSY_CLEAR; 5514 l2cap_tx(chan, NULL, NULL, event); 5515 } 5516 5517 static int l2cap_rx_queued_iframes(struct l2cap_chan *chan) 5518 { 5519 int err = 0; 5520 /* Pass sequential frames to l2cap_reassemble_sdu() 5521 * until a gap is encountered. 5522 */ 5523 5524 BT_DBG("chan %p", chan); 5525 5526 while (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) { 5527 struct sk_buff *skb; 5528 BT_DBG("Searching for skb with txseq %d (queue len %d)", 5529 chan->buffer_seq, skb_queue_len(&chan->srej_q)); 5530 5531 skb = l2cap_ertm_seq_in_queue(&chan->srej_q, chan->buffer_seq); 5532 5533 if (!skb) 5534 break; 5535 5536 skb_unlink(skb, &chan->srej_q); 5537 chan->buffer_seq = __next_seq(chan, chan->buffer_seq); 5538 err = l2cap_reassemble_sdu(chan, skb, &bt_cb(skb)->control); 5539 if (err) 5540 break; 5541 } 5542 5543 if (skb_queue_empty(&chan->srej_q)) { 5544 chan->rx_state = L2CAP_RX_STATE_RECV; 5545 l2cap_send_ack(chan); 5546 } 5547 5548 return err; 5549 } 5550 5551 static void l2cap_handle_srej(struct l2cap_chan *chan, 5552 struct l2cap_ctrl *control) 5553 { 5554 struct sk_buff *skb; 5555 5556 BT_DBG("chan %p, control %p", chan, control); 5557 5558 if (control->reqseq == chan->next_tx_seq) { 5559 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq); 5560 l2cap_send_disconn_req(chan, ECONNRESET); 5561 return; 5562 } 5563 5564 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq); 5565 5566 if (skb == NULL) { 5567 BT_DBG("Seq %d not available for retransmission", 5568 control->reqseq); 5569 return; 5570 } 5571 5572 if (chan->max_tx != 0 && bt_cb(skb)->control.retries >= chan->max_tx) { 5573 BT_DBG("Retry limit exceeded (%d)", chan->max_tx); 5574 l2cap_send_disconn_req(chan, ECONNRESET); 5575 return; 5576 } 5577 5578 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state); 5579 5580 if (control->poll) { 5581 l2cap_pass_to_tx(chan, control); 5582 5583 set_bit(CONN_SEND_FBIT, &chan->conn_state); 5584 l2cap_retransmit(chan, control); 5585 l2cap_ertm_send(chan); 5586 5587 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) { 5588 set_bit(CONN_SREJ_ACT, &chan->conn_state); 5589 chan->srej_save_reqseq = control->reqseq; 5590 } 5591 } else { 5592 l2cap_pass_to_tx_fbit(chan, control); 5593 5594 if (control->final) { 5595 if (chan->srej_save_reqseq != control->reqseq || 5596 !test_and_clear_bit(CONN_SREJ_ACT, 5597 &chan->conn_state)) 5598 l2cap_retransmit(chan, control); 5599 } else { 5600 l2cap_retransmit(chan, control); 5601 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) { 5602 set_bit(CONN_SREJ_ACT, &chan->conn_state); 5603 chan->srej_save_reqseq = control->reqseq; 5604 } 5605 } 5606 } 5607 } 5608 5609 static void l2cap_handle_rej(struct l2cap_chan *chan, 5610 struct l2cap_ctrl *control) 5611 { 5612 struct sk_buff *skb; 5613 5614 BT_DBG("chan %p, control %p", chan, control); 5615 5616 if (control->reqseq == chan->next_tx_seq) { 5617 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq); 5618 l2cap_send_disconn_req(chan, ECONNRESET); 5619 return; 5620 } 5621 5622 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq); 5623 5624 if (chan->max_tx && skb && 5625 bt_cb(skb)->control.retries >= chan->max_tx) { 5626 BT_DBG("Retry limit exceeded (%d)", chan->max_tx); 5627 l2cap_send_disconn_req(chan, ECONNRESET); 5628 return; 5629 } 5630 5631 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state); 5632 5633 l2cap_pass_to_tx(chan, control); 5634 5635 if (control->final) { 5636 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state)) 5637 l2cap_retransmit_all(chan, control); 5638 } else { 5639 l2cap_retransmit_all(chan, control); 5640 l2cap_ertm_send(chan); 5641 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) 5642 set_bit(CONN_REJ_ACT, &chan->conn_state); 5643 } 5644 } 5645 5646 static u8 l2cap_classify_txseq(struct l2cap_chan *chan, u16 txseq) 5647 { 5648 BT_DBG("chan %p, txseq %d", chan, txseq); 5649 5650 BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan->last_acked_seq, 5651 chan->expected_tx_seq); 5652 5653 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) { 5654 if (__seq_offset(chan, txseq, chan->last_acked_seq) >= 5655 chan->tx_win) { 5656 /* See notes below regarding "double poll" and 5657 * invalid packets. 5658 */ 5659 if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) { 5660 BT_DBG("Invalid/Ignore - after SREJ"); 5661 return L2CAP_TXSEQ_INVALID_IGNORE; 5662 } else { 5663 BT_DBG("Invalid - in window after SREJ sent"); 5664 return L2CAP_TXSEQ_INVALID; 5665 } 5666 } 5667 5668 if (chan->srej_list.head == txseq) { 5669 BT_DBG("Expected SREJ"); 5670 return L2CAP_TXSEQ_EXPECTED_SREJ; 5671 } 5672 5673 if (l2cap_ertm_seq_in_queue(&chan->srej_q, txseq)) { 5674 BT_DBG("Duplicate SREJ - txseq already stored"); 5675 return L2CAP_TXSEQ_DUPLICATE_SREJ; 5676 } 5677 5678 if (l2cap_seq_list_contains(&chan->srej_list, txseq)) { 5679 BT_DBG("Unexpected SREJ - not requested"); 5680 return L2CAP_TXSEQ_UNEXPECTED_SREJ; 5681 } 5682 } 5683 5684 if (chan->expected_tx_seq == txseq) { 5685 if (__seq_offset(chan, txseq, chan->last_acked_seq) >= 5686 chan->tx_win) { 5687 BT_DBG("Invalid - txseq outside tx window"); 5688 return L2CAP_TXSEQ_INVALID; 5689 } else { 5690 BT_DBG("Expected"); 5691 return L2CAP_TXSEQ_EXPECTED; 5692 } 5693 } 5694 5695 if (__seq_offset(chan, txseq, chan->last_acked_seq) < 5696 __seq_offset(chan, chan->expected_tx_seq, chan->last_acked_seq)) { 5697 BT_DBG("Duplicate - expected_tx_seq later than txseq"); 5698 return L2CAP_TXSEQ_DUPLICATE; 5699 } 5700 5701 if (__seq_offset(chan, txseq, chan->last_acked_seq) >= chan->tx_win) { 5702 /* A source of invalid packets is a "double poll" condition, 5703 * where delays cause us to send multiple poll packets. If 5704 * the remote stack receives and processes both polls, 5705 * sequence numbers can wrap around in such a way that a 5706 * resent frame has a sequence number that looks like new data 5707 * with a sequence gap. This would trigger an erroneous SREJ 5708 * request. 5709 * 5710 * Fortunately, this is impossible with a tx window that's 5711 * less than half of the maximum sequence number, which allows 5712 * invalid frames to be safely ignored. 5713 * 5714 * With tx window sizes greater than half of the tx window 5715 * maximum, the frame is invalid and cannot be ignored. This 5716 * causes a disconnect. 5717 */ 5718 5719 if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) { 5720 BT_DBG("Invalid/Ignore - txseq outside tx window"); 5721 return L2CAP_TXSEQ_INVALID_IGNORE; 5722 } else { 5723 BT_DBG("Invalid - txseq outside tx window"); 5724 return L2CAP_TXSEQ_INVALID; 5725 } 5726 } else { 5727 BT_DBG("Unexpected - txseq indicates missing frames"); 5728 return L2CAP_TXSEQ_UNEXPECTED; 5729 } 5730 } 5731 5732 static int l2cap_rx_state_recv(struct l2cap_chan *chan, 5733 struct l2cap_ctrl *control, 5734 struct sk_buff *skb, u8 event) 5735 { 5736 int err = 0; 5737 bool skb_in_use = 0; 5738 5739 BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb, 5740 event); 5741 5742 switch (event) { 5743 case L2CAP_EV_RECV_IFRAME: 5744 switch (l2cap_classify_txseq(chan, control->txseq)) { 5745 case L2CAP_TXSEQ_EXPECTED: 5746 l2cap_pass_to_tx(chan, control); 5747 5748 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) { 5749 BT_DBG("Busy, discarding expected seq %d", 5750 control->txseq); 5751 break; 5752 } 5753 5754 chan->expected_tx_seq = __next_seq(chan, 5755 control->txseq); 5756 5757 chan->buffer_seq = chan->expected_tx_seq; 5758 skb_in_use = 1; 5759 5760 err = l2cap_reassemble_sdu(chan, skb, control); 5761 if (err) 5762 break; 5763 5764 if (control->final) { 5765 if (!test_and_clear_bit(CONN_REJ_ACT, 5766 &chan->conn_state)) { 5767 control->final = 0; 5768 l2cap_retransmit_all(chan, control); 5769 l2cap_ertm_send(chan); 5770 } 5771 } 5772 5773 if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) 5774 l2cap_send_ack(chan); 5775 break; 5776 case L2CAP_TXSEQ_UNEXPECTED: 5777 l2cap_pass_to_tx(chan, control); 5778 5779 /* Can't issue SREJ frames in the local busy state. 5780 * Drop this frame, it will be seen as missing 5781 * when local busy is exited. 5782 */ 5783 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) { 5784 BT_DBG("Busy, discarding unexpected seq %d", 5785 control->txseq); 5786 break; 5787 } 5788 5789 /* There was a gap in the sequence, so an SREJ 5790 * must be sent for each missing frame. The 5791 * current frame is stored for later use. 5792 */ 5793 skb_queue_tail(&chan->srej_q, skb); 5794 skb_in_use = 1; 5795 BT_DBG("Queued %p (queue len %d)", skb, 5796 skb_queue_len(&chan->srej_q)); 5797 5798 clear_bit(CONN_SREJ_ACT, &chan->conn_state); 5799 l2cap_seq_list_clear(&chan->srej_list); 5800 l2cap_send_srej(chan, control->txseq); 5801 5802 chan->rx_state = L2CAP_RX_STATE_SREJ_SENT; 5803 break; 5804 case L2CAP_TXSEQ_DUPLICATE: 5805 l2cap_pass_to_tx(chan, control); 5806 break; 5807 case L2CAP_TXSEQ_INVALID_IGNORE: 5808 break; 5809 case L2CAP_TXSEQ_INVALID: 5810 default: 5811 l2cap_send_disconn_req(chan, ECONNRESET); 5812 break; 5813 } 5814 break; 5815 case L2CAP_EV_RECV_RR: 5816 l2cap_pass_to_tx(chan, control); 5817 if (control->final) { 5818 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state); 5819 5820 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state) && 5821 !__chan_is_moving(chan)) { 5822 control->final = 0; 5823 l2cap_retransmit_all(chan, control); 5824 } 5825 5826 l2cap_ertm_send(chan); 5827 } else if (control->poll) { 5828 l2cap_send_i_or_rr_or_rnr(chan); 5829 } else { 5830 if (test_and_clear_bit(CONN_REMOTE_BUSY, 5831 &chan->conn_state) && 5832 chan->unacked_frames) 5833 __set_retrans_timer(chan); 5834 5835 l2cap_ertm_send(chan); 5836 } 5837 break; 5838 case L2CAP_EV_RECV_RNR: 5839 set_bit(CONN_REMOTE_BUSY, &chan->conn_state); 5840 l2cap_pass_to_tx(chan, control); 5841 if (control && control->poll) { 5842 set_bit(CONN_SEND_FBIT, &chan->conn_state); 5843 l2cap_send_rr_or_rnr(chan, 0); 5844 } 5845 __clear_retrans_timer(chan); 5846 l2cap_seq_list_clear(&chan->retrans_list); 5847 break; 5848 case L2CAP_EV_RECV_REJ: 5849 l2cap_handle_rej(chan, control); 5850 break; 5851 case L2CAP_EV_RECV_SREJ: 5852 l2cap_handle_srej(chan, control); 5853 break; 5854 default: 5855 break; 5856 } 5857 5858 if (skb && !skb_in_use) { 5859 BT_DBG("Freeing %p", skb); 5860 kfree_skb(skb); 5861 } 5862 5863 return err; 5864 } 5865 5866 static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan, 5867 struct l2cap_ctrl *control, 5868 struct sk_buff *skb, u8 event) 5869 { 5870 int err = 0; 5871 u16 txseq = control->txseq; 5872 bool skb_in_use = 0; 5873 5874 BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb, 5875 event); 5876 5877 switch (event) { 5878 case L2CAP_EV_RECV_IFRAME: 5879 switch (l2cap_classify_txseq(chan, txseq)) { 5880 case L2CAP_TXSEQ_EXPECTED: 5881 /* Keep frame for reassembly later */ 5882 l2cap_pass_to_tx(chan, control); 5883 skb_queue_tail(&chan->srej_q, skb); 5884 skb_in_use = 1; 5885 BT_DBG("Queued %p (queue len %d)", skb, 5886 skb_queue_len(&chan->srej_q)); 5887 5888 chan->expected_tx_seq = __next_seq(chan, txseq); 5889 break; 5890 case L2CAP_TXSEQ_EXPECTED_SREJ: 5891 l2cap_seq_list_pop(&chan->srej_list); 5892 5893 l2cap_pass_to_tx(chan, control); 5894 skb_queue_tail(&chan->srej_q, skb); 5895 skb_in_use = 1; 5896 BT_DBG("Queued %p (queue len %d)", skb, 5897 skb_queue_len(&chan->srej_q)); 5898 5899 err = l2cap_rx_queued_iframes(chan); 5900 if (err) 5901 break; 5902 5903 break; 5904 case L2CAP_TXSEQ_UNEXPECTED: 5905 /* Got a frame that can't be reassembled yet. 5906 * Save it for later, and send SREJs to cover 5907 * the missing frames. 5908 */ 5909 skb_queue_tail(&chan->srej_q, skb); 5910 skb_in_use = 1; 5911 BT_DBG("Queued %p (queue len %d)", skb, 5912 skb_queue_len(&chan->srej_q)); 5913 5914 l2cap_pass_to_tx(chan, control); 5915 l2cap_send_srej(chan, control->txseq); 5916 break; 5917 case L2CAP_TXSEQ_UNEXPECTED_SREJ: 5918 /* This frame was requested with an SREJ, but 5919 * some expected retransmitted frames are 5920 * missing. Request retransmission of missing 5921 * SREJ'd frames. 5922 */ 5923 skb_queue_tail(&chan->srej_q, skb); 5924 skb_in_use = 1; 5925 BT_DBG("Queued %p (queue len %d)", skb, 5926 skb_queue_len(&chan->srej_q)); 5927 5928 l2cap_pass_to_tx(chan, control); 5929 l2cap_send_srej_list(chan, control->txseq); 5930 break; 5931 case L2CAP_TXSEQ_DUPLICATE_SREJ: 5932 /* We've already queued this frame. Drop this copy. */ 5933 l2cap_pass_to_tx(chan, control); 5934 break; 5935 case L2CAP_TXSEQ_DUPLICATE: 5936 /* Expecting a later sequence number, so this frame 5937 * was already received. Ignore it completely. 5938 */ 5939 break; 5940 case L2CAP_TXSEQ_INVALID_IGNORE: 5941 break; 5942 case L2CAP_TXSEQ_INVALID: 5943 default: 5944 l2cap_send_disconn_req(chan, ECONNRESET); 5945 break; 5946 } 5947 break; 5948 case L2CAP_EV_RECV_RR: 5949 l2cap_pass_to_tx(chan, control); 5950 if (control->final) { 5951 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state); 5952 5953 if (!test_and_clear_bit(CONN_REJ_ACT, 5954 &chan->conn_state)) { 5955 control->final = 0; 5956 l2cap_retransmit_all(chan, control); 5957 } 5958 5959 l2cap_ertm_send(chan); 5960 } else if (control->poll) { 5961 if (test_and_clear_bit(CONN_REMOTE_BUSY, 5962 &chan->conn_state) && 5963 chan->unacked_frames) { 5964 __set_retrans_timer(chan); 5965 } 5966 5967 set_bit(CONN_SEND_FBIT, &chan->conn_state); 5968 l2cap_send_srej_tail(chan); 5969 } else { 5970 if (test_and_clear_bit(CONN_REMOTE_BUSY, 5971 &chan->conn_state) && 5972 chan->unacked_frames) 5973 __set_retrans_timer(chan); 5974 5975 l2cap_send_ack(chan); 5976 } 5977 break; 5978 case L2CAP_EV_RECV_RNR: 5979 set_bit(CONN_REMOTE_BUSY, &chan->conn_state); 5980 l2cap_pass_to_tx(chan, control); 5981 if (control->poll) { 5982 l2cap_send_srej_tail(chan); 5983 } else { 5984 struct l2cap_ctrl rr_control; 5985 memset(&rr_control, 0, sizeof(rr_control)); 5986 rr_control.sframe = 1; 5987 rr_control.super = L2CAP_SUPER_RR; 5988 rr_control.reqseq = chan->buffer_seq; 5989 l2cap_send_sframe(chan, &rr_control); 5990 } 5991 5992 break; 5993 case L2CAP_EV_RECV_REJ: 5994 l2cap_handle_rej(chan, control); 5995 break; 5996 case L2CAP_EV_RECV_SREJ: 5997 l2cap_handle_srej(chan, control); 5998 break; 5999 } 6000 6001 if (skb && !skb_in_use) { 6002 BT_DBG("Freeing %p", skb); 6003 kfree_skb(skb); 6004 } 6005 6006 return err; 6007 } 6008 6009 static int l2cap_finish_move(struct l2cap_chan *chan) 6010 { 6011 BT_DBG("chan %p", chan); 6012 6013 chan->rx_state = L2CAP_RX_STATE_RECV; 6014 6015 if (chan->hs_hcon) 6016 chan->conn->mtu = chan->hs_hcon->hdev->block_mtu; 6017 else 6018 chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu; 6019 6020 return l2cap_resegment(chan); 6021 } 6022 6023 static int l2cap_rx_state_wait_p(struct l2cap_chan *chan, 6024 struct l2cap_ctrl *control, 6025 struct sk_buff *skb, u8 event) 6026 { 6027 int err; 6028 6029 BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb, 6030 event); 6031 6032 if (!control->poll) 6033 return -EPROTO; 6034 6035 l2cap_process_reqseq(chan, control->reqseq); 6036 6037 if (!skb_queue_empty(&chan->tx_q)) 6038 chan->tx_send_head = skb_peek(&chan->tx_q); 6039 else 6040 chan->tx_send_head = NULL; 6041 6042 /* Rewind next_tx_seq to the point expected 6043 * by the receiver. 6044 */ 6045 chan->next_tx_seq = control->reqseq; 6046 chan->unacked_frames = 0; 6047 6048 err = l2cap_finish_move(chan); 6049 if (err) 6050 return err; 6051 6052 set_bit(CONN_SEND_FBIT, &chan->conn_state); 6053 l2cap_send_i_or_rr_or_rnr(chan); 6054 6055 if (event == L2CAP_EV_RECV_IFRAME) 6056 return -EPROTO; 6057 6058 return l2cap_rx_state_recv(chan, control, NULL, event); 6059 } 6060 6061 static int l2cap_rx_state_wait_f(struct l2cap_chan *chan, 6062 struct l2cap_ctrl *control, 6063 struct sk_buff *skb, u8 event) 6064 { 6065 int err; 6066 6067 if (!control->final) 6068 return -EPROTO; 6069 6070 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state); 6071 6072 chan->rx_state = L2CAP_RX_STATE_RECV; 6073 l2cap_process_reqseq(chan, control->reqseq); 6074 6075 if (!skb_queue_empty(&chan->tx_q)) 6076 chan->tx_send_head = skb_peek(&chan->tx_q); 6077 else 6078 chan->tx_send_head = NULL; 6079 6080 /* Rewind next_tx_seq to the point expected 6081 * by the receiver. 6082 */ 6083 chan->next_tx_seq = control->reqseq; 6084 chan->unacked_frames = 0; 6085 6086 if (chan->hs_hcon) 6087 chan->conn->mtu = chan->hs_hcon->hdev->block_mtu; 6088 else 6089 chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu; 6090 6091 err = l2cap_resegment(chan); 6092 6093 if (!err) 6094 err = l2cap_rx_state_recv(chan, control, skb, event); 6095 6096 return err; 6097 } 6098 6099 static bool __valid_reqseq(struct l2cap_chan *chan, u16 reqseq) 6100 { 6101 /* Make sure reqseq is for a packet that has been sent but not acked */ 6102 u16 unacked; 6103 6104 unacked = __seq_offset(chan, chan->next_tx_seq, chan->expected_ack_seq); 6105 return __seq_offset(chan, chan->next_tx_seq, reqseq) <= unacked; 6106 } 6107 6108 static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control, 6109 struct sk_buff *skb, u8 event) 6110 { 6111 int err = 0; 6112 6113 BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan, 6114 control, skb, event, chan->rx_state); 6115 6116 if (__valid_reqseq(chan, control->reqseq)) { 6117 switch (chan->rx_state) { 6118 case L2CAP_RX_STATE_RECV: 6119 err = l2cap_rx_state_recv(chan, control, skb, event); 6120 break; 6121 case L2CAP_RX_STATE_SREJ_SENT: 6122 err = l2cap_rx_state_srej_sent(chan, control, skb, 6123 event); 6124 break; 6125 case L2CAP_RX_STATE_WAIT_P: 6126 err = l2cap_rx_state_wait_p(chan, control, skb, event); 6127 break; 6128 case L2CAP_RX_STATE_WAIT_F: 6129 err = l2cap_rx_state_wait_f(chan, control, skb, event); 6130 break; 6131 default: 6132 /* shut it down */ 6133 break; 6134 } 6135 } else { 6136 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d", 6137 control->reqseq, chan->next_tx_seq, 6138 chan->expected_ack_seq); 6139 l2cap_send_disconn_req(chan, ECONNRESET); 6140 } 6141 6142 return err; 6143 } 6144 6145 static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control, 6146 struct sk_buff *skb) 6147 { 6148 int err = 0; 6149 6150 BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb, 6151 chan->rx_state); 6152 6153 if (l2cap_classify_txseq(chan, control->txseq) == 6154 L2CAP_TXSEQ_EXPECTED) { 6155 l2cap_pass_to_tx(chan, control); 6156 6157 BT_DBG("buffer_seq %d->%d", chan->buffer_seq, 6158 __next_seq(chan, chan->buffer_seq)); 6159 6160 chan->buffer_seq = __next_seq(chan, chan->buffer_seq); 6161 6162 l2cap_reassemble_sdu(chan, skb, control); 6163 } else { 6164 if (chan->sdu) { 6165 kfree_skb(chan->sdu); 6166 chan->sdu = NULL; 6167 } 6168 chan->sdu_last_frag = NULL; 6169 chan->sdu_len = 0; 6170 6171 if (skb) { 6172 BT_DBG("Freeing %p", skb); 6173 kfree_skb(skb); 6174 } 6175 } 6176 6177 chan->last_acked_seq = control->txseq; 6178 chan->expected_tx_seq = __next_seq(chan, control->txseq); 6179 6180 return err; 6181 } 6182 6183 static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb) 6184 { 6185 struct l2cap_ctrl *control = &bt_cb(skb)->control; 6186 u16 len; 6187 u8 event; 6188 6189 __unpack_control(chan, skb); 6190 6191 len = skb->len; 6192 6193 /* 6194 * We can just drop the corrupted I-frame here. 6195 * Receiver will miss it and start proper recovery 6196 * procedures and ask for retransmission. 6197 */ 6198 if (l2cap_check_fcs(chan, skb)) 6199 goto drop; 6200 6201 if (!control->sframe && control->sar == L2CAP_SAR_START) 6202 len -= L2CAP_SDULEN_SIZE; 6203 6204 if (chan->fcs == L2CAP_FCS_CRC16) 6205 len -= L2CAP_FCS_SIZE; 6206 6207 if (len > chan->mps) { 6208 l2cap_send_disconn_req(chan, ECONNRESET); 6209 goto drop; 6210 } 6211 6212 if (!control->sframe) { 6213 int err; 6214 6215 BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d", 6216 control->sar, control->reqseq, control->final, 6217 control->txseq); 6218 6219 /* Validate F-bit - F=0 always valid, F=1 only 6220 * valid in TX WAIT_F 6221 */ 6222 if (control->final && chan->tx_state != L2CAP_TX_STATE_WAIT_F) 6223 goto drop; 6224 6225 if (chan->mode != L2CAP_MODE_STREAMING) { 6226 event = L2CAP_EV_RECV_IFRAME; 6227 err = l2cap_rx(chan, control, skb, event); 6228 } else { 6229 err = l2cap_stream_rx(chan, control, skb); 6230 } 6231 6232 if (err) 6233 l2cap_send_disconn_req(chan, ECONNRESET); 6234 } else { 6235 const u8 rx_func_to_event[4] = { 6236 L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ, 6237 L2CAP_EV_RECV_RNR, L2CAP_EV_RECV_SREJ 6238 }; 6239 6240 /* Only I-frames are expected in streaming mode */ 6241 if (chan->mode == L2CAP_MODE_STREAMING) 6242 goto drop; 6243 6244 BT_DBG("sframe reqseq %d, final %d, poll %d, super %d", 6245 control->reqseq, control->final, control->poll, 6246 control->super); 6247 6248 if (len != 0) { 6249 BT_ERR("Trailing bytes: %d in sframe", len); 6250 l2cap_send_disconn_req(chan, ECONNRESET); 6251 goto drop; 6252 } 6253 6254 /* Validate F and P bits */ 6255 if (control->final && (control->poll || 6256 chan->tx_state != L2CAP_TX_STATE_WAIT_F)) 6257 goto drop; 6258 6259 event = rx_func_to_event[control->super]; 6260 if (l2cap_rx(chan, control, skb, event)) 6261 l2cap_send_disconn_req(chan, ECONNRESET); 6262 } 6263 6264 return 0; 6265 6266 drop: 6267 kfree_skb(skb); 6268 return 0; 6269 } 6270 6271 static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid, 6272 struct sk_buff *skb) 6273 { 6274 struct l2cap_chan *chan; 6275 6276 chan = l2cap_get_chan_by_scid(conn, cid); 6277 if (!chan) { 6278 if (cid == L2CAP_CID_A2MP) { 6279 chan = a2mp_channel_create(conn, skb); 6280 if (!chan) { 6281 kfree_skb(skb); 6282 return; 6283 } 6284 6285 l2cap_chan_lock(chan); 6286 } else { 6287 BT_DBG("unknown cid 0x%4.4x", cid); 6288 /* Drop packet and return */ 6289 kfree_skb(skb); 6290 return; 6291 } 6292 } 6293 6294 BT_DBG("chan %p, len %d", chan, skb->len); 6295 6296 if (chan->state != BT_CONNECTED) 6297 goto drop; 6298 6299 switch (chan->mode) { 6300 case L2CAP_MODE_BASIC: 6301 /* If socket recv buffers overflows we drop data here 6302 * which is *bad* because L2CAP has to be reliable. 6303 * But we don't have any other choice. L2CAP doesn't 6304 * provide flow control mechanism. */ 6305 6306 if (chan->imtu < skb->len) 6307 goto drop; 6308 6309 if (!chan->ops->recv(chan, skb)) 6310 goto done; 6311 break; 6312 6313 case L2CAP_MODE_ERTM: 6314 case L2CAP_MODE_STREAMING: 6315 l2cap_data_rcv(chan, skb); 6316 goto done; 6317 6318 default: 6319 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode); 6320 break; 6321 } 6322 6323 drop: 6324 kfree_skb(skb); 6325 6326 done: 6327 l2cap_chan_unlock(chan); 6328 } 6329 6330 static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, 6331 struct sk_buff *skb) 6332 { 6333 struct l2cap_chan *chan; 6334 6335 chan = l2cap_global_chan_by_psm(0, psm, conn->src, conn->dst); 6336 if (!chan) 6337 goto drop; 6338 6339 BT_DBG("chan %p, len %d", chan, skb->len); 6340 6341 if (chan->state != BT_BOUND && chan->state != BT_CONNECTED) 6342 goto drop; 6343 6344 if (chan->imtu < skb->len) 6345 goto drop; 6346 6347 if (!chan->ops->recv(chan, skb)) 6348 return; 6349 6350 drop: 6351 kfree_skb(skb); 6352 } 6353 6354 static void l2cap_att_channel(struct l2cap_conn *conn, 6355 struct sk_buff *skb) 6356 { 6357 struct l2cap_chan *chan; 6358 6359 chan = l2cap_global_chan_by_scid(0, L2CAP_CID_LE_DATA, 6360 conn->src, conn->dst); 6361 if (!chan) 6362 goto drop; 6363 6364 BT_DBG("chan %p, len %d", chan, skb->len); 6365 6366 if (chan->state != BT_BOUND && chan->state != BT_CONNECTED) 6367 goto drop; 6368 6369 if (chan->imtu < skb->len) 6370 goto drop; 6371 6372 if (!chan->ops->recv(chan, skb)) 6373 return; 6374 6375 drop: 6376 kfree_skb(skb); 6377 } 6378 6379 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb) 6380 { 6381 struct l2cap_hdr *lh = (void *) skb->data; 6382 u16 cid, len; 6383 __le16 psm; 6384 6385 skb_pull(skb, L2CAP_HDR_SIZE); 6386 cid = __le16_to_cpu(lh->cid); 6387 len = __le16_to_cpu(lh->len); 6388 6389 if (len != skb->len) { 6390 kfree_skb(skb); 6391 return; 6392 } 6393 6394 BT_DBG("len %d, cid 0x%4.4x", len, cid); 6395 6396 switch (cid) { 6397 case L2CAP_CID_LE_SIGNALING: 6398 case L2CAP_CID_SIGNALING: 6399 l2cap_sig_channel(conn, skb); 6400 break; 6401 6402 case L2CAP_CID_CONN_LESS: 6403 psm = get_unaligned((__le16 *) skb->data); 6404 skb_pull(skb, L2CAP_PSMLEN_SIZE); 6405 l2cap_conless_channel(conn, psm, skb); 6406 break; 6407 6408 case L2CAP_CID_LE_DATA: 6409 l2cap_att_channel(conn, skb); 6410 break; 6411 6412 case L2CAP_CID_SMP: 6413 if (smp_sig_channel(conn, skb)) 6414 l2cap_conn_del(conn->hcon, EACCES); 6415 break; 6416 6417 default: 6418 l2cap_data_channel(conn, cid, skb); 6419 break; 6420 } 6421 } 6422 6423 /* ---- L2CAP interface with lower layer (HCI) ---- */ 6424 6425 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr) 6426 { 6427 int exact = 0, lm1 = 0, lm2 = 0; 6428 struct l2cap_chan *c; 6429 6430 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr); 6431 6432 /* Find listening sockets and check their link_mode */ 6433 read_lock(&chan_list_lock); 6434 list_for_each_entry(c, &chan_list, global_l) { 6435 struct sock *sk = c->sk; 6436 6437 if (c->state != BT_LISTEN) 6438 continue; 6439 6440 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) { 6441 lm1 |= HCI_LM_ACCEPT; 6442 if (test_bit(FLAG_ROLE_SWITCH, &c->flags)) 6443 lm1 |= HCI_LM_MASTER; 6444 exact++; 6445 } else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) { 6446 lm2 |= HCI_LM_ACCEPT; 6447 if (test_bit(FLAG_ROLE_SWITCH, &c->flags)) 6448 lm2 |= HCI_LM_MASTER; 6449 } 6450 } 6451 read_unlock(&chan_list_lock); 6452 6453 return exact ? lm1 : lm2; 6454 } 6455 6456 void l2cap_connect_cfm(struct hci_conn *hcon, u8 status) 6457 { 6458 struct l2cap_conn *conn; 6459 6460 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status); 6461 6462 if (!status) { 6463 conn = l2cap_conn_add(hcon); 6464 if (conn) 6465 l2cap_conn_ready(conn); 6466 } else { 6467 l2cap_conn_del(hcon, bt_to_errno(status)); 6468 } 6469 } 6470 6471 int l2cap_disconn_ind(struct hci_conn *hcon) 6472 { 6473 struct l2cap_conn *conn = hcon->l2cap_data; 6474 6475 BT_DBG("hcon %p", hcon); 6476 6477 if (!conn) 6478 return HCI_ERROR_REMOTE_USER_TERM; 6479 return conn->disc_reason; 6480 } 6481 6482 void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason) 6483 { 6484 BT_DBG("hcon %p reason %d", hcon, reason); 6485 6486 l2cap_conn_del(hcon, bt_to_errno(reason)); 6487 } 6488 6489 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt) 6490 { 6491 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) 6492 return; 6493 6494 if (encrypt == 0x00) { 6495 if (chan->sec_level == BT_SECURITY_MEDIUM) { 6496 __set_chan_timer(chan, L2CAP_ENC_TIMEOUT); 6497 } else if (chan->sec_level == BT_SECURITY_HIGH) 6498 l2cap_chan_close(chan, ECONNREFUSED); 6499 } else { 6500 if (chan->sec_level == BT_SECURITY_MEDIUM) 6501 __clear_chan_timer(chan); 6502 } 6503 } 6504 6505 int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) 6506 { 6507 struct l2cap_conn *conn = hcon->l2cap_data; 6508 struct l2cap_chan *chan; 6509 6510 if (!conn) 6511 return 0; 6512 6513 BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt); 6514 6515 if (hcon->type == LE_LINK) { 6516 if (!status && encrypt) 6517 smp_distribute_keys(conn, 0); 6518 cancel_delayed_work(&conn->security_timer); 6519 } 6520 6521 mutex_lock(&conn->chan_lock); 6522 6523 list_for_each_entry(chan, &conn->chan_l, list) { 6524 l2cap_chan_lock(chan); 6525 6526 BT_DBG("chan %p scid 0x%4.4x state %s", chan, chan->scid, 6527 state_to_string(chan->state)); 6528 6529 if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) { 6530 l2cap_chan_unlock(chan); 6531 continue; 6532 } 6533 6534 if (chan->scid == L2CAP_CID_LE_DATA) { 6535 if (!status && encrypt) { 6536 chan->sec_level = hcon->sec_level; 6537 l2cap_chan_ready(chan); 6538 } 6539 6540 l2cap_chan_unlock(chan); 6541 continue; 6542 } 6543 6544 if (!__l2cap_no_conn_pending(chan)) { 6545 l2cap_chan_unlock(chan); 6546 continue; 6547 } 6548 6549 if (!status && (chan->state == BT_CONNECTED || 6550 chan->state == BT_CONFIG)) { 6551 struct sock *sk = chan->sk; 6552 6553 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); 6554 sk->sk_state_change(sk); 6555 6556 l2cap_check_encryption(chan, encrypt); 6557 l2cap_chan_unlock(chan); 6558 continue; 6559 } 6560 6561 if (chan->state == BT_CONNECT) { 6562 if (!status) { 6563 l2cap_start_connection(chan); 6564 } else { 6565 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT); 6566 } 6567 } else if (chan->state == BT_CONNECT2) { 6568 struct sock *sk = chan->sk; 6569 struct l2cap_conn_rsp rsp; 6570 __u16 res, stat; 6571 6572 lock_sock(sk); 6573 6574 if (!status) { 6575 if (test_bit(BT_SK_DEFER_SETUP, 6576 &bt_sk(sk)->flags)) { 6577 res = L2CAP_CR_PEND; 6578 stat = L2CAP_CS_AUTHOR_PEND; 6579 chan->ops->defer(chan); 6580 } else { 6581 __l2cap_state_change(chan, BT_CONFIG); 6582 res = L2CAP_CR_SUCCESS; 6583 stat = L2CAP_CS_NO_INFO; 6584 } 6585 } else { 6586 __l2cap_state_change(chan, BT_DISCONN); 6587 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT); 6588 res = L2CAP_CR_SEC_BLOCK; 6589 stat = L2CAP_CS_NO_INFO; 6590 } 6591 6592 release_sock(sk); 6593 6594 rsp.scid = cpu_to_le16(chan->dcid); 6595 rsp.dcid = cpu_to_le16(chan->scid); 6596 rsp.result = cpu_to_le16(res); 6597 rsp.status = cpu_to_le16(stat); 6598 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, 6599 sizeof(rsp), &rsp); 6600 6601 if (!test_bit(CONF_REQ_SENT, &chan->conf_state) && 6602 res == L2CAP_CR_SUCCESS) { 6603 char buf[128]; 6604 set_bit(CONF_REQ_SENT, &chan->conf_state); 6605 l2cap_send_cmd(conn, l2cap_get_ident(conn), 6606 L2CAP_CONF_REQ, 6607 l2cap_build_conf_req(chan, buf), 6608 buf); 6609 chan->num_conf_req++; 6610 } 6611 } 6612 6613 l2cap_chan_unlock(chan); 6614 } 6615 6616 mutex_unlock(&conn->chan_lock); 6617 6618 return 0; 6619 } 6620 6621 int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) 6622 { 6623 struct l2cap_conn *conn = hcon->l2cap_data; 6624 struct l2cap_hdr *hdr; 6625 int len; 6626 6627 /* For AMP controller do not create l2cap conn */ 6628 if (!conn && hcon->hdev->dev_type != HCI_BREDR) 6629 goto drop; 6630 6631 if (!conn) 6632 conn = l2cap_conn_add(hcon); 6633 6634 if (!conn) 6635 goto drop; 6636 6637 BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags); 6638 6639 switch (flags) { 6640 case ACL_START: 6641 case ACL_START_NO_FLUSH: 6642 case ACL_COMPLETE: 6643 if (conn->rx_len) { 6644 BT_ERR("Unexpected start frame (len %d)", skb->len); 6645 kfree_skb(conn->rx_skb); 6646 conn->rx_skb = NULL; 6647 conn->rx_len = 0; 6648 l2cap_conn_unreliable(conn, ECOMM); 6649 } 6650 6651 /* Start fragment always begin with Basic L2CAP header */ 6652 if (skb->len < L2CAP_HDR_SIZE) { 6653 BT_ERR("Frame is too short (len %d)", skb->len); 6654 l2cap_conn_unreliable(conn, ECOMM); 6655 goto drop; 6656 } 6657 6658 hdr = (struct l2cap_hdr *) skb->data; 6659 len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE; 6660 6661 if (len == skb->len) { 6662 /* Complete frame received */ 6663 l2cap_recv_frame(conn, skb); 6664 return 0; 6665 } 6666 6667 BT_DBG("Start: total len %d, frag len %d", len, skb->len); 6668 6669 if (skb->len > len) { 6670 BT_ERR("Frame is too long (len %d, expected len %d)", 6671 skb->len, len); 6672 l2cap_conn_unreliable(conn, ECOMM); 6673 goto drop; 6674 } 6675 6676 /* Allocate skb for the complete frame (with header) */ 6677 conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL); 6678 if (!conn->rx_skb) 6679 goto drop; 6680 6681 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len), 6682 skb->len); 6683 conn->rx_len = len - skb->len; 6684 break; 6685 6686 case ACL_CONT: 6687 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len); 6688 6689 if (!conn->rx_len) { 6690 BT_ERR("Unexpected continuation frame (len %d)", skb->len); 6691 l2cap_conn_unreliable(conn, ECOMM); 6692 goto drop; 6693 } 6694 6695 if (skb->len > conn->rx_len) { 6696 BT_ERR("Fragment is too long (len %d, expected %d)", 6697 skb->len, conn->rx_len); 6698 kfree_skb(conn->rx_skb); 6699 conn->rx_skb = NULL; 6700 conn->rx_len = 0; 6701 l2cap_conn_unreliable(conn, ECOMM); 6702 goto drop; 6703 } 6704 6705 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len), 6706 skb->len); 6707 conn->rx_len -= skb->len; 6708 6709 if (!conn->rx_len) { 6710 /* Complete frame received */ 6711 l2cap_recv_frame(conn, conn->rx_skb); 6712 conn->rx_skb = NULL; 6713 } 6714 break; 6715 } 6716 6717 drop: 6718 kfree_skb(skb); 6719 return 0; 6720 } 6721 6722 static int l2cap_debugfs_show(struct seq_file *f, void *p) 6723 { 6724 struct l2cap_chan *c; 6725 6726 read_lock(&chan_list_lock); 6727 6728 list_for_each_entry(c, &chan_list, global_l) { 6729 struct sock *sk = c->sk; 6730 6731 seq_printf(f, "%pMR %pMR %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n", 6732 &bt_sk(sk)->src, &bt_sk(sk)->dst, 6733 c->state, __le16_to_cpu(c->psm), 6734 c->scid, c->dcid, c->imtu, c->omtu, 6735 c->sec_level, c->mode); 6736 } 6737 6738 read_unlock(&chan_list_lock); 6739 6740 return 0; 6741 } 6742 6743 static int l2cap_debugfs_open(struct inode *inode, struct file *file) 6744 { 6745 return single_open(file, l2cap_debugfs_show, inode->i_private); 6746 } 6747 6748 static const struct file_operations l2cap_debugfs_fops = { 6749 .open = l2cap_debugfs_open, 6750 .read = seq_read, 6751 .llseek = seq_lseek, 6752 .release = single_release, 6753 }; 6754 6755 static struct dentry *l2cap_debugfs; 6756 6757 int __init l2cap_init(void) 6758 { 6759 int err; 6760 6761 err = l2cap_init_sockets(); 6762 if (err < 0) 6763 return err; 6764 6765 if (bt_debugfs) { 6766 l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs, 6767 NULL, &l2cap_debugfs_fops); 6768 if (!l2cap_debugfs) 6769 BT_ERR("Failed to create L2CAP debug file"); 6770 } 6771 6772 return 0; 6773 } 6774 6775 void l2cap_exit(void) 6776 { 6777 debugfs_remove(l2cap_debugfs); 6778 l2cap_cleanup_sockets(); 6779 } 6780 6781 module_param(disable_ertm, bool, 0644); 6782 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode"); 6783