0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #include <linux/module.h>
0032
0033 #include <linux/debugfs.h>
0034 #include <linux/crc16.h>
0035 #include <linux/filter.h>
0036
0037 #include <net/bluetooth/bluetooth.h>
0038 #include <net/bluetooth/hci_core.h>
0039 #include <net/bluetooth/l2cap.h>
0040
0041 #include "smp.h"
0042 #include "a2mp.h"
0043 #include "amp.h"
0044
0045 #define LE_FLOWCTL_MAX_CREDITS 65535
0046
0047 bool disable_ertm;
0048 bool enable_ecred;
0049
0050 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN | L2CAP_FEAT_UCD;
0051
0052 static LIST_HEAD(chan_list);
0053 static DEFINE_RWLOCK(chan_list_lock);
0054
0055 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
0056 u8 code, u8 ident, u16 dlen, void *data);
0057 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
0058 void *data);
0059 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size);
0060 static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err);
0061
0062 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
0063 struct sk_buff_head *skbs, u8 event);
0064
0065 static inline u8 bdaddr_type(u8 link_type, u8 bdaddr_type)
0066 {
0067 if (link_type == LE_LINK) {
0068 if (bdaddr_type == ADDR_LE_DEV_PUBLIC)
0069 return BDADDR_LE_PUBLIC;
0070 else
0071 return BDADDR_LE_RANDOM;
0072 }
0073
0074 return BDADDR_BREDR;
0075 }
0076
0077 static inline u8 bdaddr_src_type(struct hci_conn *hcon)
0078 {
0079 return bdaddr_type(hcon->type, hcon->src_type);
0080 }
0081
0082 static inline u8 bdaddr_dst_type(struct hci_conn *hcon)
0083 {
0084 return bdaddr_type(hcon->type, hcon->dst_type);
0085 }
0086
0087
0088
0089 static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
0090 u16 cid)
0091 {
0092 struct l2cap_chan *c;
0093
0094 list_for_each_entry(c, &conn->chan_l, list) {
0095 if (c->dcid == cid)
0096 return c;
0097 }
0098 return NULL;
0099 }
0100
0101 static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn,
0102 u16 cid)
0103 {
0104 struct l2cap_chan *c;
0105
0106 list_for_each_entry(c, &conn->chan_l, list) {
0107 if (c->scid == cid)
0108 return c;
0109 }
0110 return NULL;
0111 }
0112
0113
0114
0115
0116 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn,
0117 u16 cid)
0118 {
0119 struct l2cap_chan *c;
0120
0121 mutex_lock(&conn->chan_lock);
0122 c = __l2cap_get_chan_by_scid(conn, cid);
0123 if (c) {
0124
0125 c = l2cap_chan_hold_unless_zero(c);
0126 if (c)
0127 l2cap_chan_lock(c);
0128 }
0129 mutex_unlock(&conn->chan_lock);
0130
0131 return c;
0132 }
0133
0134
0135
0136
0137 static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
0138 u16 cid)
0139 {
0140 struct l2cap_chan *c;
0141
0142 mutex_lock(&conn->chan_lock);
0143 c = __l2cap_get_chan_by_dcid(conn, cid);
0144 if (c) {
0145
0146 c = l2cap_chan_hold_unless_zero(c);
0147 if (c)
0148 l2cap_chan_lock(c);
0149 }
0150 mutex_unlock(&conn->chan_lock);
0151
0152 return c;
0153 }
0154
0155 static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn,
0156 u8 ident)
0157 {
0158 struct l2cap_chan *c;
0159
0160 list_for_each_entry(c, &conn->chan_l, list) {
0161 if (c->ident == ident)
0162 return c;
0163 }
0164 return NULL;
0165 }
0166
0167 static struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn,
0168 u8 ident)
0169 {
0170 struct l2cap_chan *c;
0171
0172 mutex_lock(&conn->chan_lock);
0173 c = __l2cap_get_chan_by_ident(conn, ident);
0174 if (c) {
0175
0176 c = l2cap_chan_hold_unless_zero(c);
0177 if (c)
0178 l2cap_chan_lock(c);
0179 }
0180 mutex_unlock(&conn->chan_lock);
0181
0182 return c;
0183 }
0184
0185 static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src,
0186 u8 src_type)
0187 {
0188 struct l2cap_chan *c;
0189
0190 list_for_each_entry(c, &chan_list, global_l) {
0191 if (src_type == BDADDR_BREDR && c->src_type != BDADDR_BREDR)
0192 continue;
0193
0194 if (src_type != BDADDR_BREDR && c->src_type == BDADDR_BREDR)
0195 continue;
0196
0197 if (c->sport == psm && !bacmp(&c->src, src))
0198 return c;
0199 }
0200 return NULL;
0201 }
0202
0203 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
0204 {
0205 int err;
0206
0207 write_lock(&chan_list_lock);
0208
0209 if (psm && __l2cap_global_chan_by_addr(psm, src, chan->src_type)) {
0210 err = -EADDRINUSE;
0211 goto done;
0212 }
0213
0214 if (psm) {
0215 chan->psm = psm;
0216 chan->sport = psm;
0217 err = 0;
0218 } else {
0219 u16 p, start, end, incr;
0220
0221 if (chan->src_type == BDADDR_BREDR) {
0222 start = L2CAP_PSM_DYN_START;
0223 end = L2CAP_PSM_AUTO_END;
0224 incr = 2;
0225 } else {
0226 start = L2CAP_PSM_LE_DYN_START;
0227 end = L2CAP_PSM_LE_DYN_END;
0228 incr = 1;
0229 }
0230
0231 err = -EINVAL;
0232 for (p = start; p <= end; p += incr)
0233 if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src,
0234 chan->src_type)) {
0235 chan->psm = cpu_to_le16(p);
0236 chan->sport = cpu_to_le16(p);
0237 err = 0;
0238 break;
0239 }
0240 }
0241
0242 done:
0243 write_unlock(&chan_list_lock);
0244 return err;
0245 }
0246 EXPORT_SYMBOL_GPL(l2cap_add_psm);
0247
0248 int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid)
0249 {
0250 write_lock(&chan_list_lock);
0251
0252
0253 chan->omtu = L2CAP_DEFAULT_MTU;
0254 chan->chan_type = L2CAP_CHAN_FIXED;
0255
0256 chan->scid = scid;
0257
0258 write_unlock(&chan_list_lock);
0259
0260 return 0;
0261 }
0262
0263 static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
0264 {
0265 u16 cid, dyn_end;
0266
0267 if (conn->hcon->type == LE_LINK)
0268 dyn_end = L2CAP_CID_LE_DYN_END;
0269 else
0270 dyn_end = L2CAP_CID_DYN_END;
0271
0272 for (cid = L2CAP_CID_DYN_START; cid <= dyn_end; cid++) {
0273 if (!__l2cap_get_chan_by_scid(conn, cid))
0274 return cid;
0275 }
0276
0277 return 0;
0278 }
0279
0280 static void l2cap_state_change(struct l2cap_chan *chan, int state)
0281 {
0282 BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
0283 state_to_string(state));
0284
0285 chan->state = state;
0286 chan->ops->state_change(chan, state, 0);
0287 }
0288
0289 static inline void l2cap_state_change_and_error(struct l2cap_chan *chan,
0290 int state, int err)
0291 {
0292 chan->state = state;
0293 chan->ops->state_change(chan, chan->state, err);
0294 }
0295
0296 static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
0297 {
0298 chan->ops->state_change(chan, chan->state, err);
0299 }
0300
0301 static void __set_retrans_timer(struct l2cap_chan *chan)
0302 {
0303 if (!delayed_work_pending(&chan->monitor_timer) &&
0304 chan->retrans_timeout) {
0305 l2cap_set_timer(chan, &chan->retrans_timer,
0306 msecs_to_jiffies(chan->retrans_timeout));
0307 }
0308 }
0309
0310 static void __set_monitor_timer(struct l2cap_chan *chan)
0311 {
0312 __clear_retrans_timer(chan);
0313 if (chan->monitor_timeout) {
0314 l2cap_set_timer(chan, &chan->monitor_timer,
0315 msecs_to_jiffies(chan->monitor_timeout));
0316 }
0317 }
0318
0319 static struct sk_buff *l2cap_ertm_seq_in_queue(struct sk_buff_head *head,
0320 u16 seq)
0321 {
0322 struct sk_buff *skb;
0323
0324 skb_queue_walk(head, skb) {
0325 if (bt_cb(skb)->l2cap.txseq == seq)
0326 return skb;
0327 }
0328
0329 return NULL;
0330 }
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343 static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size)
0344 {
0345 size_t alloc_size, i;
0346
0347
0348
0349
0350
0351 alloc_size = roundup_pow_of_two(size);
0352
0353 seq_list->list = kmalloc_array(alloc_size, sizeof(u16), GFP_KERNEL);
0354 if (!seq_list->list)
0355 return -ENOMEM;
0356
0357 seq_list->mask = alloc_size - 1;
0358 seq_list->head = L2CAP_SEQ_LIST_CLEAR;
0359 seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
0360 for (i = 0; i < alloc_size; i++)
0361 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
0362
0363 return 0;
0364 }
0365
0366 static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list)
0367 {
0368 kfree(seq_list->list);
0369 }
0370
0371 static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list,
0372 u16 seq)
0373 {
0374
0375 return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR;
0376 }
0377
0378 static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list)
0379 {
0380 u16 seq = seq_list->head;
0381 u16 mask = seq_list->mask;
0382
0383 seq_list->head = seq_list->list[seq & mask];
0384 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
0385
0386 if (seq_list->head == L2CAP_SEQ_LIST_TAIL) {
0387 seq_list->head = L2CAP_SEQ_LIST_CLEAR;
0388 seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
0389 }
0390
0391 return seq;
0392 }
0393
0394 static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list)
0395 {
0396 u16 i;
0397
0398 if (seq_list->head == L2CAP_SEQ_LIST_CLEAR)
0399 return;
0400
0401 for (i = 0; i <= seq_list->mask; i++)
0402 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
0403
0404 seq_list->head = L2CAP_SEQ_LIST_CLEAR;
0405 seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
0406 }
0407
0408 static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq)
0409 {
0410 u16 mask = seq_list->mask;
0411
0412
0413
0414 if (seq_list->list[seq & mask] != L2CAP_SEQ_LIST_CLEAR)
0415 return;
0416
0417 if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR)
0418 seq_list->head = seq;
0419 else
0420 seq_list->list[seq_list->tail & mask] = seq;
0421
0422 seq_list->tail = seq;
0423 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL;
0424 }
0425
0426 static void l2cap_chan_timeout(struct work_struct *work)
0427 {
0428 struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
0429 chan_timer.work);
0430 struct l2cap_conn *conn = chan->conn;
0431 int reason;
0432
0433 BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
0434
0435 mutex_lock(&conn->chan_lock);
0436
0437
0438
0439 l2cap_chan_lock(chan);
0440
0441 if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
0442 reason = ECONNREFUSED;
0443 else if (chan->state == BT_CONNECT &&
0444 chan->sec_level != BT_SECURITY_SDP)
0445 reason = ECONNREFUSED;
0446 else
0447 reason = ETIMEDOUT;
0448
0449 l2cap_chan_close(chan, reason);
0450
0451 chan->ops->close(chan);
0452
0453 l2cap_chan_unlock(chan);
0454 l2cap_chan_put(chan);
0455
0456 mutex_unlock(&conn->chan_lock);
0457 }
0458
0459 struct l2cap_chan *l2cap_chan_create(void)
0460 {
0461 struct l2cap_chan *chan;
0462
0463 chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
0464 if (!chan)
0465 return NULL;
0466
0467 skb_queue_head_init(&chan->tx_q);
0468 skb_queue_head_init(&chan->srej_q);
0469 mutex_init(&chan->lock);
0470
0471
0472 atomic_set(&chan->nesting, L2CAP_NESTING_NORMAL);
0473
0474 write_lock(&chan_list_lock);
0475 list_add(&chan->global_l, &chan_list);
0476 write_unlock(&chan_list_lock);
0477
0478 INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
0479
0480 chan->state = BT_OPEN;
0481
0482 kref_init(&chan->kref);
0483
0484
0485 set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
0486
0487 BT_DBG("chan %p", chan);
0488
0489 return chan;
0490 }
0491 EXPORT_SYMBOL_GPL(l2cap_chan_create);
0492
0493 static void l2cap_chan_destroy(struct kref *kref)
0494 {
0495 struct l2cap_chan *chan = container_of(kref, struct l2cap_chan, kref);
0496
0497 BT_DBG("chan %p", chan);
0498
0499 write_lock(&chan_list_lock);
0500 list_del(&chan->global_l);
0501 write_unlock(&chan_list_lock);
0502
0503 kfree(chan);
0504 }
0505
0506 void l2cap_chan_hold(struct l2cap_chan *c)
0507 {
0508 BT_DBG("chan %p orig refcnt %u", c, kref_read(&c->kref));
0509
0510 kref_get(&c->kref);
0511 }
0512
0513 struct l2cap_chan *l2cap_chan_hold_unless_zero(struct l2cap_chan *c)
0514 {
0515 BT_DBG("chan %p orig refcnt %u", c, kref_read(&c->kref));
0516
0517 if (!kref_get_unless_zero(&c->kref))
0518 return NULL;
0519
0520 return c;
0521 }
0522
0523 void l2cap_chan_put(struct l2cap_chan *c)
0524 {
0525 BT_DBG("chan %p orig refcnt %u", c, kref_read(&c->kref));
0526
0527 kref_put(&c->kref, l2cap_chan_destroy);
0528 }
0529 EXPORT_SYMBOL_GPL(l2cap_chan_put);
0530
0531 void l2cap_chan_set_defaults(struct l2cap_chan *chan)
0532 {
0533 chan->fcs = L2CAP_FCS_CRC16;
0534 chan->max_tx = L2CAP_DEFAULT_MAX_TX;
0535 chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
0536 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
0537 chan->remote_max_tx = chan->max_tx;
0538 chan->remote_tx_win = chan->tx_win;
0539 chan->ack_win = L2CAP_DEFAULT_TX_WINDOW;
0540 chan->sec_level = BT_SECURITY_LOW;
0541 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
0542 chan->retrans_timeout = L2CAP_DEFAULT_RETRANS_TO;
0543 chan->monitor_timeout = L2CAP_DEFAULT_MONITOR_TO;
0544
0545 chan->conf_state = 0;
0546 set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
0547
0548 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
0549 }
0550 EXPORT_SYMBOL_GPL(l2cap_chan_set_defaults);
0551
0552 static void l2cap_le_flowctl_init(struct l2cap_chan *chan, u16 tx_credits)
0553 {
0554 chan->sdu = NULL;
0555 chan->sdu_last_frag = NULL;
0556 chan->sdu_len = 0;
0557 chan->tx_credits = tx_credits;
0558
0559 chan->mps = min_t(u16, chan->imtu, chan->conn->mtu - L2CAP_HDR_SIZE);
0560
0561 chan->rx_credits = (chan->imtu / chan->mps) + 1;
0562
0563 skb_queue_head_init(&chan->tx_q);
0564 }
0565
0566 static void l2cap_ecred_init(struct l2cap_chan *chan, u16 tx_credits)
0567 {
0568 l2cap_le_flowctl_init(chan, tx_credits);
0569
0570
0571 if (chan->mps < L2CAP_ECRED_MIN_MPS) {
0572 chan->mps = L2CAP_ECRED_MIN_MPS;
0573 chan->rx_credits = (chan->imtu / chan->mps) + 1;
0574 }
0575 }
0576
0577 void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
0578 {
0579 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
0580 __le16_to_cpu(chan->psm), chan->dcid);
0581
0582 conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
0583
0584 chan->conn = conn;
0585
0586 switch (chan->chan_type) {
0587 case L2CAP_CHAN_CONN_ORIENTED:
0588
0589 chan->scid = l2cap_alloc_cid(conn);
0590 if (conn->hcon->type == ACL_LINK)
0591 chan->omtu = L2CAP_DEFAULT_MTU;
0592 break;
0593
0594 case L2CAP_CHAN_CONN_LESS:
0595
0596 chan->scid = L2CAP_CID_CONN_LESS;
0597 chan->dcid = L2CAP_CID_CONN_LESS;
0598 chan->omtu = L2CAP_DEFAULT_MTU;
0599 break;
0600
0601 case L2CAP_CHAN_FIXED:
0602
0603 break;
0604
0605 default:
0606
0607 chan->scid = L2CAP_CID_SIGNALING;
0608 chan->dcid = L2CAP_CID_SIGNALING;
0609 chan->omtu = L2CAP_DEFAULT_MTU;
0610 }
0611
0612 chan->local_id = L2CAP_BESTEFFORT_ID;
0613 chan->local_stype = L2CAP_SERV_BESTEFFORT;
0614 chan->local_msdu = L2CAP_DEFAULT_MAX_SDU_SIZE;
0615 chan->local_sdu_itime = L2CAP_DEFAULT_SDU_ITIME;
0616 chan->local_acc_lat = L2CAP_DEFAULT_ACC_LAT;
0617 chan->local_flush_to = L2CAP_EFS_DEFAULT_FLUSH_TO;
0618
0619 l2cap_chan_hold(chan);
0620
0621
0622 if (chan->chan_type != L2CAP_CHAN_FIXED ||
0623 test_bit(FLAG_HOLD_HCI_CONN, &chan->flags))
0624 hci_conn_hold(conn->hcon);
0625
0626 list_add(&chan->list, &conn->chan_l);
0627 }
0628
0629 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
0630 {
0631 mutex_lock(&conn->chan_lock);
0632 __l2cap_chan_add(conn, chan);
0633 mutex_unlock(&conn->chan_lock);
0634 }
0635
0636 void l2cap_chan_del(struct l2cap_chan *chan, int err)
0637 {
0638 struct l2cap_conn *conn = chan->conn;
0639
0640 __clear_chan_timer(chan);
0641
0642 BT_DBG("chan %p, conn %p, err %d, state %s", chan, conn, err,
0643 state_to_string(chan->state));
0644
0645 chan->ops->teardown(chan, err);
0646
0647 if (conn) {
0648 struct amp_mgr *mgr = conn->hcon->amp_mgr;
0649
0650 list_del(&chan->list);
0651
0652 l2cap_chan_put(chan);
0653
0654 chan->conn = NULL;
0655
0656
0657
0658
0659
0660 if (chan->chan_type != L2CAP_CHAN_FIXED ||
0661 test_bit(FLAG_HOLD_HCI_CONN, &chan->flags))
0662 hci_conn_drop(conn->hcon);
0663
0664 if (mgr && mgr->bredr_chan == chan)
0665 mgr->bredr_chan = NULL;
0666 }
0667
0668 if (chan->hs_hchan) {
0669 struct hci_chan *hs_hchan = chan->hs_hchan;
0670
0671 BT_DBG("chan %p disconnect hs_hchan %p", chan, hs_hchan);
0672 amp_disconnect_logical_link(hs_hchan);
0673 }
0674
0675 if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state))
0676 return;
0677
0678 switch (chan->mode) {
0679 case L2CAP_MODE_BASIC:
0680 break;
0681
0682 case L2CAP_MODE_LE_FLOWCTL:
0683 case L2CAP_MODE_EXT_FLOWCTL:
0684 skb_queue_purge(&chan->tx_q);
0685 break;
0686
0687 case L2CAP_MODE_ERTM:
0688 __clear_retrans_timer(chan);
0689 __clear_monitor_timer(chan);
0690 __clear_ack_timer(chan);
0691
0692 skb_queue_purge(&chan->srej_q);
0693
0694 l2cap_seq_list_free(&chan->srej_list);
0695 l2cap_seq_list_free(&chan->retrans_list);
0696 fallthrough;
0697
0698 case L2CAP_MODE_STREAMING:
0699 skb_queue_purge(&chan->tx_q);
0700 break;
0701 }
0702 }
0703 EXPORT_SYMBOL_GPL(l2cap_chan_del);
0704
0705 static void __l2cap_chan_list(struct l2cap_conn *conn, l2cap_chan_func_t func,
0706 void *data)
0707 {
0708 struct l2cap_chan *chan;
0709
0710 list_for_each_entry(chan, &conn->chan_l, list) {
0711 func(chan, data);
0712 }
0713 }
0714
0715 void l2cap_chan_list(struct l2cap_conn *conn, l2cap_chan_func_t func,
0716 void *data)
0717 {
0718 if (!conn)
0719 return;
0720
0721 mutex_lock(&conn->chan_lock);
0722 __l2cap_chan_list(conn, func, data);
0723 mutex_unlock(&conn->chan_lock);
0724 }
0725
0726 EXPORT_SYMBOL_GPL(l2cap_chan_list);
0727
0728 static void l2cap_conn_update_id_addr(struct work_struct *work)
0729 {
0730 struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
0731 id_addr_update_work);
0732 struct hci_conn *hcon = conn->hcon;
0733 struct l2cap_chan *chan;
0734
0735 mutex_lock(&conn->chan_lock);
0736
0737 list_for_each_entry(chan, &conn->chan_l, list) {
0738 l2cap_chan_lock(chan);
0739 bacpy(&chan->dst, &hcon->dst);
0740 chan->dst_type = bdaddr_dst_type(hcon);
0741 l2cap_chan_unlock(chan);
0742 }
0743
0744 mutex_unlock(&conn->chan_lock);
0745 }
0746
0747 static void l2cap_chan_le_connect_reject(struct l2cap_chan *chan)
0748 {
0749 struct l2cap_conn *conn = chan->conn;
0750 struct l2cap_le_conn_rsp rsp;
0751 u16 result;
0752
0753 if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
0754 result = L2CAP_CR_LE_AUTHORIZATION;
0755 else
0756 result = L2CAP_CR_LE_BAD_PSM;
0757
0758 l2cap_state_change(chan, BT_DISCONN);
0759
0760 rsp.dcid = cpu_to_le16(chan->scid);
0761 rsp.mtu = cpu_to_le16(chan->imtu);
0762 rsp.mps = cpu_to_le16(chan->mps);
0763 rsp.credits = cpu_to_le16(chan->rx_credits);
0764 rsp.result = cpu_to_le16(result);
0765
0766 l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
0767 &rsp);
0768 }
0769
0770 static void l2cap_chan_ecred_connect_reject(struct l2cap_chan *chan)
0771 {
0772 struct l2cap_conn *conn = chan->conn;
0773 struct l2cap_ecred_conn_rsp rsp;
0774 u16 result;
0775
0776 if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
0777 result = L2CAP_CR_LE_AUTHORIZATION;
0778 else
0779 result = L2CAP_CR_LE_BAD_PSM;
0780
0781 l2cap_state_change(chan, BT_DISCONN);
0782
0783 memset(&rsp, 0, sizeof(rsp));
0784
0785 rsp.result = cpu_to_le16(result);
0786
0787 l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
0788 &rsp);
0789 }
0790
0791 static void l2cap_chan_connect_reject(struct l2cap_chan *chan)
0792 {
0793 struct l2cap_conn *conn = chan->conn;
0794 struct l2cap_conn_rsp rsp;
0795 u16 result;
0796
0797 if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
0798 result = L2CAP_CR_SEC_BLOCK;
0799 else
0800 result = L2CAP_CR_BAD_PSM;
0801
0802 l2cap_state_change(chan, BT_DISCONN);
0803
0804 rsp.scid = cpu_to_le16(chan->dcid);
0805 rsp.dcid = cpu_to_le16(chan->scid);
0806 rsp.result = cpu_to_le16(result);
0807 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
0808
0809 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
0810 }
0811
0812 void l2cap_chan_close(struct l2cap_chan *chan, int reason)
0813 {
0814 struct l2cap_conn *conn = chan->conn;
0815
0816 BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
0817
0818 switch (chan->state) {
0819 case BT_LISTEN:
0820 chan->ops->teardown(chan, 0);
0821 break;
0822
0823 case BT_CONNECTED:
0824 case BT_CONFIG:
0825 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
0826 __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
0827 l2cap_send_disconn_req(chan, reason);
0828 } else
0829 l2cap_chan_del(chan, reason);
0830 break;
0831
0832 case BT_CONNECT2:
0833 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
0834 if (conn->hcon->type == ACL_LINK)
0835 l2cap_chan_connect_reject(chan);
0836 else if (conn->hcon->type == LE_LINK) {
0837 switch (chan->mode) {
0838 case L2CAP_MODE_LE_FLOWCTL:
0839 l2cap_chan_le_connect_reject(chan);
0840 break;
0841 case L2CAP_MODE_EXT_FLOWCTL:
0842 l2cap_chan_ecred_connect_reject(chan);
0843 break;
0844 }
0845 }
0846 }
0847
0848 l2cap_chan_del(chan, reason);
0849 break;
0850
0851 case BT_CONNECT:
0852 case BT_DISCONN:
0853 l2cap_chan_del(chan, reason);
0854 break;
0855
0856 default:
0857 chan->ops->teardown(chan, 0);
0858 break;
0859 }
0860 }
0861 EXPORT_SYMBOL(l2cap_chan_close);
0862
0863 static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
0864 {
0865 switch (chan->chan_type) {
0866 case L2CAP_CHAN_RAW:
0867 switch (chan->sec_level) {
0868 case BT_SECURITY_HIGH:
0869 case BT_SECURITY_FIPS:
0870 return HCI_AT_DEDICATED_BONDING_MITM;
0871 case BT_SECURITY_MEDIUM:
0872 return HCI_AT_DEDICATED_BONDING;
0873 default:
0874 return HCI_AT_NO_BONDING;
0875 }
0876 break;
0877 case L2CAP_CHAN_CONN_LESS:
0878 if (chan->psm == cpu_to_le16(L2CAP_PSM_3DSP)) {
0879 if (chan->sec_level == BT_SECURITY_LOW)
0880 chan->sec_level = BT_SECURITY_SDP;
0881 }
0882 if (chan->sec_level == BT_SECURITY_HIGH ||
0883 chan->sec_level == BT_SECURITY_FIPS)
0884 return HCI_AT_NO_BONDING_MITM;
0885 else
0886 return HCI_AT_NO_BONDING;
0887 break;
0888 case L2CAP_CHAN_CONN_ORIENTED:
0889 if (chan->psm == cpu_to_le16(L2CAP_PSM_SDP)) {
0890 if (chan->sec_level == BT_SECURITY_LOW)
0891 chan->sec_level = BT_SECURITY_SDP;
0892
0893 if (chan->sec_level == BT_SECURITY_HIGH ||
0894 chan->sec_level == BT_SECURITY_FIPS)
0895 return HCI_AT_NO_BONDING_MITM;
0896 else
0897 return HCI_AT_NO_BONDING;
0898 }
0899 fallthrough;
0900
0901 default:
0902 switch (chan->sec_level) {
0903 case BT_SECURITY_HIGH:
0904 case BT_SECURITY_FIPS:
0905 return HCI_AT_GENERAL_BONDING_MITM;
0906 case BT_SECURITY_MEDIUM:
0907 return HCI_AT_GENERAL_BONDING;
0908 default:
0909 return HCI_AT_NO_BONDING;
0910 }
0911 break;
0912 }
0913 }
0914
0915
0916 int l2cap_chan_check_security(struct l2cap_chan *chan, bool initiator)
0917 {
0918 struct l2cap_conn *conn = chan->conn;
0919 __u8 auth_type;
0920
0921 if (conn->hcon->type == LE_LINK)
0922 return smp_conn_security(conn->hcon, chan->sec_level);
0923
0924 auth_type = l2cap_get_auth_type(chan);
0925
0926 return hci_conn_security(conn->hcon, chan->sec_level, auth_type,
0927 initiator);
0928 }
0929
0930 static u8 l2cap_get_ident(struct l2cap_conn *conn)
0931 {
0932 u8 id;
0933
0934
0935
0936
0937
0938
0939
0940 mutex_lock(&conn->ident_lock);
0941
0942 if (++conn->tx_ident > 128)
0943 conn->tx_ident = 1;
0944
0945 id = conn->tx_ident;
0946
0947 mutex_unlock(&conn->ident_lock);
0948
0949 return id;
0950 }
0951
0952 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
0953 void *data)
0954 {
0955 struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
0956 u8 flags;
0957
0958 BT_DBG("code 0x%2.2x", code);
0959
0960 if (!skb)
0961 return;
0962
0963
0964
0965 if (lmp_no_flush_capable(conn->hcon->hdev) ||
0966 conn->hcon->type == LE_LINK)
0967 flags = ACL_START_NO_FLUSH;
0968 else
0969 flags = ACL_START;
0970
0971 bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
0972 skb->priority = HCI_PRIO_MAX;
0973
0974 hci_send_acl(conn->hchan, skb, flags);
0975 }
0976
0977 static bool __chan_is_moving(struct l2cap_chan *chan)
0978 {
0979 return chan->move_state != L2CAP_MOVE_STABLE &&
0980 chan->move_state != L2CAP_MOVE_WAIT_PREPARE;
0981 }
0982
0983 static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
0984 {
0985 struct hci_conn *hcon = chan->conn->hcon;
0986 u16 flags;
0987
0988 BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len,
0989 skb->priority);
0990
0991 if (chan->hs_hcon && !__chan_is_moving(chan)) {
0992 if (chan->hs_hchan)
0993 hci_send_acl(chan->hs_hchan, skb, ACL_COMPLETE);
0994 else
0995 kfree_skb(skb);
0996
0997 return;
0998 }
0999
1000
1001
1002
1003
1004 if (hcon->type == LE_LINK ||
1005 (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
1006 lmp_no_flush_capable(hcon->hdev)))
1007 flags = ACL_START_NO_FLUSH;
1008 else
1009 flags = ACL_START;
1010
1011 bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
1012 hci_send_acl(chan->conn->hchan, skb, flags);
1013 }
1014
1015 static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control)
1016 {
1017 control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
1018 control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT;
1019
1020 if (enh & L2CAP_CTRL_FRAME_TYPE) {
1021
1022 control->sframe = 1;
1023 control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT;
1024 control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
1025
1026 control->sar = 0;
1027 control->txseq = 0;
1028 } else {
1029
1030 control->sframe = 0;
1031 control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
1032 control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
1033
1034 control->poll = 0;
1035 control->super = 0;
1036 }
1037 }
1038
1039 static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control)
1040 {
1041 control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT;
1042 control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT;
1043
1044 if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) {
1045
1046 control->sframe = 1;
1047 control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT;
1048 control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT;
1049
1050 control->sar = 0;
1051 control->txseq = 0;
1052 } else {
1053
1054 control->sframe = 0;
1055 control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
1056 control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT;
1057
1058 control->poll = 0;
1059 control->super = 0;
1060 }
1061 }
1062
1063 static inline void __unpack_control(struct l2cap_chan *chan,
1064 struct sk_buff *skb)
1065 {
1066 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
1067 __unpack_extended_control(get_unaligned_le32(skb->data),
1068 &bt_cb(skb)->l2cap);
1069 skb_pull(skb, L2CAP_EXT_CTRL_SIZE);
1070 } else {
1071 __unpack_enhanced_control(get_unaligned_le16(skb->data),
1072 &bt_cb(skb)->l2cap);
1073 skb_pull(skb, L2CAP_ENH_CTRL_SIZE);
1074 }
1075 }
1076
1077 static u32 __pack_extended_control(struct l2cap_ctrl *control)
1078 {
1079 u32 packed;
1080
1081 packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT;
1082 packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT;
1083
1084 if (control->sframe) {
1085 packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT;
1086 packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT;
1087 packed |= L2CAP_EXT_CTRL_FRAME_TYPE;
1088 } else {
1089 packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT;
1090 packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT;
1091 }
1092
1093 return packed;
1094 }
1095
1096 static u16 __pack_enhanced_control(struct l2cap_ctrl *control)
1097 {
1098 u16 packed;
1099
1100 packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT;
1101 packed |= control->final << L2CAP_CTRL_FINAL_SHIFT;
1102
1103 if (control->sframe) {
1104 packed |= control->poll << L2CAP_CTRL_POLL_SHIFT;
1105 packed |= control->super << L2CAP_CTRL_SUPER_SHIFT;
1106 packed |= L2CAP_CTRL_FRAME_TYPE;
1107 } else {
1108 packed |= control->sar << L2CAP_CTRL_SAR_SHIFT;
1109 packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT;
1110 }
1111
1112 return packed;
1113 }
1114
1115 static inline void __pack_control(struct l2cap_chan *chan,
1116 struct l2cap_ctrl *control,
1117 struct sk_buff *skb)
1118 {
1119 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
1120 put_unaligned_le32(__pack_extended_control(control),
1121 skb->data + L2CAP_HDR_SIZE);
1122 } else {
1123 put_unaligned_le16(__pack_enhanced_control(control),
1124 skb->data + L2CAP_HDR_SIZE);
1125 }
1126 }
1127
1128 static inline unsigned int __ertm_hdr_size(struct l2cap_chan *chan)
1129 {
1130 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1131 return L2CAP_EXT_HDR_SIZE;
1132 else
1133 return L2CAP_ENH_HDR_SIZE;
1134 }
1135
1136 static struct sk_buff *l2cap_create_sframe_pdu(struct l2cap_chan *chan,
1137 u32 control)
1138 {
1139 struct sk_buff *skb;
1140 struct l2cap_hdr *lh;
1141 int hlen = __ertm_hdr_size(chan);
1142
1143 if (chan->fcs == L2CAP_FCS_CRC16)
1144 hlen += L2CAP_FCS_SIZE;
1145
1146 skb = bt_skb_alloc(hlen, GFP_KERNEL);
1147
1148 if (!skb)
1149 return ERR_PTR(-ENOMEM);
1150
1151 lh = skb_put(skb, L2CAP_HDR_SIZE);
1152 lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
1153 lh->cid = cpu_to_le16(chan->dcid);
1154
1155 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1156 put_unaligned_le32(control, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
1157 else
1158 put_unaligned_le16(control, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
1159
1160 if (chan->fcs == L2CAP_FCS_CRC16) {
1161 u16 fcs = crc16(0, (u8 *)skb->data, skb->len);
1162 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1163 }
1164
1165 skb->priority = HCI_PRIO_MAX;
1166 return skb;
1167 }
1168
1169 static void l2cap_send_sframe(struct l2cap_chan *chan,
1170 struct l2cap_ctrl *control)
1171 {
1172 struct sk_buff *skb;
1173 u32 control_field;
1174
1175 BT_DBG("chan %p, control %p", chan, control);
1176
1177 if (!control->sframe)
1178 return;
1179
1180 if (__chan_is_moving(chan))
1181 return;
1182
1183 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state) &&
1184 !control->poll)
1185 control->final = 1;
1186
1187 if (control->super == L2CAP_SUPER_RR)
1188 clear_bit(CONN_RNR_SENT, &chan->conn_state);
1189 else if (control->super == L2CAP_SUPER_RNR)
1190 set_bit(CONN_RNR_SENT, &chan->conn_state);
1191
1192 if (control->super != L2CAP_SUPER_SREJ) {
1193 chan->last_acked_seq = control->reqseq;
1194 __clear_ack_timer(chan);
1195 }
1196
1197 BT_DBG("reqseq %d, final %d, poll %d, super %d", control->reqseq,
1198 control->final, control->poll, control->super);
1199
1200 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1201 control_field = __pack_extended_control(control);
1202 else
1203 control_field = __pack_enhanced_control(control);
1204
1205 skb = l2cap_create_sframe_pdu(chan, control_field);
1206 if (!IS_ERR(skb))
1207 l2cap_do_send(chan, skb);
1208 }
1209
1210 static void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, bool poll)
1211 {
1212 struct l2cap_ctrl control;
1213
1214 BT_DBG("chan %p, poll %d", chan, poll);
1215
1216 memset(&control, 0, sizeof(control));
1217 control.sframe = 1;
1218 control.poll = poll;
1219
1220 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
1221 control.super = L2CAP_SUPER_RNR;
1222 else
1223 control.super = L2CAP_SUPER_RR;
1224
1225 control.reqseq = chan->buffer_seq;
1226 l2cap_send_sframe(chan, &control);
1227 }
1228
1229 static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
1230 {
1231 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
1232 return true;
1233
1234 return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
1235 }
1236
1237 static bool __amp_capable(struct l2cap_chan *chan)
1238 {
1239 struct l2cap_conn *conn = chan->conn;
1240 struct hci_dev *hdev;
1241 bool amp_available = false;
1242
1243 if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
1244 return false;
1245
1246 if (!(conn->remote_fixed_chan & L2CAP_FC_A2MP))
1247 return false;
1248
1249 read_lock(&hci_dev_list_lock);
1250 list_for_each_entry(hdev, &hci_dev_list, list) {
1251 if (hdev->amp_type != AMP_TYPE_BREDR &&
1252 test_bit(HCI_UP, &hdev->flags)) {
1253 amp_available = true;
1254 break;
1255 }
1256 }
1257 read_unlock(&hci_dev_list_lock);
1258
1259 if (chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED)
1260 return amp_available;
1261
1262 return false;
1263 }
1264
1265 static bool l2cap_check_efs(struct l2cap_chan *chan)
1266 {
1267
1268 return true;
1269 }
1270
1271 void l2cap_send_conn_req(struct l2cap_chan *chan)
1272 {
1273 struct l2cap_conn *conn = chan->conn;
1274 struct l2cap_conn_req req;
1275
1276 req.scid = cpu_to_le16(chan->scid);
1277 req.psm = chan->psm;
1278
1279 chan->ident = l2cap_get_ident(conn);
1280
1281 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
1282
1283 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
1284 }
1285
1286 static void l2cap_send_create_chan_req(struct l2cap_chan *chan, u8 amp_id)
1287 {
1288 struct l2cap_create_chan_req req;
1289 req.scid = cpu_to_le16(chan->scid);
1290 req.psm = chan->psm;
1291 req.amp_id = amp_id;
1292
1293 chan->ident = l2cap_get_ident(chan->conn);
1294
1295 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_REQ,
1296 sizeof(req), &req);
1297 }
1298
1299 static void l2cap_move_setup(struct l2cap_chan *chan)
1300 {
1301 struct sk_buff *skb;
1302
1303 BT_DBG("chan %p", chan);
1304
1305 if (chan->mode != L2CAP_MODE_ERTM)
1306 return;
1307
1308 __clear_retrans_timer(chan);
1309 __clear_monitor_timer(chan);
1310 __clear_ack_timer(chan);
1311
1312 chan->retry_count = 0;
1313 skb_queue_walk(&chan->tx_q, skb) {
1314 if (bt_cb(skb)->l2cap.retries)
1315 bt_cb(skb)->l2cap.retries = 1;
1316 else
1317 break;
1318 }
1319
1320 chan->expected_tx_seq = chan->buffer_seq;
1321
1322 clear_bit(CONN_REJ_ACT, &chan->conn_state);
1323 clear_bit(CONN_SREJ_ACT, &chan->conn_state);
1324 l2cap_seq_list_clear(&chan->retrans_list);
1325 l2cap_seq_list_clear(&chan->srej_list);
1326 skb_queue_purge(&chan->srej_q);
1327
1328 chan->tx_state = L2CAP_TX_STATE_XMIT;
1329 chan->rx_state = L2CAP_RX_STATE_MOVE;
1330
1331 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
1332 }
1333
1334 static void l2cap_move_done(struct l2cap_chan *chan)
1335 {
1336 u8 move_role = chan->move_role;
1337 BT_DBG("chan %p", chan);
1338
1339 chan->move_state = L2CAP_MOVE_STABLE;
1340 chan->move_role = L2CAP_MOVE_ROLE_NONE;
1341
1342 if (chan->mode != L2CAP_MODE_ERTM)
1343 return;
1344
1345 switch (move_role) {
1346 case L2CAP_MOVE_ROLE_INITIATOR:
1347 l2cap_tx(chan, NULL, NULL, L2CAP_EV_EXPLICIT_POLL);
1348 chan->rx_state = L2CAP_RX_STATE_WAIT_F;
1349 break;
1350 case L2CAP_MOVE_ROLE_RESPONDER:
1351 chan->rx_state = L2CAP_RX_STATE_WAIT_P;
1352 break;
1353 }
1354 }
1355
1356 static void l2cap_chan_ready(struct l2cap_chan *chan)
1357 {
1358
1359
1360
1361
1362 if (chan->state == BT_CONNECTED)
1363 return;
1364
1365
1366 chan->conf_state = 0;
1367 __clear_chan_timer(chan);
1368
1369 switch (chan->mode) {
1370 case L2CAP_MODE_LE_FLOWCTL:
1371 case L2CAP_MODE_EXT_FLOWCTL:
1372 if (!chan->tx_credits)
1373 chan->ops->suspend(chan);
1374 break;
1375 }
1376
1377 chan->state = BT_CONNECTED;
1378
1379 chan->ops->ready(chan);
1380 }
1381
1382 static void l2cap_le_connect(struct l2cap_chan *chan)
1383 {
1384 struct l2cap_conn *conn = chan->conn;
1385 struct l2cap_le_conn_req req;
1386
1387 if (test_and_set_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags))
1388 return;
1389
1390 if (!chan->imtu)
1391 chan->imtu = chan->conn->mtu;
1392
1393 l2cap_le_flowctl_init(chan, 0);
1394
1395 memset(&req, 0, sizeof(req));
1396 req.psm = chan->psm;
1397 req.scid = cpu_to_le16(chan->scid);
1398 req.mtu = cpu_to_le16(chan->imtu);
1399 req.mps = cpu_to_le16(chan->mps);
1400 req.credits = cpu_to_le16(chan->rx_credits);
1401
1402 chan->ident = l2cap_get_ident(conn);
1403
1404 l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_REQ,
1405 sizeof(req), &req);
1406 }
1407
1408 struct l2cap_ecred_conn_data {
1409 struct {
1410 struct l2cap_ecred_conn_req req;
1411 __le16 scid[5];
1412 } __packed pdu;
1413 struct l2cap_chan *chan;
1414 struct pid *pid;
1415 int count;
1416 };
1417
1418 static void l2cap_ecred_defer_connect(struct l2cap_chan *chan, void *data)
1419 {
1420 struct l2cap_ecred_conn_data *conn = data;
1421 struct pid *pid;
1422
1423 if (chan == conn->chan)
1424 return;
1425
1426 if (!test_and_clear_bit(FLAG_DEFER_SETUP, &chan->flags))
1427 return;
1428
1429 pid = chan->ops->get_peer_pid(chan);
1430
1431
1432 if (conn->pid != pid || chan->psm != conn->chan->psm || chan->ident ||
1433 chan->mode != L2CAP_MODE_EXT_FLOWCTL || chan->state != BT_CONNECT)
1434 return;
1435
1436 if (test_and_set_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags))
1437 return;
1438
1439 l2cap_ecred_init(chan, 0);
1440
1441
1442 chan->ident = conn->chan->ident;
1443
1444
1445 conn->pdu.scid[conn->count] = cpu_to_le16(chan->scid);
1446
1447 conn->count++;
1448 }
1449
1450 static void l2cap_ecred_connect(struct l2cap_chan *chan)
1451 {
1452 struct l2cap_conn *conn = chan->conn;
1453 struct l2cap_ecred_conn_data data;
1454
1455 if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
1456 return;
1457
1458 if (test_and_set_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags))
1459 return;
1460
1461 l2cap_ecred_init(chan, 0);
1462
1463 memset(&data, 0, sizeof(data));
1464 data.pdu.req.psm = chan->psm;
1465 data.pdu.req.mtu = cpu_to_le16(chan->imtu);
1466 data.pdu.req.mps = cpu_to_le16(chan->mps);
1467 data.pdu.req.credits = cpu_to_le16(chan->rx_credits);
1468 data.pdu.scid[0] = cpu_to_le16(chan->scid);
1469
1470 chan->ident = l2cap_get_ident(conn);
1471
1472 data.count = 1;
1473 data.chan = chan;
1474 data.pid = chan->ops->get_peer_pid(chan);
1475
1476 __l2cap_chan_list(conn, l2cap_ecred_defer_connect, &data);
1477
1478 l2cap_send_cmd(conn, chan->ident, L2CAP_ECRED_CONN_REQ,
1479 sizeof(data.pdu.req) + data.count * sizeof(__le16),
1480 &data.pdu);
1481 }
1482
1483 static void l2cap_le_start(struct l2cap_chan *chan)
1484 {
1485 struct l2cap_conn *conn = chan->conn;
1486
1487 if (!smp_conn_security(conn->hcon, chan->sec_level))
1488 return;
1489
1490 if (!chan->psm) {
1491 l2cap_chan_ready(chan);
1492 return;
1493 }
1494
1495 if (chan->state == BT_CONNECT) {
1496 if (chan->mode == L2CAP_MODE_EXT_FLOWCTL)
1497 l2cap_ecred_connect(chan);
1498 else
1499 l2cap_le_connect(chan);
1500 }
1501 }
1502
1503 static void l2cap_start_connection(struct l2cap_chan *chan)
1504 {
1505 if (__amp_capable(chan)) {
1506 BT_DBG("chan %p AMP capable: discover AMPs", chan);
1507 a2mp_discover_amp(chan);
1508 } else if (chan->conn->hcon->type == LE_LINK) {
1509 l2cap_le_start(chan);
1510 } else {
1511 l2cap_send_conn_req(chan);
1512 }
1513 }
1514
1515 static void l2cap_request_info(struct l2cap_conn *conn)
1516 {
1517 struct l2cap_info_req req;
1518
1519 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1520 return;
1521
1522 req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
1523
1524 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
1525 conn->info_ident = l2cap_get_ident(conn);
1526
1527 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
1528
1529 l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
1530 sizeof(req), &req);
1531 }
1532
1533 static bool l2cap_check_enc_key_size(struct hci_conn *hcon)
1534 {
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544 int min_key_size = hcon->hdev->min_enc_key_size;
1545
1546
1547 if (hcon->sec_level == BT_SECURITY_FIPS)
1548 min_key_size = 16;
1549
1550 return (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags) ||
1551 hcon->enc_key_size >= min_key_size);
1552 }
1553
1554 static void l2cap_do_start(struct l2cap_chan *chan)
1555 {
1556 struct l2cap_conn *conn = chan->conn;
1557
1558 if (conn->hcon->type == LE_LINK) {
1559 l2cap_le_start(chan);
1560 return;
1561 }
1562
1563 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)) {
1564 l2cap_request_info(conn);
1565 return;
1566 }
1567
1568 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
1569 return;
1570
1571 if (!l2cap_chan_check_security(chan, true) ||
1572 !__l2cap_no_conn_pending(chan))
1573 return;
1574
1575 if (l2cap_check_enc_key_size(conn->hcon))
1576 l2cap_start_connection(chan);
1577 else
1578 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
1579 }
1580
1581 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
1582 {
1583 u32 local_feat_mask = l2cap_feat_mask;
1584 if (!disable_ertm)
1585 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
1586
1587 switch (mode) {
1588 case L2CAP_MODE_ERTM:
1589 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
1590 case L2CAP_MODE_STREAMING:
1591 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
1592 default:
1593 return 0x00;
1594 }
1595 }
1596
1597 static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err)
1598 {
1599 struct l2cap_conn *conn = chan->conn;
1600 struct l2cap_disconn_req req;
1601
1602 if (!conn)
1603 return;
1604
1605 if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) {
1606 __clear_retrans_timer(chan);
1607 __clear_monitor_timer(chan);
1608 __clear_ack_timer(chan);
1609 }
1610
1611 if (chan->scid == L2CAP_CID_A2MP) {
1612 l2cap_state_change(chan, BT_DISCONN);
1613 return;
1614 }
1615
1616 req.dcid = cpu_to_le16(chan->dcid);
1617 req.scid = cpu_to_le16(chan->scid);
1618 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_DISCONN_REQ,
1619 sizeof(req), &req);
1620
1621 l2cap_state_change_and_error(chan, BT_DISCONN, err);
1622 }
1623
1624
1625 static void l2cap_conn_start(struct l2cap_conn *conn)
1626 {
1627 struct l2cap_chan *chan, *tmp;
1628
1629 BT_DBG("conn %p", conn);
1630
1631 mutex_lock(&conn->chan_lock);
1632
1633 list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
1634 l2cap_chan_lock(chan);
1635
1636 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1637 l2cap_chan_ready(chan);
1638 l2cap_chan_unlock(chan);
1639 continue;
1640 }
1641
1642 if (chan->state == BT_CONNECT) {
1643 if (!l2cap_chan_check_security(chan, true) ||
1644 !__l2cap_no_conn_pending(chan)) {
1645 l2cap_chan_unlock(chan);
1646 continue;
1647 }
1648
1649 if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
1650 && test_bit(CONF_STATE2_DEVICE,
1651 &chan->conf_state)) {
1652 l2cap_chan_close(chan, ECONNRESET);
1653 l2cap_chan_unlock(chan);
1654 continue;
1655 }
1656
1657 if (l2cap_check_enc_key_size(conn->hcon))
1658 l2cap_start_connection(chan);
1659 else
1660 l2cap_chan_close(chan, ECONNREFUSED);
1661
1662 } else if (chan->state == BT_CONNECT2) {
1663 struct l2cap_conn_rsp rsp;
1664 char buf[128];
1665 rsp.scid = cpu_to_le16(chan->dcid);
1666 rsp.dcid = cpu_to_le16(chan->scid);
1667
1668 if (l2cap_chan_check_security(chan, false)) {
1669 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
1670 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1671 rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
1672 chan->ops->defer(chan);
1673
1674 } else {
1675 l2cap_state_change(chan, BT_CONFIG);
1676 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
1677 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
1678 }
1679 } else {
1680 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1681 rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
1682 }
1683
1684 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
1685 sizeof(rsp), &rsp);
1686
1687 if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
1688 rsp.result != L2CAP_CR_SUCCESS) {
1689 l2cap_chan_unlock(chan);
1690 continue;
1691 }
1692
1693 set_bit(CONF_REQ_SENT, &chan->conf_state);
1694 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1695 l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
1696 chan->num_conf_req++;
1697 }
1698
1699 l2cap_chan_unlock(chan);
1700 }
1701
1702 mutex_unlock(&conn->chan_lock);
1703 }
1704
1705 static void l2cap_le_conn_ready(struct l2cap_conn *conn)
1706 {
1707 struct hci_conn *hcon = conn->hcon;
1708 struct hci_dev *hdev = hcon->hdev;
1709
1710 BT_DBG("%s conn %p", hdev->name, conn);
1711
1712
1713
1714
1715 if (hcon->out)
1716 smp_conn_security(hcon, hcon->pending_sec_level);
1717
1718
1719
1720
1721
1722
1723 if (hcon->role == HCI_ROLE_SLAVE &&
1724 (hcon->le_conn_interval < hcon->le_conn_min_interval ||
1725 hcon->le_conn_interval > hcon->le_conn_max_interval)) {
1726 struct l2cap_conn_param_update_req req;
1727
1728 req.min = cpu_to_le16(hcon->le_conn_min_interval);
1729 req.max = cpu_to_le16(hcon->le_conn_max_interval);
1730 req.latency = cpu_to_le16(hcon->le_conn_latency);
1731 req.to_multiplier = cpu_to_le16(hcon->le_supv_timeout);
1732
1733 l2cap_send_cmd(conn, l2cap_get_ident(conn),
1734 L2CAP_CONN_PARAM_UPDATE_REQ, sizeof(req), &req);
1735 }
1736 }
1737
1738 static void l2cap_conn_ready(struct l2cap_conn *conn)
1739 {
1740 struct l2cap_chan *chan;
1741 struct hci_conn *hcon = conn->hcon;
1742
1743 BT_DBG("conn %p", conn);
1744
1745 if (hcon->type == ACL_LINK)
1746 l2cap_request_info(conn);
1747
1748 mutex_lock(&conn->chan_lock);
1749
1750 list_for_each_entry(chan, &conn->chan_l, list) {
1751
1752 l2cap_chan_lock(chan);
1753
1754 if (chan->scid == L2CAP_CID_A2MP) {
1755 l2cap_chan_unlock(chan);
1756 continue;
1757 }
1758
1759 if (hcon->type == LE_LINK) {
1760 l2cap_le_start(chan);
1761 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1762 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
1763 l2cap_chan_ready(chan);
1764 } else if (chan->state == BT_CONNECT) {
1765 l2cap_do_start(chan);
1766 }
1767
1768 l2cap_chan_unlock(chan);
1769 }
1770
1771 mutex_unlock(&conn->chan_lock);
1772
1773 if (hcon->type == LE_LINK)
1774 l2cap_le_conn_ready(conn);
1775
1776 queue_work(hcon->hdev->workqueue, &conn->pending_rx_work);
1777 }
1778
1779
1780 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
1781 {
1782 struct l2cap_chan *chan;
1783
1784 BT_DBG("conn %p", conn);
1785
1786 mutex_lock(&conn->chan_lock);
1787
1788 list_for_each_entry(chan, &conn->chan_l, list) {
1789 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
1790 l2cap_chan_set_err(chan, err);
1791 }
1792
1793 mutex_unlock(&conn->chan_lock);
1794 }
1795
1796 static void l2cap_info_timeout(struct work_struct *work)
1797 {
1798 struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1799 info_timer.work);
1800
1801 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1802 conn->info_ident = 0;
1803
1804 l2cap_conn_start(conn);
1805 }
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820 int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user)
1821 {
1822 struct hci_dev *hdev = conn->hcon->hdev;
1823 int ret;
1824
1825
1826
1827
1828
1829
1830
1831
1832 hci_dev_lock(hdev);
1833
1834 if (!list_empty(&user->list)) {
1835 ret = -EINVAL;
1836 goto out_unlock;
1837 }
1838
1839
1840 if (!conn->hchan) {
1841 ret = -ENODEV;
1842 goto out_unlock;
1843 }
1844
1845 ret = user->probe(conn, user);
1846 if (ret)
1847 goto out_unlock;
1848
1849 list_add(&user->list, &conn->users);
1850 ret = 0;
1851
1852 out_unlock:
1853 hci_dev_unlock(hdev);
1854 return ret;
1855 }
1856 EXPORT_SYMBOL(l2cap_register_user);
1857
1858 void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user)
1859 {
1860 struct hci_dev *hdev = conn->hcon->hdev;
1861
1862 hci_dev_lock(hdev);
1863
1864 if (list_empty(&user->list))
1865 goto out_unlock;
1866
1867 list_del_init(&user->list);
1868 user->remove(conn, user);
1869
1870 out_unlock:
1871 hci_dev_unlock(hdev);
1872 }
1873 EXPORT_SYMBOL(l2cap_unregister_user);
1874
1875 static void l2cap_unregister_all_users(struct l2cap_conn *conn)
1876 {
1877 struct l2cap_user *user;
1878
1879 while (!list_empty(&conn->users)) {
1880 user = list_first_entry(&conn->users, struct l2cap_user, list);
1881 list_del_init(&user->list);
1882 user->remove(conn, user);
1883 }
1884 }
1885
1886 static void l2cap_conn_del(struct hci_conn *hcon, int err)
1887 {
1888 struct l2cap_conn *conn = hcon->l2cap_data;
1889 struct l2cap_chan *chan, *l;
1890
1891 if (!conn)
1892 return;
1893
1894 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
1895
1896 kfree_skb(conn->rx_skb);
1897
1898 skb_queue_purge(&conn->pending_rx);
1899
1900
1901
1902
1903
1904 if (work_pending(&conn->pending_rx_work))
1905 cancel_work_sync(&conn->pending_rx_work);
1906
1907 if (work_pending(&conn->id_addr_update_work))
1908 cancel_work_sync(&conn->id_addr_update_work);
1909
1910 l2cap_unregister_all_users(conn);
1911
1912
1913 hcon->disc_timeout = 0;
1914
1915 mutex_lock(&conn->chan_lock);
1916
1917
1918 list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1919 l2cap_chan_hold(chan);
1920 l2cap_chan_lock(chan);
1921
1922 l2cap_chan_del(chan, err);
1923
1924 chan->ops->close(chan);
1925
1926 l2cap_chan_unlock(chan);
1927 l2cap_chan_put(chan);
1928 }
1929
1930 mutex_unlock(&conn->chan_lock);
1931
1932 hci_chan_del(conn->hchan);
1933
1934 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1935 cancel_delayed_work_sync(&conn->info_timer);
1936
1937 hcon->l2cap_data = NULL;
1938 conn->hchan = NULL;
1939 l2cap_conn_put(conn);
1940 }
1941
1942 static void l2cap_conn_free(struct kref *ref)
1943 {
1944 struct l2cap_conn *conn = container_of(ref, struct l2cap_conn, ref);
1945
1946 hci_conn_put(conn->hcon);
1947 kfree(conn);
1948 }
1949
1950 struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn)
1951 {
1952 kref_get(&conn->ref);
1953 return conn;
1954 }
1955 EXPORT_SYMBOL(l2cap_conn_get);
1956
1957 void l2cap_conn_put(struct l2cap_conn *conn)
1958 {
1959 kref_put(&conn->ref, l2cap_conn_free);
1960 }
1961 EXPORT_SYMBOL(l2cap_conn_put);
1962
1963
1964
1965
1966
1967
1968 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
1969 bdaddr_t *src,
1970 bdaddr_t *dst,
1971 u8 link_type)
1972 {
1973 struct l2cap_chan *c, *tmp, *c1 = NULL;
1974
1975 read_lock(&chan_list_lock);
1976
1977 list_for_each_entry_safe(c, tmp, &chan_list, global_l) {
1978 if (state && c->state != state)
1979 continue;
1980
1981 if (link_type == ACL_LINK && c->src_type != BDADDR_BREDR)
1982 continue;
1983
1984 if (link_type == LE_LINK && c->src_type == BDADDR_BREDR)
1985 continue;
1986
1987 if (c->psm == psm) {
1988 int src_match, dst_match;
1989 int src_any, dst_any;
1990
1991
1992 src_match = !bacmp(&c->src, src);
1993 dst_match = !bacmp(&c->dst, dst);
1994 if (src_match && dst_match) {
1995 if (!l2cap_chan_hold_unless_zero(c))
1996 continue;
1997
1998 read_unlock(&chan_list_lock);
1999 return c;
2000 }
2001
2002
2003 src_any = !bacmp(&c->src, BDADDR_ANY);
2004 dst_any = !bacmp(&c->dst, BDADDR_ANY);
2005 if ((src_match && dst_any) || (src_any && dst_match) ||
2006 (src_any && dst_any))
2007 c1 = c;
2008 }
2009 }
2010
2011 if (c1)
2012 c1 = l2cap_chan_hold_unless_zero(c1);
2013
2014 read_unlock(&chan_list_lock);
2015
2016 return c1;
2017 }
2018
2019 static void l2cap_monitor_timeout(struct work_struct *work)
2020 {
2021 struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
2022 monitor_timer.work);
2023
2024 BT_DBG("chan %p", chan);
2025
2026 l2cap_chan_lock(chan);
2027
2028 if (!chan->conn) {
2029 l2cap_chan_unlock(chan);
2030 l2cap_chan_put(chan);
2031 return;
2032 }
2033
2034 l2cap_tx(chan, NULL, NULL, L2CAP_EV_MONITOR_TO);
2035
2036 l2cap_chan_unlock(chan);
2037 l2cap_chan_put(chan);
2038 }
2039
2040 static void l2cap_retrans_timeout(struct work_struct *work)
2041 {
2042 struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
2043 retrans_timer.work);
2044
2045 BT_DBG("chan %p", chan);
2046
2047 l2cap_chan_lock(chan);
2048
2049 if (!chan->conn) {
2050 l2cap_chan_unlock(chan);
2051 l2cap_chan_put(chan);
2052 return;
2053 }
2054
2055 l2cap_tx(chan, NULL, NULL, L2CAP_EV_RETRANS_TO);
2056 l2cap_chan_unlock(chan);
2057 l2cap_chan_put(chan);
2058 }
2059
2060 static void l2cap_streaming_send(struct l2cap_chan *chan,
2061 struct sk_buff_head *skbs)
2062 {
2063 struct sk_buff *skb;
2064 struct l2cap_ctrl *control;
2065
2066 BT_DBG("chan %p, skbs %p", chan, skbs);
2067
2068 if (__chan_is_moving(chan))
2069 return;
2070
2071 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2072
2073 while (!skb_queue_empty(&chan->tx_q)) {
2074
2075 skb = skb_dequeue(&chan->tx_q);
2076
2077 bt_cb(skb)->l2cap.retries = 1;
2078 control = &bt_cb(skb)->l2cap;
2079
2080 control->reqseq = 0;
2081 control->txseq = chan->next_tx_seq;
2082
2083 __pack_control(chan, control, skb);
2084
2085 if (chan->fcs == L2CAP_FCS_CRC16) {
2086 u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
2087 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
2088 }
2089
2090 l2cap_do_send(chan, skb);
2091
2092 BT_DBG("Sent txseq %u", control->txseq);
2093
2094 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
2095 chan->frames_sent++;
2096 }
2097 }
2098
2099 static int l2cap_ertm_send(struct l2cap_chan *chan)
2100 {
2101 struct sk_buff *skb, *tx_skb;
2102 struct l2cap_ctrl *control;
2103 int sent = 0;
2104
2105 BT_DBG("chan %p", chan);
2106
2107 if (chan->state != BT_CONNECTED)
2108 return -ENOTCONN;
2109
2110 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2111 return 0;
2112
2113 if (__chan_is_moving(chan))
2114 return 0;
2115
2116 while (chan->tx_send_head &&
2117 chan->unacked_frames < chan->remote_tx_win &&
2118 chan->tx_state == L2CAP_TX_STATE_XMIT) {
2119
2120 skb = chan->tx_send_head;
2121
2122 bt_cb(skb)->l2cap.retries = 1;
2123 control = &bt_cb(skb)->l2cap;
2124
2125 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
2126 control->final = 1;
2127
2128 control->reqseq = chan->buffer_seq;
2129 chan->last_acked_seq = chan->buffer_seq;
2130 control->txseq = chan->next_tx_seq;
2131
2132 __pack_control(chan, control, skb);
2133
2134 if (chan->fcs == L2CAP_FCS_CRC16) {
2135 u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
2136 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
2137 }
2138
2139
2140
2141
2142 tx_skb = skb_clone(skb, GFP_KERNEL);
2143
2144 if (!tx_skb)
2145 break;
2146
2147 __set_retrans_timer(chan);
2148
2149 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
2150 chan->unacked_frames++;
2151 chan->frames_sent++;
2152 sent++;
2153
2154 if (skb_queue_is_last(&chan->tx_q, skb))
2155 chan->tx_send_head = NULL;
2156 else
2157 chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
2158
2159 l2cap_do_send(chan, tx_skb);
2160 BT_DBG("Sent txseq %u", control->txseq);
2161 }
2162
2163 BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent,
2164 chan->unacked_frames, skb_queue_len(&chan->tx_q));
2165
2166 return sent;
2167 }
2168
2169 static void l2cap_ertm_resend(struct l2cap_chan *chan)
2170 {
2171 struct l2cap_ctrl control;
2172 struct sk_buff *skb;
2173 struct sk_buff *tx_skb;
2174 u16 seq;
2175
2176 BT_DBG("chan %p", chan);
2177
2178 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2179 return;
2180
2181 if (__chan_is_moving(chan))
2182 return;
2183
2184 while (chan->retrans_list.head != L2CAP_SEQ_LIST_CLEAR) {
2185 seq = l2cap_seq_list_pop(&chan->retrans_list);
2186
2187 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, seq);
2188 if (!skb) {
2189 BT_DBG("Error: Can't retransmit seq %d, frame missing",
2190 seq);
2191 continue;
2192 }
2193
2194 bt_cb(skb)->l2cap.retries++;
2195 control = bt_cb(skb)->l2cap;
2196
2197 if (chan->max_tx != 0 &&
2198 bt_cb(skb)->l2cap.retries > chan->max_tx) {
2199 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
2200 l2cap_send_disconn_req(chan, ECONNRESET);
2201 l2cap_seq_list_clear(&chan->retrans_list);
2202 break;
2203 }
2204
2205 control.reqseq = chan->buffer_seq;
2206 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
2207 control.final = 1;
2208 else
2209 control.final = 0;
2210
2211 if (skb_cloned(skb)) {
2212
2213
2214
2215 tx_skb = skb_copy(skb, GFP_KERNEL);
2216 } else {
2217 tx_skb = skb_clone(skb, GFP_KERNEL);
2218 }
2219
2220 if (!tx_skb) {
2221 l2cap_seq_list_clear(&chan->retrans_list);
2222 break;
2223 }
2224
2225
2226 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
2227 put_unaligned_le32(__pack_extended_control(&control),
2228 tx_skb->data + L2CAP_HDR_SIZE);
2229 } else {
2230 put_unaligned_le16(__pack_enhanced_control(&control),
2231 tx_skb->data + L2CAP_HDR_SIZE);
2232 }
2233
2234
2235 if (chan->fcs == L2CAP_FCS_CRC16) {
2236 u16 fcs = crc16(0, (u8 *) tx_skb->data,
2237 tx_skb->len - L2CAP_FCS_SIZE);
2238 put_unaligned_le16(fcs, skb_tail_pointer(tx_skb) -
2239 L2CAP_FCS_SIZE);
2240 }
2241
2242 l2cap_do_send(chan, tx_skb);
2243
2244 BT_DBG("Resent txseq %d", control.txseq);
2245
2246 chan->last_acked_seq = chan->buffer_seq;
2247 }
2248 }
2249
2250 static void l2cap_retransmit(struct l2cap_chan *chan,
2251 struct l2cap_ctrl *control)
2252 {
2253 BT_DBG("chan %p, control %p", chan, control);
2254
2255 l2cap_seq_list_append(&chan->retrans_list, control->reqseq);
2256 l2cap_ertm_resend(chan);
2257 }
2258
2259 static void l2cap_retransmit_all(struct l2cap_chan *chan,
2260 struct l2cap_ctrl *control)
2261 {
2262 struct sk_buff *skb;
2263
2264 BT_DBG("chan %p, control %p", chan, control);
2265
2266 if (control->poll)
2267 set_bit(CONN_SEND_FBIT, &chan->conn_state);
2268
2269 l2cap_seq_list_clear(&chan->retrans_list);
2270
2271 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2272 return;
2273
2274 if (chan->unacked_frames) {
2275 skb_queue_walk(&chan->tx_q, skb) {
2276 if (bt_cb(skb)->l2cap.txseq == control->reqseq ||
2277 skb == chan->tx_send_head)
2278 break;
2279 }
2280
2281 skb_queue_walk_from(&chan->tx_q, skb) {
2282 if (skb == chan->tx_send_head)
2283 break;
2284
2285 l2cap_seq_list_append(&chan->retrans_list,
2286 bt_cb(skb)->l2cap.txseq);
2287 }
2288
2289 l2cap_ertm_resend(chan);
2290 }
2291 }
2292
2293 static void l2cap_send_ack(struct l2cap_chan *chan)
2294 {
2295 struct l2cap_ctrl control;
2296 u16 frames_to_ack = __seq_offset(chan, chan->buffer_seq,
2297 chan->last_acked_seq);
2298 int threshold;
2299
2300 BT_DBG("chan %p last_acked_seq %d buffer_seq %d",
2301 chan, chan->last_acked_seq, chan->buffer_seq);
2302
2303 memset(&control, 0, sizeof(control));
2304 control.sframe = 1;
2305
2306 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
2307 chan->rx_state == L2CAP_RX_STATE_RECV) {
2308 __clear_ack_timer(chan);
2309 control.super = L2CAP_SUPER_RNR;
2310 control.reqseq = chan->buffer_seq;
2311 l2cap_send_sframe(chan, &control);
2312 } else {
2313 if (!test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) {
2314 l2cap_ertm_send(chan);
2315
2316 if (chan->buffer_seq == chan->last_acked_seq)
2317 frames_to_ack = 0;
2318 }
2319
2320
2321
2322
2323 threshold = chan->ack_win;
2324 threshold += threshold << 1;
2325 threshold >>= 2;
2326
2327 BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack,
2328 threshold);
2329
2330 if (frames_to_ack >= threshold) {
2331 __clear_ack_timer(chan);
2332 control.super = L2CAP_SUPER_RR;
2333 control.reqseq = chan->buffer_seq;
2334 l2cap_send_sframe(chan, &control);
2335 frames_to_ack = 0;
2336 }
2337
2338 if (frames_to_ack)
2339 __set_ack_timer(chan);
2340 }
2341 }
2342
2343 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
2344 struct msghdr *msg, int len,
2345 int count, struct sk_buff *skb)
2346 {
2347 struct l2cap_conn *conn = chan->conn;
2348 struct sk_buff **frag;
2349 int sent = 0;
2350
2351 if (!copy_from_iter_full(skb_put(skb, count), count, &msg->msg_iter))
2352 return -EFAULT;
2353
2354 sent += count;
2355 len -= count;
2356
2357
2358 frag = &skb_shinfo(skb)->frag_list;
2359 while (len) {
2360 struct sk_buff *tmp;
2361
2362 count = min_t(unsigned int, conn->mtu, len);
2363
2364 tmp = chan->ops->alloc_skb(chan, 0, count,
2365 msg->msg_flags & MSG_DONTWAIT);
2366 if (IS_ERR(tmp))
2367 return PTR_ERR(tmp);
2368
2369 *frag = tmp;
2370
2371 if (!copy_from_iter_full(skb_put(*frag, count), count,
2372 &msg->msg_iter))
2373 return -EFAULT;
2374
2375 sent += count;
2376 len -= count;
2377
2378 skb->len += (*frag)->len;
2379 skb->data_len += (*frag)->len;
2380
2381 frag = &(*frag)->next;
2382 }
2383
2384 return sent;
2385 }
2386
2387 static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
2388 struct msghdr *msg, size_t len)
2389 {
2390 struct l2cap_conn *conn = chan->conn;
2391 struct sk_buff *skb;
2392 int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
2393 struct l2cap_hdr *lh;
2394
2395 BT_DBG("chan %p psm 0x%2.2x len %zu", chan,
2396 __le16_to_cpu(chan->psm), len);
2397
2398 count = min_t(unsigned int, (conn->mtu - hlen), len);
2399
2400 skb = chan->ops->alloc_skb(chan, hlen, count,
2401 msg->msg_flags & MSG_DONTWAIT);
2402 if (IS_ERR(skb))
2403 return skb;
2404
2405
2406 lh = skb_put(skb, L2CAP_HDR_SIZE);
2407 lh->cid = cpu_to_le16(chan->dcid);
2408 lh->len = cpu_to_le16(len + L2CAP_PSMLEN_SIZE);
2409 put_unaligned(chan->psm, (__le16 *) skb_put(skb, L2CAP_PSMLEN_SIZE));
2410
2411 err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2412 if (unlikely(err < 0)) {
2413 kfree_skb(skb);
2414 return ERR_PTR(err);
2415 }
2416 return skb;
2417 }
2418
2419 static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
2420 struct msghdr *msg, size_t len)
2421 {
2422 struct l2cap_conn *conn = chan->conn;
2423 struct sk_buff *skb;
2424 int err, count;
2425 struct l2cap_hdr *lh;
2426
2427 BT_DBG("chan %p len %zu", chan, len);
2428
2429 count = min_t(unsigned int, (conn->mtu - L2CAP_HDR_SIZE), len);
2430
2431 skb = chan->ops->alloc_skb(chan, L2CAP_HDR_SIZE, count,
2432 msg->msg_flags & MSG_DONTWAIT);
2433 if (IS_ERR(skb))
2434 return skb;
2435
2436
2437 lh = skb_put(skb, L2CAP_HDR_SIZE);
2438 lh->cid = cpu_to_le16(chan->dcid);
2439 lh->len = cpu_to_le16(len);
2440
2441 err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2442 if (unlikely(err < 0)) {
2443 kfree_skb(skb);
2444 return ERR_PTR(err);
2445 }
2446 return skb;
2447 }
2448
2449 static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
2450 struct msghdr *msg, size_t len,
2451 u16 sdulen)
2452 {
2453 struct l2cap_conn *conn = chan->conn;
2454 struct sk_buff *skb;
2455 int err, count, hlen;
2456 struct l2cap_hdr *lh;
2457
2458 BT_DBG("chan %p len %zu", chan, len);
2459
2460 if (!conn)
2461 return ERR_PTR(-ENOTCONN);
2462
2463 hlen = __ertm_hdr_size(chan);
2464
2465 if (sdulen)
2466 hlen += L2CAP_SDULEN_SIZE;
2467
2468 if (chan->fcs == L2CAP_FCS_CRC16)
2469 hlen += L2CAP_FCS_SIZE;
2470
2471 count = min_t(unsigned int, (conn->mtu - hlen), len);
2472
2473 skb = chan->ops->alloc_skb(chan, hlen, count,
2474 msg->msg_flags & MSG_DONTWAIT);
2475 if (IS_ERR(skb))
2476 return skb;
2477
2478
2479 lh = skb_put(skb, L2CAP_HDR_SIZE);
2480 lh->cid = cpu_to_le16(chan->dcid);
2481 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2482
2483
2484 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
2485 put_unaligned_le32(0, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
2486 else
2487 put_unaligned_le16(0, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
2488
2489 if (sdulen)
2490 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2491
2492 err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2493 if (unlikely(err < 0)) {
2494 kfree_skb(skb);
2495 return ERR_PTR(err);
2496 }
2497
2498 bt_cb(skb)->l2cap.fcs = chan->fcs;
2499 bt_cb(skb)->l2cap.retries = 0;
2500 return skb;
2501 }
2502
2503 static int l2cap_segment_sdu(struct l2cap_chan *chan,
2504 struct sk_buff_head *seg_queue,
2505 struct msghdr *msg, size_t len)
2506 {
2507 struct sk_buff *skb;
2508 u16 sdu_len;
2509 size_t pdu_len;
2510 u8 sar;
2511
2512 BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2513
2514
2515
2516
2517
2518
2519
2520 pdu_len = chan->conn->mtu;
2521
2522
2523 if (!chan->hs_hcon)
2524 pdu_len = min_t(size_t, pdu_len, L2CAP_BREDR_MAX_PAYLOAD);
2525
2526
2527 if (chan->fcs)
2528 pdu_len -= L2CAP_FCS_SIZE;
2529
2530 pdu_len -= __ertm_hdr_size(chan);
2531
2532
2533 pdu_len = min_t(size_t, pdu_len, chan->remote_mps);
2534
2535 if (len <= pdu_len) {
2536 sar = L2CAP_SAR_UNSEGMENTED;
2537 sdu_len = 0;
2538 pdu_len = len;
2539 } else {
2540 sar = L2CAP_SAR_START;
2541 sdu_len = len;
2542 }
2543
2544 while (len > 0) {
2545 skb = l2cap_create_iframe_pdu(chan, msg, pdu_len, sdu_len);
2546
2547 if (IS_ERR(skb)) {
2548 __skb_queue_purge(seg_queue);
2549 return PTR_ERR(skb);
2550 }
2551
2552 bt_cb(skb)->l2cap.sar = sar;
2553 __skb_queue_tail(seg_queue, skb);
2554
2555 len -= pdu_len;
2556 if (sdu_len)
2557 sdu_len = 0;
2558
2559 if (len <= pdu_len) {
2560 sar = L2CAP_SAR_END;
2561 pdu_len = len;
2562 } else {
2563 sar = L2CAP_SAR_CONTINUE;
2564 }
2565 }
2566
2567 return 0;
2568 }
2569
2570 static struct sk_buff *l2cap_create_le_flowctl_pdu(struct l2cap_chan *chan,
2571 struct msghdr *msg,
2572 size_t len, u16 sdulen)
2573 {
2574 struct l2cap_conn *conn = chan->conn;
2575 struct sk_buff *skb;
2576 int err, count, hlen;
2577 struct l2cap_hdr *lh;
2578
2579 BT_DBG("chan %p len %zu", chan, len);
2580
2581 if (!conn)
2582 return ERR_PTR(-ENOTCONN);
2583
2584 hlen = L2CAP_HDR_SIZE;
2585
2586 if (sdulen)
2587 hlen += L2CAP_SDULEN_SIZE;
2588
2589 count = min_t(unsigned int, (conn->mtu - hlen), len);
2590
2591 skb = chan->ops->alloc_skb(chan, hlen, count,
2592 msg->msg_flags & MSG_DONTWAIT);
2593 if (IS_ERR(skb))
2594 return skb;
2595
2596
2597 lh = skb_put(skb, L2CAP_HDR_SIZE);
2598 lh->cid = cpu_to_le16(chan->dcid);
2599 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2600
2601 if (sdulen)
2602 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2603
2604 err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2605 if (unlikely(err < 0)) {
2606 kfree_skb(skb);
2607 return ERR_PTR(err);
2608 }
2609
2610 return skb;
2611 }
2612
2613 static int l2cap_segment_le_sdu(struct l2cap_chan *chan,
2614 struct sk_buff_head *seg_queue,
2615 struct msghdr *msg, size_t len)
2616 {
2617 struct sk_buff *skb;
2618 size_t pdu_len;
2619 u16 sdu_len;
2620
2621 BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2622
2623 sdu_len = len;
2624 pdu_len = chan->remote_mps - L2CAP_SDULEN_SIZE;
2625
2626 while (len > 0) {
2627 if (len <= pdu_len)
2628 pdu_len = len;
2629
2630 skb = l2cap_create_le_flowctl_pdu(chan, msg, pdu_len, sdu_len);
2631 if (IS_ERR(skb)) {
2632 __skb_queue_purge(seg_queue);
2633 return PTR_ERR(skb);
2634 }
2635
2636 __skb_queue_tail(seg_queue, skb);
2637
2638 len -= pdu_len;
2639
2640 if (sdu_len) {
2641 sdu_len = 0;
2642 pdu_len += L2CAP_SDULEN_SIZE;
2643 }
2644 }
2645
2646 return 0;
2647 }
2648
2649 static void l2cap_le_flowctl_send(struct l2cap_chan *chan)
2650 {
2651 int sent = 0;
2652
2653 BT_DBG("chan %p", chan);
2654
2655 while (chan->tx_credits && !skb_queue_empty(&chan->tx_q)) {
2656 l2cap_do_send(chan, skb_dequeue(&chan->tx_q));
2657 chan->tx_credits--;
2658 sent++;
2659 }
2660
2661 BT_DBG("Sent %d credits %u queued %u", sent, chan->tx_credits,
2662 skb_queue_len(&chan->tx_q));
2663 }
2664
2665 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
2666 {
2667 struct sk_buff *skb;
2668 int err;
2669 struct sk_buff_head seg_queue;
2670
2671 if (!chan->conn)
2672 return -ENOTCONN;
2673
2674
2675 if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
2676 skb = l2cap_create_connless_pdu(chan, msg, len);
2677 if (IS_ERR(skb))
2678 return PTR_ERR(skb);
2679
2680
2681
2682
2683 if (chan->state != BT_CONNECTED) {
2684 kfree_skb(skb);
2685 return -ENOTCONN;
2686 }
2687
2688 l2cap_do_send(chan, skb);
2689 return len;
2690 }
2691
2692 switch (chan->mode) {
2693 case L2CAP_MODE_LE_FLOWCTL:
2694 case L2CAP_MODE_EXT_FLOWCTL:
2695
2696 if (len > chan->omtu)
2697 return -EMSGSIZE;
2698
2699 __skb_queue_head_init(&seg_queue);
2700
2701 err = l2cap_segment_le_sdu(chan, &seg_queue, msg, len);
2702
2703 if (chan->state != BT_CONNECTED) {
2704 __skb_queue_purge(&seg_queue);
2705 err = -ENOTCONN;
2706 }
2707
2708 if (err)
2709 return err;
2710
2711 skb_queue_splice_tail_init(&seg_queue, &chan->tx_q);
2712
2713 l2cap_le_flowctl_send(chan);
2714
2715 if (!chan->tx_credits)
2716 chan->ops->suspend(chan);
2717
2718 err = len;
2719
2720 break;
2721
2722 case L2CAP_MODE_BASIC:
2723
2724 if (len > chan->omtu)
2725 return -EMSGSIZE;
2726
2727
2728 skb = l2cap_create_basic_pdu(chan, msg, len);
2729 if (IS_ERR(skb))
2730 return PTR_ERR(skb);
2731
2732
2733
2734
2735 if (chan->state != BT_CONNECTED) {
2736 kfree_skb(skb);
2737 return -ENOTCONN;
2738 }
2739
2740 l2cap_do_send(chan, skb);
2741 err = len;
2742 break;
2743
2744 case L2CAP_MODE_ERTM:
2745 case L2CAP_MODE_STREAMING:
2746
2747 if (len > chan->omtu) {
2748 err = -EMSGSIZE;
2749 break;
2750 }
2751
2752 __skb_queue_head_init(&seg_queue);
2753
2754
2755
2756
2757
2758 err = l2cap_segment_sdu(chan, &seg_queue, msg, len);
2759
2760
2761
2762
2763 if (chan->state != BT_CONNECTED) {
2764 __skb_queue_purge(&seg_queue);
2765 err = -ENOTCONN;
2766 }
2767
2768 if (err)
2769 break;
2770
2771 if (chan->mode == L2CAP_MODE_ERTM)
2772 l2cap_tx(chan, NULL, &seg_queue, L2CAP_EV_DATA_REQUEST);
2773 else
2774 l2cap_streaming_send(chan, &seg_queue);
2775
2776 err = len;
2777
2778
2779
2780
2781 __skb_queue_purge(&seg_queue);
2782 break;
2783
2784 default:
2785 BT_DBG("bad state %1.1x", chan->mode);
2786 err = -EBADFD;
2787 }
2788
2789 return err;
2790 }
2791 EXPORT_SYMBOL_GPL(l2cap_chan_send);
2792
2793 static void l2cap_send_srej(struct l2cap_chan *chan, u16 txseq)
2794 {
2795 struct l2cap_ctrl control;
2796 u16 seq;
2797
2798 BT_DBG("chan %p, txseq %u", chan, txseq);
2799
2800 memset(&control, 0, sizeof(control));
2801 control.sframe = 1;
2802 control.super = L2CAP_SUPER_SREJ;
2803
2804 for (seq = chan->expected_tx_seq; seq != txseq;
2805 seq = __next_seq(chan, seq)) {
2806 if (!l2cap_ertm_seq_in_queue(&chan->srej_q, seq)) {
2807 control.reqseq = seq;
2808 l2cap_send_sframe(chan, &control);
2809 l2cap_seq_list_append(&chan->srej_list, seq);
2810 }
2811 }
2812
2813 chan->expected_tx_seq = __next_seq(chan, txseq);
2814 }
2815
2816 static void l2cap_send_srej_tail(struct l2cap_chan *chan)
2817 {
2818 struct l2cap_ctrl control;
2819
2820 BT_DBG("chan %p", chan);
2821
2822 if (chan->srej_list.tail == L2CAP_SEQ_LIST_CLEAR)
2823 return;
2824
2825 memset(&control, 0, sizeof(control));
2826 control.sframe = 1;
2827 control.super = L2CAP_SUPER_SREJ;
2828 control.reqseq = chan->srej_list.tail;
2829 l2cap_send_sframe(chan, &control);
2830 }
2831
2832 static void l2cap_send_srej_list(struct l2cap_chan *chan, u16 txseq)
2833 {
2834 struct l2cap_ctrl control;
2835 u16 initial_head;
2836 u16 seq;
2837
2838 BT_DBG("chan %p, txseq %u", chan, txseq);
2839
2840 memset(&control, 0, sizeof(control));
2841 control.sframe = 1;
2842 control.super = L2CAP_SUPER_SREJ;
2843
2844
2845 initial_head = chan->srej_list.head;
2846
2847 do {
2848 seq = l2cap_seq_list_pop(&chan->srej_list);
2849 if (seq == txseq || seq == L2CAP_SEQ_LIST_CLEAR)
2850 break;
2851
2852 control.reqseq = seq;
2853 l2cap_send_sframe(chan, &control);
2854 l2cap_seq_list_append(&chan->srej_list, seq);
2855 } while (chan->srej_list.head != initial_head);
2856 }
2857
2858 static void l2cap_process_reqseq(struct l2cap_chan *chan, u16 reqseq)
2859 {
2860 struct sk_buff *acked_skb;
2861 u16 ackseq;
2862
2863 BT_DBG("chan %p, reqseq %u", chan, reqseq);
2864
2865 if (chan->unacked_frames == 0 || reqseq == chan->expected_ack_seq)
2866 return;
2867
2868 BT_DBG("expected_ack_seq %u, unacked_frames %u",
2869 chan->expected_ack_seq, chan->unacked_frames);
2870
2871 for (ackseq = chan->expected_ack_seq; ackseq != reqseq;
2872 ackseq = __next_seq(chan, ackseq)) {
2873
2874 acked_skb = l2cap_ertm_seq_in_queue(&chan->tx_q, ackseq);
2875 if (acked_skb) {
2876 skb_unlink(acked_skb, &chan->tx_q);
2877 kfree_skb(acked_skb);
2878 chan->unacked_frames--;
2879 }
2880 }
2881
2882 chan->expected_ack_seq = reqseq;
2883
2884 if (chan->unacked_frames == 0)
2885 __clear_retrans_timer(chan);
2886
2887 BT_DBG("unacked_frames %u", chan->unacked_frames);
2888 }
2889
2890 static void l2cap_abort_rx_srej_sent(struct l2cap_chan *chan)
2891 {
2892 BT_DBG("chan %p", chan);
2893
2894 chan->expected_tx_seq = chan->buffer_seq;
2895 l2cap_seq_list_clear(&chan->srej_list);
2896 skb_queue_purge(&chan->srej_q);
2897 chan->rx_state = L2CAP_RX_STATE_RECV;
2898 }
2899
2900 static void l2cap_tx_state_xmit(struct l2cap_chan *chan,
2901 struct l2cap_ctrl *control,
2902 struct sk_buff_head *skbs, u8 event)
2903 {
2904 BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2905 event);
2906
2907 switch (event) {
2908 case L2CAP_EV_DATA_REQUEST:
2909 if (chan->tx_send_head == NULL)
2910 chan->tx_send_head = skb_peek(skbs);
2911
2912 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2913 l2cap_ertm_send(chan);
2914 break;
2915 case L2CAP_EV_LOCAL_BUSY_DETECTED:
2916 BT_DBG("Enter LOCAL_BUSY");
2917 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2918
2919 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2920
2921
2922
2923 l2cap_abort_rx_srej_sent(chan);
2924 }
2925
2926 l2cap_send_ack(chan);
2927
2928 break;
2929 case L2CAP_EV_LOCAL_BUSY_CLEAR:
2930 BT_DBG("Exit LOCAL_BUSY");
2931 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2932
2933 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2934 struct l2cap_ctrl local_control;
2935
2936 memset(&local_control, 0, sizeof(local_control));
2937 local_control.sframe = 1;
2938 local_control.super = L2CAP_SUPER_RR;
2939 local_control.poll = 1;
2940 local_control.reqseq = chan->buffer_seq;
2941 l2cap_send_sframe(chan, &local_control);
2942
2943 chan->retry_count = 1;
2944 __set_monitor_timer(chan);
2945 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2946 }
2947 break;
2948 case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2949 l2cap_process_reqseq(chan, control->reqseq);
2950 break;
2951 case L2CAP_EV_EXPLICIT_POLL:
2952 l2cap_send_rr_or_rnr(chan, 1);
2953 chan->retry_count = 1;
2954 __set_monitor_timer(chan);
2955 __clear_ack_timer(chan);
2956 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2957 break;
2958 case L2CAP_EV_RETRANS_TO:
2959 l2cap_send_rr_or_rnr(chan, 1);
2960 chan->retry_count = 1;
2961 __set_monitor_timer(chan);
2962 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2963 break;
2964 case L2CAP_EV_RECV_FBIT:
2965
2966 break;
2967 default:
2968 break;
2969 }
2970 }
2971
2972 static void l2cap_tx_state_wait_f(struct l2cap_chan *chan,
2973 struct l2cap_ctrl *control,
2974 struct sk_buff_head *skbs, u8 event)
2975 {
2976 BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2977 event);
2978
2979 switch (event) {
2980 case L2CAP_EV_DATA_REQUEST:
2981 if (chan->tx_send_head == NULL)
2982 chan->tx_send_head = skb_peek(skbs);
2983
2984 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2985 break;
2986 case L2CAP_EV_LOCAL_BUSY_DETECTED:
2987 BT_DBG("Enter LOCAL_BUSY");
2988 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2989
2990 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2991
2992
2993
2994 l2cap_abort_rx_srej_sent(chan);
2995 }
2996
2997 l2cap_send_ack(chan);
2998
2999 break;
3000 case L2CAP_EV_LOCAL_BUSY_CLEAR:
3001 BT_DBG("Exit LOCAL_BUSY");
3002 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
3003
3004 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
3005 struct l2cap_ctrl local_control;
3006 memset(&local_control, 0, sizeof(local_control));
3007 local_control.sframe = 1;
3008 local_control.super = L2CAP_SUPER_RR;
3009 local_control.poll = 1;
3010 local_control.reqseq = chan->buffer_seq;
3011 l2cap_send_sframe(chan, &local_control);
3012
3013 chan->retry_count = 1;
3014 __set_monitor_timer(chan);
3015 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
3016 }
3017 break;
3018 case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
3019 l2cap_process_reqseq(chan, control->reqseq);
3020 fallthrough;
3021
3022 case L2CAP_EV_RECV_FBIT:
3023 if (control && control->final) {
3024 __clear_monitor_timer(chan);
3025 if (chan->unacked_frames > 0)
3026 __set_retrans_timer(chan);
3027 chan->retry_count = 0;
3028 chan->tx_state = L2CAP_TX_STATE_XMIT;
3029 BT_DBG("recv fbit tx_state 0x2.2%x", chan->tx_state);
3030 }
3031 break;
3032 case L2CAP_EV_EXPLICIT_POLL:
3033
3034 break;
3035 case L2CAP_EV_MONITOR_TO:
3036 if (chan->max_tx == 0 || chan->retry_count < chan->max_tx) {
3037 l2cap_send_rr_or_rnr(chan, 1);
3038 __set_monitor_timer(chan);
3039 chan->retry_count++;
3040 } else {
3041 l2cap_send_disconn_req(chan, ECONNABORTED);
3042 }
3043 break;
3044 default:
3045 break;
3046 }
3047 }
3048
3049 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
3050 struct sk_buff_head *skbs, u8 event)
3051 {
3052 BT_DBG("chan %p, control %p, skbs %p, event %d, state %d",
3053 chan, control, skbs, event, chan->tx_state);
3054
3055 switch (chan->tx_state) {
3056 case L2CAP_TX_STATE_XMIT:
3057 l2cap_tx_state_xmit(chan, control, skbs, event);
3058 break;
3059 case L2CAP_TX_STATE_WAIT_F:
3060 l2cap_tx_state_wait_f(chan, control, skbs, event);
3061 break;
3062 default:
3063
3064 break;
3065 }
3066 }
3067
3068 static void l2cap_pass_to_tx(struct l2cap_chan *chan,
3069 struct l2cap_ctrl *control)
3070 {
3071 BT_DBG("chan %p, control %p", chan, control);
3072 l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_REQSEQ_AND_FBIT);
3073 }
3074
3075 static void l2cap_pass_to_tx_fbit(struct l2cap_chan *chan,
3076 struct l2cap_ctrl *control)
3077 {
3078 BT_DBG("chan %p, control %p", chan, control);
3079 l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_FBIT);
3080 }
3081
3082
3083 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
3084 {
3085 struct sk_buff *nskb;
3086 struct l2cap_chan *chan;
3087
3088 BT_DBG("conn %p", conn);
3089
3090 mutex_lock(&conn->chan_lock);
3091
3092 list_for_each_entry(chan, &conn->chan_l, list) {
3093 if (chan->chan_type != L2CAP_CHAN_RAW)
3094 continue;
3095
3096
3097 if (bt_cb(skb)->l2cap.chan == chan)
3098 continue;
3099
3100 nskb = skb_clone(skb, GFP_KERNEL);
3101 if (!nskb)
3102 continue;
3103 if (chan->ops->recv(chan, nskb))
3104 kfree_skb(nskb);
3105 }
3106
3107 mutex_unlock(&conn->chan_lock);
3108 }
3109
3110
3111 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, u8 code,
3112 u8 ident, u16 dlen, void *data)
3113 {
3114 struct sk_buff *skb, **frag;
3115 struct l2cap_cmd_hdr *cmd;
3116 struct l2cap_hdr *lh;
3117 int len, count;
3118
3119 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u",
3120 conn, code, ident, dlen);
3121
3122 if (conn->mtu < L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE)
3123 return NULL;
3124
3125 len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
3126 count = min_t(unsigned int, conn->mtu, len);
3127
3128 skb = bt_skb_alloc(count, GFP_KERNEL);
3129 if (!skb)
3130 return NULL;
3131
3132 lh = skb_put(skb, L2CAP_HDR_SIZE);
3133 lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
3134
3135 if (conn->hcon->type == LE_LINK)
3136 lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
3137 else
3138 lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
3139
3140 cmd = skb_put(skb, L2CAP_CMD_HDR_SIZE);
3141 cmd->code = code;
3142 cmd->ident = ident;
3143 cmd->len = cpu_to_le16(dlen);
3144
3145 if (dlen) {
3146 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
3147 skb_put_data(skb, data, count);
3148 data += count;
3149 }
3150
3151 len -= skb->len;
3152
3153
3154 frag = &skb_shinfo(skb)->frag_list;
3155 while (len) {
3156 count = min_t(unsigned int, conn->mtu, len);
3157
3158 *frag = bt_skb_alloc(count, GFP_KERNEL);
3159 if (!*frag)
3160 goto fail;
3161
3162 skb_put_data(*frag, data, count);
3163
3164 len -= count;
3165 data += count;
3166
3167 frag = &(*frag)->next;
3168 }
3169
3170 return skb;
3171
3172 fail:
3173 kfree_skb(skb);
3174 return NULL;
3175 }
3176
3177 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen,
3178 unsigned long *val)
3179 {
3180 struct l2cap_conf_opt *opt = *ptr;
3181 int len;
3182
3183 len = L2CAP_CONF_OPT_SIZE + opt->len;
3184 *ptr += len;
3185
3186 *type = opt->type;
3187 *olen = opt->len;
3188
3189 switch (opt->len) {
3190 case 1:
3191 *val = *((u8 *) opt->val);
3192 break;
3193
3194 case 2:
3195 *val = get_unaligned_le16(opt->val);
3196 break;
3197
3198 case 4:
3199 *val = get_unaligned_le32(opt->val);
3200 break;
3201
3202 default:
3203 *val = (unsigned long) opt->val;
3204 break;
3205 }
3206
3207 BT_DBG("type 0x%2.2x len %u val 0x%lx", *type, opt->len, *val);
3208 return len;
3209 }
3210
3211 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val, size_t size)
3212 {
3213 struct l2cap_conf_opt *opt = *ptr;
3214
3215 BT_DBG("type 0x%2.2x len %u val 0x%lx", type, len, val);
3216
3217 if (size < L2CAP_CONF_OPT_SIZE + len)
3218 return;
3219
3220 opt->type = type;
3221 opt->len = len;
3222
3223 switch (len) {
3224 case 1:
3225 *((u8 *) opt->val) = val;
3226 break;
3227
3228 case 2:
3229 put_unaligned_le16(val, opt->val);
3230 break;
3231
3232 case 4:
3233 put_unaligned_le32(val, opt->val);
3234 break;
3235
3236 default:
3237 memcpy(opt->val, (void *) val, len);
3238 break;
3239 }
3240
3241 *ptr += L2CAP_CONF_OPT_SIZE + len;
3242 }
3243
3244 static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan, size_t size)
3245 {
3246 struct l2cap_conf_efs efs;
3247
3248 switch (chan->mode) {
3249 case L2CAP_MODE_ERTM:
3250 efs.id = chan->local_id;
3251 efs.stype = chan->local_stype;
3252 efs.msdu = cpu_to_le16(chan->local_msdu);
3253 efs.sdu_itime = cpu_to_le32(chan->local_sdu_itime);
3254 efs.acc_lat = cpu_to_le32(L2CAP_DEFAULT_ACC_LAT);
3255 efs.flush_to = cpu_to_le32(L2CAP_EFS_DEFAULT_FLUSH_TO);
3256 break;
3257
3258 case L2CAP_MODE_STREAMING:
3259 efs.id = 1;
3260 efs.stype = L2CAP_SERV_BESTEFFORT;
3261 efs.msdu = cpu_to_le16(chan->local_msdu);
3262 efs.sdu_itime = cpu_to_le32(chan->local_sdu_itime);
3263 efs.acc_lat = 0;
3264 efs.flush_to = 0;
3265 break;
3266
3267 default:
3268 return;
3269 }
3270
3271 l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
3272 (unsigned long) &efs, size);
3273 }
3274
3275 static void l2cap_ack_timeout(struct work_struct *work)
3276 {
3277 struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
3278 ack_timer.work);
3279 u16 frames_to_ack;
3280
3281 BT_DBG("chan %p", chan);
3282
3283 l2cap_chan_lock(chan);
3284
3285 frames_to_ack = __seq_offset(chan, chan->buffer_seq,
3286 chan->last_acked_seq);
3287
3288 if (frames_to_ack)
3289 l2cap_send_rr_or_rnr(chan, 0);
3290
3291 l2cap_chan_unlock(chan);
3292 l2cap_chan_put(chan);
3293 }
3294
3295 int l2cap_ertm_init(struct l2cap_chan *chan)
3296 {
3297 int err;
3298
3299 chan->next_tx_seq = 0;
3300 chan->expected_tx_seq = 0;
3301 chan->expected_ack_seq = 0;
3302 chan->unacked_frames = 0;
3303 chan->buffer_seq = 0;
3304 chan->frames_sent = 0;
3305 chan->last_acked_seq = 0;
3306 chan->sdu = NULL;
3307 chan->sdu_last_frag = NULL;
3308 chan->sdu_len = 0;
3309
3310 skb_queue_head_init(&chan->tx_q);
3311
3312 chan->local_amp_id = AMP_ID_BREDR;
3313 chan->move_id = AMP_ID_BREDR;
3314 chan->move_state = L2CAP_MOVE_STABLE;
3315 chan->move_role = L2CAP_MOVE_ROLE_NONE;
3316
3317 if (chan->mode != L2CAP_MODE_ERTM)
3318 return 0;
3319
3320 chan->rx_state = L2CAP_RX_STATE_RECV;
3321 chan->tx_state = L2CAP_TX_STATE_XMIT;
3322
3323 INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
3324 INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
3325 INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
3326
3327 skb_queue_head_init(&chan->srej_q);
3328
3329 err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
3330 if (err < 0)
3331 return err;
3332
3333 err = l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win);
3334 if (err < 0)
3335 l2cap_seq_list_free(&chan->srej_list);
3336
3337 return err;
3338 }
3339
3340 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
3341 {
3342 switch (mode) {
3343 case L2CAP_MODE_STREAMING:
3344 case L2CAP_MODE_ERTM:
3345 if (l2cap_mode_supported(mode, remote_feat_mask))
3346 return mode;
3347 fallthrough;
3348 default:
3349 return L2CAP_MODE_BASIC;
3350 }
3351 }
3352
3353 static inline bool __l2cap_ews_supported(struct l2cap_conn *conn)
3354 {
3355 return ((conn->local_fixed_chan & L2CAP_FC_A2MP) &&
3356 (conn->feat_mask & L2CAP_FEAT_EXT_WINDOW));
3357 }
3358
3359 static inline bool __l2cap_efs_supported(struct l2cap_conn *conn)
3360 {
3361 return ((conn->local_fixed_chan & L2CAP_FC_A2MP) &&
3362 (conn->feat_mask & L2CAP_FEAT_EXT_FLOW));
3363 }
3364
3365 static void __l2cap_set_ertm_timeouts(struct l2cap_chan *chan,
3366 struct l2cap_conf_rfc *rfc)
3367 {
3368 if (chan->local_amp_id != AMP_ID_BREDR && chan->hs_hcon) {
3369 u64 ertm_to = chan->hs_hcon->hdev->amp_be_flush_to;
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384 ertm_to = DIV_ROUND_UP_ULL(ertm_to, 1000);
3385
3386
3387
3388
3389
3390 ertm_to = 3 * ertm_to + 500;
3391
3392 if (ertm_to > 0xffff)
3393 ertm_to = 0xffff;
3394
3395 rfc->retrans_timeout = cpu_to_le16((u16) ertm_to);
3396 rfc->monitor_timeout = rfc->retrans_timeout;
3397 } else {
3398 rfc->retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
3399 rfc->monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
3400 }
3401 }
3402
3403 static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
3404 {
3405 if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
3406 __l2cap_ews_supported(chan->conn)) {
3407
3408 set_bit(FLAG_EXT_CTRL, &chan->flags);
3409 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3410 } else {
3411 chan->tx_win = min_t(u16, chan->tx_win,
3412 L2CAP_DEFAULT_TX_WINDOW);
3413 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
3414 }
3415 chan->ack_win = chan->tx_win;
3416 }
3417
3418 static void l2cap_mtu_auto(struct l2cap_chan *chan)
3419 {
3420 struct hci_conn *conn = chan->conn->hcon;
3421
3422 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3423
3424
3425
3426
3427 if (!(conn->pkt_type & HCI_2DH1))
3428 chan->imtu = 54;
3429
3430
3431
3432
3433 if (!(conn->pkt_type & HCI_3DH1))
3434 chan->imtu = 83;
3435
3436
3437
3438
3439 if (!(conn->pkt_type & HCI_2DH3))
3440 chan->imtu = 367;
3441
3442
3443
3444
3445 if (!(conn->pkt_type & HCI_3DH3))
3446 chan->imtu = 552;
3447
3448
3449
3450
3451 if (!(conn->pkt_type & HCI_2DH5))
3452 chan->imtu = 679;
3453
3454
3455
3456
3457 if (!(conn->pkt_type & HCI_3DH5))
3458 chan->imtu = 1021;
3459 }
3460
3461 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
3462 {
3463 struct l2cap_conf_req *req = data;
3464 struct l2cap_conf_rfc rfc = { .mode = chan->mode };
3465 void *ptr = req->data;
3466 void *endptr = data + data_size;
3467 u16 size;
3468
3469 BT_DBG("chan %p", chan);
3470
3471 if (chan->num_conf_req || chan->num_conf_rsp)
3472 goto done;
3473
3474 switch (chan->mode) {
3475 case L2CAP_MODE_STREAMING:
3476 case L2CAP_MODE_ERTM:
3477 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
3478 break;
3479
3480 if (__l2cap_efs_supported(chan->conn))
3481 set_bit(FLAG_EFS_ENABLE, &chan->flags);
3482
3483 fallthrough;
3484 default:
3485 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
3486 break;
3487 }
3488
3489 done:
3490 if (chan->imtu != L2CAP_DEFAULT_MTU) {
3491 if (!chan->imtu)
3492 l2cap_mtu_auto(chan);
3493 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu,
3494 endptr - ptr);
3495 }
3496
3497 switch (chan->mode) {
3498 case L2CAP_MODE_BASIC:
3499 if (disable_ertm)
3500 break;
3501
3502 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
3503 !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
3504 break;
3505
3506 rfc.mode = L2CAP_MODE_BASIC;
3507 rfc.txwin_size = 0;
3508 rfc.max_transmit = 0;
3509 rfc.retrans_timeout = 0;
3510 rfc.monitor_timeout = 0;
3511 rfc.max_pdu_size = 0;
3512
3513 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3514 (unsigned long) &rfc, endptr - ptr);
3515 break;
3516
3517 case L2CAP_MODE_ERTM:
3518 rfc.mode = L2CAP_MODE_ERTM;
3519 rfc.max_transmit = chan->max_tx;
3520
3521 __l2cap_set_ertm_timeouts(chan, &rfc);
3522
3523 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3524 L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3525 L2CAP_FCS_SIZE);
3526 rfc.max_pdu_size = cpu_to_le16(size);
3527
3528 l2cap_txwin_setup(chan);
3529
3530 rfc.txwin_size = min_t(u16, chan->tx_win,
3531 L2CAP_DEFAULT_TX_WINDOW);
3532
3533 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3534 (unsigned long) &rfc, endptr - ptr);
3535
3536 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3537 l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
3538
3539 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3540 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3541 chan->tx_win, endptr - ptr);
3542
3543 if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3544 if (chan->fcs == L2CAP_FCS_NONE ||
3545 test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3546 chan->fcs = L2CAP_FCS_NONE;
3547 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3548 chan->fcs, endptr - ptr);
3549 }
3550 break;
3551
3552 case L2CAP_MODE_STREAMING:
3553 l2cap_txwin_setup(chan);
3554 rfc.mode = L2CAP_MODE_STREAMING;
3555 rfc.txwin_size = 0;
3556 rfc.max_transmit = 0;
3557 rfc.retrans_timeout = 0;
3558 rfc.monitor_timeout = 0;
3559
3560 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3561 L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3562 L2CAP_FCS_SIZE);
3563 rfc.max_pdu_size = cpu_to_le16(size);
3564
3565 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3566 (unsigned long) &rfc, endptr - ptr);
3567
3568 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3569 l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
3570
3571 if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3572 if (chan->fcs == L2CAP_FCS_NONE ||
3573 test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3574 chan->fcs = L2CAP_FCS_NONE;
3575 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3576 chan->fcs, endptr - ptr);
3577 }
3578 break;
3579 }
3580
3581 req->dcid = cpu_to_le16(chan->dcid);
3582 req->flags = cpu_to_le16(0);
3583
3584 return ptr - data;
3585 }
3586
3587 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
3588 {
3589 struct l2cap_conf_rsp *rsp = data;
3590 void *ptr = rsp->data;
3591 void *endptr = data + data_size;
3592 void *req = chan->conf_req;
3593 int len = chan->conf_len;
3594 int type, hint, olen;
3595 unsigned long val;
3596 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3597 struct l2cap_conf_efs efs;
3598 u8 remote_efs = 0;
3599 u16 mtu = L2CAP_DEFAULT_MTU;
3600 u16 result = L2CAP_CONF_SUCCESS;
3601 u16 size;
3602
3603 BT_DBG("chan %p", chan);
3604
3605 while (len >= L2CAP_CONF_OPT_SIZE) {
3606 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
3607 if (len < 0)
3608 break;
3609
3610 hint = type & L2CAP_CONF_HINT;
3611 type &= L2CAP_CONF_MASK;
3612
3613 switch (type) {
3614 case L2CAP_CONF_MTU:
3615 if (olen != 2)
3616 break;
3617 mtu = val;
3618 break;
3619
3620 case L2CAP_CONF_FLUSH_TO:
3621 if (olen != 2)
3622 break;
3623 chan->flush_to = val;
3624 break;
3625
3626 case L2CAP_CONF_QOS:
3627 break;
3628
3629 case L2CAP_CONF_RFC:
3630 if (olen != sizeof(rfc))
3631 break;
3632 memcpy(&rfc, (void *) val, olen);
3633 break;
3634
3635 case L2CAP_CONF_FCS:
3636 if (olen != 1)
3637 break;
3638 if (val == L2CAP_FCS_NONE)
3639 set_bit(CONF_RECV_NO_FCS, &chan->conf_state);
3640 break;
3641
3642 case L2CAP_CONF_EFS:
3643 if (olen != sizeof(efs))
3644 break;
3645 remote_efs = 1;
3646 memcpy(&efs, (void *) val, olen);
3647 break;
3648
3649 case L2CAP_CONF_EWS:
3650 if (olen != 2)
3651 break;
3652 if (!(chan->conn->local_fixed_chan & L2CAP_FC_A2MP))
3653 return -ECONNREFUSED;
3654 set_bit(FLAG_EXT_CTRL, &chan->flags);
3655 set_bit(CONF_EWS_RECV, &chan->conf_state);
3656 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3657 chan->remote_tx_win = val;
3658 break;
3659
3660 default:
3661 if (hint)
3662 break;
3663 result = L2CAP_CONF_UNKNOWN;
3664 l2cap_add_conf_opt(&ptr, (u8)type, sizeof(u8), type, endptr - ptr);
3665 break;
3666 }
3667 }
3668
3669 if (chan->num_conf_rsp || chan->num_conf_req > 1)
3670 goto done;
3671
3672 switch (chan->mode) {
3673 case L2CAP_MODE_STREAMING:
3674 case L2CAP_MODE_ERTM:
3675 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
3676 chan->mode = l2cap_select_mode(rfc.mode,
3677 chan->conn->feat_mask);
3678 break;
3679 }
3680
3681 if (remote_efs) {
3682 if (__l2cap_efs_supported(chan->conn))
3683 set_bit(FLAG_EFS_ENABLE, &chan->flags);
3684 else
3685 return -ECONNREFUSED;
3686 }
3687
3688 if (chan->mode != rfc.mode)
3689 return -ECONNREFUSED;
3690
3691 break;
3692 }
3693
3694 done:
3695 if (chan->mode != rfc.mode) {
3696 result = L2CAP_CONF_UNACCEPT;
3697 rfc.mode = chan->mode;
3698
3699 if (chan->num_conf_rsp == 1)
3700 return -ECONNREFUSED;
3701
3702 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3703 (unsigned long) &rfc, endptr - ptr);
3704 }
3705
3706 if (result == L2CAP_CONF_SUCCESS) {
3707
3708
3709
3710 if (mtu < L2CAP_DEFAULT_MIN_MTU)
3711 result = L2CAP_CONF_UNACCEPT;
3712 else {
3713 chan->omtu = mtu;
3714 set_bit(CONF_MTU_DONE, &chan->conf_state);
3715 }
3716 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu, endptr - ptr);
3717
3718 if (remote_efs) {
3719 if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3720 efs.stype != L2CAP_SERV_NOTRAFIC &&
3721 efs.stype != chan->local_stype) {
3722
3723 result = L2CAP_CONF_UNACCEPT;
3724
3725 if (chan->num_conf_req >= 1)
3726 return -ECONNREFUSED;
3727
3728 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3729 sizeof(efs),
3730 (unsigned long) &efs, endptr - ptr);
3731 } else {
3732
3733 result = L2CAP_CONF_PENDING;
3734 set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3735 }
3736 }
3737
3738 switch (rfc.mode) {
3739 case L2CAP_MODE_BASIC:
3740 chan->fcs = L2CAP_FCS_NONE;
3741 set_bit(CONF_MODE_DONE, &chan->conf_state);
3742 break;
3743
3744 case L2CAP_MODE_ERTM:
3745 if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
3746 chan->remote_tx_win = rfc.txwin_size;
3747 else
3748 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
3749
3750 chan->remote_max_tx = rfc.max_transmit;
3751
3752 size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3753 chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3754 L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3755 rfc.max_pdu_size = cpu_to_le16(size);
3756 chan->remote_mps = size;
3757
3758 __l2cap_set_ertm_timeouts(chan, &rfc);
3759
3760 set_bit(CONF_MODE_DONE, &chan->conf_state);
3761
3762 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3763 sizeof(rfc), (unsigned long) &rfc, endptr - ptr);
3764
3765 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3766 chan->remote_id = efs.id;
3767 chan->remote_stype = efs.stype;
3768 chan->remote_msdu = le16_to_cpu(efs.msdu);
3769 chan->remote_flush_to =
3770 le32_to_cpu(efs.flush_to);
3771 chan->remote_acc_lat =
3772 le32_to_cpu(efs.acc_lat);
3773 chan->remote_sdu_itime =
3774 le32_to_cpu(efs.sdu_itime);
3775 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3776 sizeof(efs),
3777 (unsigned long) &efs, endptr - ptr);
3778 }
3779 break;
3780
3781 case L2CAP_MODE_STREAMING:
3782 size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3783 chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3784 L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3785 rfc.max_pdu_size = cpu_to_le16(size);
3786 chan->remote_mps = size;
3787
3788 set_bit(CONF_MODE_DONE, &chan->conf_state);
3789
3790 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3791 (unsigned long) &rfc, endptr - ptr);
3792
3793 break;
3794
3795 default:
3796 result = L2CAP_CONF_UNACCEPT;
3797
3798 memset(&rfc, 0, sizeof(rfc));
3799 rfc.mode = chan->mode;
3800 }
3801
3802 if (result == L2CAP_CONF_SUCCESS)
3803 set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3804 }
3805 rsp->scid = cpu_to_le16(chan->dcid);
3806 rsp->result = cpu_to_le16(result);
3807 rsp->flags = cpu_to_le16(0);
3808
3809 return ptr - data;
3810 }
3811
3812 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
3813 void *data, size_t size, u16 *result)
3814 {
3815 struct l2cap_conf_req *req = data;
3816 void *ptr = req->data;
3817 void *endptr = data + size;
3818 int type, olen;
3819 unsigned long val;
3820 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3821 struct l2cap_conf_efs efs;
3822
3823 BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
3824
3825 while (len >= L2CAP_CONF_OPT_SIZE) {
3826 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3827 if (len < 0)
3828 break;
3829
3830 switch (type) {
3831 case L2CAP_CONF_MTU:
3832 if (olen != 2)
3833 break;
3834 if (val < L2CAP_DEFAULT_MIN_MTU) {
3835 *result = L2CAP_CONF_UNACCEPT;
3836 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3837 } else
3838 chan->imtu = val;
3839 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu,
3840 endptr - ptr);
3841 break;
3842
3843 case L2CAP_CONF_FLUSH_TO:
3844 if (olen != 2)
3845 break;
3846 chan->flush_to = val;
3847 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2,
3848 chan->flush_to, endptr - ptr);
3849 break;
3850
3851 case L2CAP_CONF_RFC:
3852 if (olen != sizeof(rfc))
3853 break;
3854 memcpy(&rfc, (void *)val, olen);
3855 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
3856 rfc.mode != chan->mode)
3857 return -ECONNREFUSED;
3858 chan->fcs = 0;
3859 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3860 (unsigned long) &rfc, endptr - ptr);
3861 break;
3862
3863 case L2CAP_CONF_EWS:
3864 if (olen != 2)
3865 break;
3866 chan->ack_win = min_t(u16, val, chan->ack_win);
3867 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3868 chan->tx_win, endptr - ptr);
3869 break;
3870
3871 case L2CAP_CONF_EFS:
3872 if (olen != sizeof(efs))
3873 break;
3874 memcpy(&efs, (void *)val, olen);
3875 if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3876 efs.stype != L2CAP_SERV_NOTRAFIC &&
3877 efs.stype != chan->local_stype)
3878 return -ECONNREFUSED;
3879 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
3880 (unsigned long) &efs, endptr - ptr);
3881 break;
3882
3883 case L2CAP_CONF_FCS:
3884 if (olen != 1)
3885 break;
3886 if (*result == L2CAP_CONF_PENDING)
3887 if (val == L2CAP_FCS_NONE)
3888 set_bit(CONF_RECV_NO_FCS,
3889 &chan->conf_state);
3890 break;
3891 }
3892 }
3893
3894 if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
3895 return -ECONNREFUSED;
3896
3897 chan->mode = rfc.mode;
3898
3899 if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
3900 switch (rfc.mode) {
3901 case L2CAP_MODE_ERTM:
3902 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3903 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3904 chan->mps = le16_to_cpu(rfc.max_pdu_size);
3905 if (!test_bit(FLAG_EXT_CTRL, &chan->flags))
3906 chan->ack_win = min_t(u16, chan->ack_win,
3907 rfc.txwin_size);
3908
3909 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3910 chan->local_msdu = le16_to_cpu(efs.msdu);
3911 chan->local_sdu_itime =
3912 le32_to_cpu(efs.sdu_itime);
3913 chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
3914 chan->local_flush_to =
3915 le32_to_cpu(efs.flush_to);
3916 }
3917 break;
3918
3919 case L2CAP_MODE_STREAMING:
3920 chan->mps = le16_to_cpu(rfc.max_pdu_size);
3921 }
3922 }
3923
3924 req->dcid = cpu_to_le16(chan->dcid);
3925 req->flags = cpu_to_le16(0);
3926
3927 return ptr - data;
3928 }
3929
3930 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data,
3931 u16 result, u16 flags)
3932 {
3933 struct l2cap_conf_rsp *rsp = data;
3934 void *ptr = rsp->data;
3935
3936 BT_DBG("chan %p", chan);
3937
3938 rsp->scid = cpu_to_le16(chan->dcid);
3939 rsp->result = cpu_to_le16(result);
3940 rsp->flags = cpu_to_le16(flags);
3941
3942 return ptr - data;
3943 }
3944
3945 void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan)
3946 {
3947 struct l2cap_le_conn_rsp rsp;
3948 struct l2cap_conn *conn = chan->conn;
3949
3950 BT_DBG("chan %p", chan);
3951
3952 rsp.dcid = cpu_to_le16(chan->scid);
3953 rsp.mtu = cpu_to_le16(chan->imtu);
3954 rsp.mps = cpu_to_le16(chan->mps);
3955 rsp.credits = cpu_to_le16(chan->rx_credits);
3956 rsp.result = cpu_to_le16(L2CAP_CR_LE_SUCCESS);
3957
3958 l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
3959 &rsp);
3960 }
3961
3962 void __l2cap_ecred_conn_rsp_defer(struct l2cap_chan *chan)
3963 {
3964 struct {
3965 struct l2cap_ecred_conn_rsp rsp;
3966 __le16 dcid[5];
3967 } __packed pdu;
3968 struct l2cap_conn *conn = chan->conn;
3969 u16 ident = chan->ident;
3970 int i = 0;
3971
3972 if (!ident)
3973 return;
3974
3975 BT_DBG("chan %p ident %d", chan, ident);
3976
3977 pdu.rsp.mtu = cpu_to_le16(chan->imtu);
3978 pdu.rsp.mps = cpu_to_le16(chan->mps);
3979 pdu.rsp.credits = cpu_to_le16(chan->rx_credits);
3980 pdu.rsp.result = cpu_to_le16(L2CAP_CR_LE_SUCCESS);
3981
3982 mutex_lock(&conn->chan_lock);
3983
3984 list_for_each_entry(chan, &conn->chan_l, list) {
3985 if (chan->ident != ident)
3986 continue;
3987
3988
3989 chan->ident = 0;
3990
3991
3992 pdu.dcid[i++] = cpu_to_le16(chan->scid);
3993 }
3994
3995 mutex_unlock(&conn->chan_lock);
3996
3997 l2cap_send_cmd(conn, ident, L2CAP_ECRED_CONN_RSP,
3998 sizeof(pdu.rsp) + i * sizeof(__le16), &pdu);
3999 }
4000
4001 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
4002 {
4003 struct l2cap_conn_rsp rsp;
4004 struct l2cap_conn *conn = chan->conn;
4005 u8 buf[128];
4006 u8 rsp_code;
4007
4008 rsp.scid = cpu_to_le16(chan->dcid);
4009 rsp.dcid = cpu_to_le16(chan->scid);
4010 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
4011 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4012
4013 if (chan->hs_hcon)
4014 rsp_code = L2CAP_CREATE_CHAN_RSP;
4015 else
4016 rsp_code = L2CAP_CONN_RSP;
4017
4018 BT_DBG("chan %p rsp_code %u", chan, rsp_code);
4019
4020 l2cap_send_cmd(conn, chan->ident, rsp_code, sizeof(rsp), &rsp);
4021
4022 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
4023 return;
4024
4025 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4026 l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4027 chan->num_conf_req++;
4028 }
4029
4030 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
4031 {
4032 int type, olen;
4033 unsigned long val;
4034
4035
4036
4037 u16 txwin_ext = chan->ack_win;
4038 struct l2cap_conf_rfc rfc = {
4039 .mode = chan->mode,
4040 .retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO),
4041 .monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO),
4042 .max_pdu_size = cpu_to_le16(chan->imtu),
4043 .txwin_size = min_t(u16, chan->ack_win, L2CAP_DEFAULT_TX_WINDOW),
4044 };
4045
4046 BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
4047
4048 if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
4049 return;
4050
4051 while (len >= L2CAP_CONF_OPT_SIZE) {
4052 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
4053 if (len < 0)
4054 break;
4055
4056 switch (type) {
4057 case L2CAP_CONF_RFC:
4058 if (olen != sizeof(rfc))
4059 break;
4060 memcpy(&rfc, (void *)val, olen);
4061 break;
4062 case L2CAP_CONF_EWS:
4063 if (olen != 2)
4064 break;
4065 txwin_ext = val;
4066 break;
4067 }
4068 }
4069
4070 switch (rfc.mode) {
4071 case L2CAP_MODE_ERTM:
4072 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
4073 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
4074 chan->mps = le16_to_cpu(rfc.max_pdu_size);
4075 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
4076 chan->ack_win = min_t(u16, chan->ack_win, txwin_ext);
4077 else
4078 chan->ack_win = min_t(u16, chan->ack_win,
4079 rfc.txwin_size);
4080 break;
4081 case L2CAP_MODE_STREAMING:
4082 chan->mps = le16_to_cpu(rfc.max_pdu_size);
4083 }
4084 }
4085
4086 static inline int l2cap_command_rej(struct l2cap_conn *conn,
4087 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4088 u8 *data)
4089 {
4090 struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
4091
4092 if (cmd_len < sizeof(*rej))
4093 return -EPROTO;
4094
4095 if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
4096 return 0;
4097
4098 if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
4099 cmd->ident == conn->info_ident) {
4100 cancel_delayed_work(&conn->info_timer);
4101
4102 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4103 conn->info_ident = 0;
4104
4105 l2cap_conn_start(conn);
4106 }
4107
4108 return 0;
4109 }
4110
4111 static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,
4112 struct l2cap_cmd_hdr *cmd,
4113 u8 *data, u8 rsp_code, u8 amp_id)
4114 {
4115 struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
4116 struct l2cap_conn_rsp rsp;
4117 struct l2cap_chan *chan = NULL, *pchan;
4118 int result, status = L2CAP_CS_NO_INFO;
4119
4120 u16 dcid = 0, scid = __le16_to_cpu(req->scid);
4121 __le16 psm = req->psm;
4122
4123 BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
4124
4125
4126 pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
4127 &conn->hcon->dst, ACL_LINK);
4128 if (!pchan) {
4129 result = L2CAP_CR_BAD_PSM;
4130 goto sendresp;
4131 }
4132
4133 mutex_lock(&conn->chan_lock);
4134 l2cap_chan_lock(pchan);
4135
4136
4137 if (psm != cpu_to_le16(L2CAP_PSM_SDP) &&
4138 !hci_conn_check_link_mode(conn->hcon)) {
4139 conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
4140 result = L2CAP_CR_SEC_BLOCK;
4141 goto response;
4142 }
4143
4144 result = L2CAP_CR_NO_MEM;
4145
4146
4147 if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_DYN_END) {
4148 result = L2CAP_CR_INVALID_SCID;
4149 goto response;
4150 }
4151
4152
4153 if (__l2cap_get_chan_by_dcid(conn, scid)) {
4154 result = L2CAP_CR_SCID_IN_USE;
4155 goto response;
4156 }
4157
4158 chan = pchan->ops->new_connection(pchan);
4159 if (!chan)
4160 goto response;
4161
4162
4163
4164
4165
4166
4167 conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
4168
4169 bacpy(&chan->src, &conn->hcon->src);
4170 bacpy(&chan->dst, &conn->hcon->dst);
4171 chan->src_type = bdaddr_src_type(conn->hcon);
4172 chan->dst_type = bdaddr_dst_type(conn->hcon);
4173 chan->psm = psm;
4174 chan->dcid = scid;
4175 chan->local_amp_id = amp_id;
4176
4177 __l2cap_chan_add(conn, chan);
4178
4179 dcid = chan->scid;
4180
4181 __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
4182
4183 chan->ident = cmd->ident;
4184
4185 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
4186 if (l2cap_chan_check_security(chan, false)) {
4187 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
4188 l2cap_state_change(chan, BT_CONNECT2);
4189 result = L2CAP_CR_PEND;
4190 status = L2CAP_CS_AUTHOR_PEND;
4191 chan->ops->defer(chan);
4192 } else {
4193
4194
4195
4196
4197 if (amp_id == AMP_ID_BREDR) {
4198 l2cap_state_change(chan, BT_CONFIG);
4199 result = L2CAP_CR_SUCCESS;
4200 } else {
4201 l2cap_state_change(chan, BT_CONNECT2);
4202 result = L2CAP_CR_PEND;
4203 }
4204 status = L2CAP_CS_NO_INFO;
4205 }
4206 } else {
4207 l2cap_state_change(chan, BT_CONNECT2);
4208 result = L2CAP_CR_PEND;
4209 status = L2CAP_CS_AUTHEN_PEND;
4210 }
4211 } else {
4212 l2cap_state_change(chan, BT_CONNECT2);
4213 result = L2CAP_CR_PEND;
4214 status = L2CAP_CS_NO_INFO;
4215 }
4216
4217 response:
4218 l2cap_chan_unlock(pchan);
4219 mutex_unlock(&conn->chan_lock);
4220 l2cap_chan_put(pchan);
4221
4222 sendresp:
4223 rsp.scid = cpu_to_le16(scid);
4224 rsp.dcid = cpu_to_le16(dcid);
4225 rsp.result = cpu_to_le16(result);
4226 rsp.status = cpu_to_le16(status);
4227 l2cap_send_cmd(conn, cmd->ident, rsp_code, sizeof(rsp), &rsp);
4228
4229 if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
4230 struct l2cap_info_req info;
4231 info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
4232
4233 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
4234 conn->info_ident = l2cap_get_ident(conn);
4235
4236 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
4237
4238 l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
4239 sizeof(info), &info);
4240 }
4241
4242 if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
4243 result == L2CAP_CR_SUCCESS) {
4244 u8 buf[128];
4245 set_bit(CONF_REQ_SENT, &chan->conf_state);
4246 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4247 l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4248 chan->num_conf_req++;
4249 }
4250
4251 return chan;
4252 }
4253
4254 static int l2cap_connect_req(struct l2cap_conn *conn,
4255 struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
4256 {
4257 struct hci_dev *hdev = conn->hcon->hdev;
4258 struct hci_conn *hcon = conn->hcon;
4259
4260 if (cmd_len < sizeof(struct l2cap_conn_req))
4261 return -EPROTO;
4262
4263 hci_dev_lock(hdev);
4264 if (hci_dev_test_flag(hdev, HCI_MGMT) &&
4265 !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags))
4266 mgmt_device_connected(hdev, hcon, NULL, 0);
4267 hci_dev_unlock(hdev);
4268
4269 l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0);
4270 return 0;
4271 }
4272
4273 static int l2cap_connect_create_rsp(struct l2cap_conn *conn,
4274 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4275 u8 *data)
4276 {
4277 struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
4278 u16 scid, dcid, result, status;
4279 struct l2cap_chan *chan;
4280 u8 req[128];
4281 int err;
4282
4283 if (cmd_len < sizeof(*rsp))
4284 return -EPROTO;
4285
4286 scid = __le16_to_cpu(rsp->scid);
4287 dcid = __le16_to_cpu(rsp->dcid);
4288 result = __le16_to_cpu(rsp->result);
4289 status = __le16_to_cpu(rsp->status);
4290
4291 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
4292 dcid, scid, result, status);
4293
4294 mutex_lock(&conn->chan_lock);
4295
4296 if (scid) {
4297 chan = __l2cap_get_chan_by_scid(conn, scid);
4298 if (!chan) {
4299 err = -EBADSLT;
4300 goto unlock;
4301 }
4302 } else {
4303 chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
4304 if (!chan) {
4305 err = -EBADSLT;
4306 goto unlock;
4307 }
4308 }
4309
4310 err = 0;
4311
4312 l2cap_chan_lock(chan);
4313
4314 switch (result) {
4315 case L2CAP_CR_SUCCESS:
4316 l2cap_state_change(chan, BT_CONFIG);
4317 chan->ident = 0;
4318 chan->dcid = dcid;
4319 clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
4320
4321 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
4322 break;
4323
4324 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4325 l2cap_build_conf_req(chan, req, sizeof(req)), req);
4326 chan->num_conf_req++;
4327 break;
4328
4329 case L2CAP_CR_PEND:
4330 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
4331 break;
4332
4333 default:
4334 l2cap_chan_del(chan, ECONNREFUSED);
4335 break;
4336 }
4337
4338 l2cap_chan_unlock(chan);
4339
4340 unlock:
4341 mutex_unlock(&conn->chan_lock);
4342
4343 return err;
4344 }
4345
4346 static inline void set_default_fcs(struct l2cap_chan *chan)
4347 {
4348
4349
4350
4351 if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
4352 chan->fcs = L2CAP_FCS_NONE;
4353 else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state))
4354 chan->fcs = L2CAP_FCS_CRC16;
4355 }
4356
4357 static void l2cap_send_efs_conf_rsp(struct l2cap_chan *chan, void *data,
4358 u8 ident, u16 flags)
4359 {
4360 struct l2cap_conn *conn = chan->conn;
4361
4362 BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn, chan, ident,
4363 flags);
4364
4365 clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
4366 set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
4367
4368 l2cap_send_cmd(conn, ident, L2CAP_CONF_RSP,
4369 l2cap_build_conf_rsp(chan, data,
4370 L2CAP_CONF_SUCCESS, flags), data);
4371 }
4372
4373 static void cmd_reject_invalid_cid(struct l2cap_conn *conn, u8 ident,
4374 u16 scid, u16 dcid)
4375 {
4376 struct l2cap_cmd_rej_cid rej;
4377
4378 rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
4379 rej.scid = __cpu_to_le16(scid);
4380 rej.dcid = __cpu_to_le16(dcid);
4381
4382 l2cap_send_cmd(conn, ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
4383 }
4384
4385 static inline int l2cap_config_req(struct l2cap_conn *conn,
4386 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4387 u8 *data)
4388 {
4389 struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
4390 u16 dcid, flags;
4391 u8 rsp[64];
4392 struct l2cap_chan *chan;
4393 int len, err = 0;
4394
4395 if (cmd_len < sizeof(*req))
4396 return -EPROTO;
4397
4398 dcid = __le16_to_cpu(req->dcid);
4399 flags = __le16_to_cpu(req->flags);
4400
4401 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
4402
4403 chan = l2cap_get_chan_by_scid(conn, dcid);
4404 if (!chan) {
4405 cmd_reject_invalid_cid(conn, cmd->ident, dcid, 0);
4406 return 0;
4407 }
4408
4409 if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2 &&
4410 chan->state != BT_CONNECTED) {
4411 cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4412 chan->dcid);
4413 goto unlock;
4414 }
4415
4416
4417 len = cmd_len - sizeof(*req);
4418 if (chan->conf_len + len > sizeof(chan->conf_req)) {
4419 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4420 l2cap_build_conf_rsp(chan, rsp,
4421 L2CAP_CONF_REJECT, flags), rsp);
4422 goto unlock;
4423 }
4424
4425
4426 memcpy(chan->conf_req + chan->conf_len, req->data, len);
4427 chan->conf_len += len;
4428
4429 if (flags & L2CAP_CONF_FLAG_CONTINUATION) {
4430
4431 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4432 l2cap_build_conf_rsp(chan, rsp,
4433 L2CAP_CONF_SUCCESS, flags), rsp);
4434 goto unlock;
4435 }
4436
4437
4438 len = l2cap_parse_conf_req(chan, rsp, sizeof(rsp));
4439 if (len < 0) {
4440 l2cap_send_disconn_req(chan, ECONNRESET);
4441 goto unlock;
4442 }
4443
4444 chan->ident = cmd->ident;
4445 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
4446 chan->num_conf_rsp++;
4447
4448
4449 chan->conf_len = 0;
4450
4451 if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
4452 goto unlock;
4453
4454 if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4455 set_default_fcs(chan);
4456
4457 if (chan->mode == L2CAP_MODE_ERTM ||
4458 chan->mode == L2CAP_MODE_STREAMING)
4459 err = l2cap_ertm_init(chan);
4460
4461 if (err < 0)
4462 l2cap_send_disconn_req(chan, -err);
4463 else
4464 l2cap_chan_ready(chan);
4465
4466 goto unlock;
4467 }
4468
4469 if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
4470 u8 buf[64];
4471 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4472 l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4473 chan->num_conf_req++;
4474 }
4475
4476
4477
4478 if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
4479 test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4480
4481
4482
4483
4484 if (!chan->hs_hcon)
4485 l2cap_send_efs_conf_rsp(chan, rsp, cmd->ident, flags);
4486 else
4487 chan->ident = cmd->ident;
4488 }
4489
4490 unlock:
4491 l2cap_chan_unlock(chan);
4492 l2cap_chan_put(chan);
4493 return err;
4494 }
4495
4496 static inline int l2cap_config_rsp(struct l2cap_conn *conn,
4497 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4498 u8 *data)
4499 {
4500 struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
4501 u16 scid, flags, result;
4502 struct l2cap_chan *chan;
4503 int len = cmd_len - sizeof(*rsp);
4504 int err = 0;
4505
4506 if (cmd_len < sizeof(*rsp))
4507 return -EPROTO;
4508
4509 scid = __le16_to_cpu(rsp->scid);
4510 flags = __le16_to_cpu(rsp->flags);
4511 result = __le16_to_cpu(rsp->result);
4512
4513 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
4514 result, len);
4515
4516 chan = l2cap_get_chan_by_scid(conn, scid);
4517 if (!chan)
4518 return 0;
4519
4520 switch (result) {
4521 case L2CAP_CONF_SUCCESS:
4522 l2cap_conf_rfc_get(chan, rsp->data, len);
4523 clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4524 break;
4525
4526 case L2CAP_CONF_PENDING:
4527 set_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4528
4529 if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4530 char buf[64];
4531
4532 len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4533 buf, sizeof(buf), &result);
4534 if (len < 0) {
4535 l2cap_send_disconn_req(chan, ECONNRESET);
4536 goto done;
4537 }
4538
4539 if (!chan->hs_hcon) {
4540 l2cap_send_efs_conf_rsp(chan, buf, cmd->ident,
4541 0);
4542 } else {
4543 if (l2cap_check_efs(chan)) {
4544 amp_create_logical_link(chan);
4545 chan->ident = cmd->ident;
4546 }
4547 }
4548 }
4549 goto done;
4550
4551 case L2CAP_CONF_UNKNOWN:
4552 case L2CAP_CONF_UNACCEPT:
4553 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
4554 char req[64];
4555
4556 if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
4557 l2cap_send_disconn_req(chan, ECONNRESET);
4558 goto done;
4559 }
4560
4561
4562 result = L2CAP_CONF_SUCCESS;
4563 len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4564 req, sizeof(req), &result);
4565 if (len < 0) {
4566 l2cap_send_disconn_req(chan, ECONNRESET);
4567 goto done;
4568 }
4569
4570 l2cap_send_cmd(conn, l2cap_get_ident(conn),
4571 L2CAP_CONF_REQ, len, req);
4572 chan->num_conf_req++;
4573 if (result != L2CAP_CONF_SUCCESS)
4574 goto done;
4575 break;
4576 }
4577 fallthrough;
4578
4579 default:
4580 l2cap_chan_set_err(chan, ECONNRESET);
4581
4582 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
4583 l2cap_send_disconn_req(chan, ECONNRESET);
4584 goto done;
4585 }
4586
4587 if (flags & L2CAP_CONF_FLAG_CONTINUATION)
4588 goto done;
4589
4590 set_bit(CONF_INPUT_DONE, &chan->conf_state);
4591
4592 if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
4593 set_default_fcs(chan);
4594
4595 if (chan->mode == L2CAP_MODE_ERTM ||
4596 chan->mode == L2CAP_MODE_STREAMING)
4597 err = l2cap_ertm_init(chan);
4598
4599 if (err < 0)
4600 l2cap_send_disconn_req(chan, -err);
4601 else
4602 l2cap_chan_ready(chan);
4603 }
4604
4605 done:
4606 l2cap_chan_unlock(chan);
4607 l2cap_chan_put(chan);
4608 return err;
4609 }
4610
4611 static inline int l2cap_disconnect_req(struct l2cap_conn *conn,
4612 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4613 u8 *data)
4614 {
4615 struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
4616 struct l2cap_disconn_rsp rsp;
4617 u16 dcid, scid;
4618 struct l2cap_chan *chan;
4619
4620 if (cmd_len != sizeof(*req))
4621 return -EPROTO;
4622
4623 scid = __le16_to_cpu(req->scid);
4624 dcid = __le16_to_cpu(req->dcid);
4625
4626 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
4627
4628 mutex_lock(&conn->chan_lock);
4629
4630 chan = __l2cap_get_chan_by_scid(conn, dcid);
4631 if (!chan) {
4632 mutex_unlock(&conn->chan_lock);
4633 cmd_reject_invalid_cid(conn, cmd->ident, dcid, scid);
4634 return 0;
4635 }
4636
4637 l2cap_chan_hold(chan);
4638 l2cap_chan_lock(chan);
4639
4640 rsp.dcid = cpu_to_le16(chan->scid);
4641 rsp.scid = cpu_to_le16(chan->dcid);
4642 l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
4643
4644 chan->ops->set_shutdown(chan);
4645
4646 l2cap_chan_del(chan, ECONNRESET);
4647
4648 chan->ops->close(chan);
4649
4650 l2cap_chan_unlock(chan);
4651 l2cap_chan_put(chan);
4652
4653 mutex_unlock(&conn->chan_lock);
4654
4655 return 0;
4656 }
4657
4658 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn,
4659 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4660 u8 *data)
4661 {
4662 struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
4663 u16 dcid, scid;
4664 struct l2cap_chan *chan;
4665
4666 if (cmd_len != sizeof(*rsp))
4667 return -EPROTO;
4668
4669 scid = __le16_to_cpu(rsp->scid);
4670 dcid = __le16_to_cpu(rsp->dcid);
4671
4672 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
4673
4674 mutex_lock(&conn->chan_lock);
4675
4676 chan = __l2cap_get_chan_by_scid(conn, scid);
4677 if (!chan) {
4678 mutex_unlock(&conn->chan_lock);
4679 return 0;
4680 }
4681
4682 l2cap_chan_hold(chan);
4683 l2cap_chan_lock(chan);
4684
4685 if (chan->state != BT_DISCONN) {
4686 l2cap_chan_unlock(chan);
4687 l2cap_chan_put(chan);
4688 mutex_unlock(&conn->chan_lock);
4689 return 0;
4690 }
4691
4692 l2cap_chan_del(chan, 0);
4693
4694 chan->ops->close(chan);
4695
4696 l2cap_chan_unlock(chan);
4697 l2cap_chan_put(chan);
4698
4699 mutex_unlock(&conn->chan_lock);
4700
4701 return 0;
4702 }
4703
4704 static inline int l2cap_information_req(struct l2cap_conn *conn,
4705 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4706 u8 *data)
4707 {
4708 struct l2cap_info_req *req = (struct l2cap_info_req *) data;
4709 u16 type;
4710
4711 if (cmd_len != sizeof(*req))
4712 return -EPROTO;
4713
4714 type = __le16_to_cpu(req->type);
4715
4716 BT_DBG("type 0x%4.4x", type);
4717
4718 if (type == L2CAP_IT_FEAT_MASK) {
4719 u8 buf[8];
4720 u32 feat_mask = l2cap_feat_mask;
4721 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4722 rsp->type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
4723 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4724 if (!disable_ertm)
4725 feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
4726 | L2CAP_FEAT_FCS;
4727 if (conn->local_fixed_chan & L2CAP_FC_A2MP)
4728 feat_mask |= L2CAP_FEAT_EXT_FLOW
4729 | L2CAP_FEAT_EXT_WINDOW;
4730
4731 put_unaligned_le32(feat_mask, rsp->data);
4732 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4733 buf);
4734 } else if (type == L2CAP_IT_FIXED_CHAN) {
4735 u8 buf[12];
4736 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4737
4738 rsp->type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4739 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4740 rsp->data[0] = conn->local_fixed_chan;
4741 memset(rsp->data + 1, 0, 7);
4742 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4743 buf);
4744 } else {
4745 struct l2cap_info_rsp rsp;
4746 rsp.type = cpu_to_le16(type);
4747 rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
4748 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp),
4749 &rsp);
4750 }
4751
4752 return 0;
4753 }
4754
4755 static inline int l2cap_information_rsp(struct l2cap_conn *conn,
4756 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4757 u8 *data)
4758 {
4759 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
4760 u16 type, result;
4761
4762 if (cmd_len < sizeof(*rsp))
4763 return -EPROTO;
4764
4765 type = __le16_to_cpu(rsp->type);
4766 result = __le16_to_cpu(rsp->result);
4767
4768 BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
4769
4770
4771 if (cmd->ident != conn->info_ident ||
4772 conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
4773 return 0;
4774
4775 cancel_delayed_work(&conn->info_timer);
4776
4777 if (result != L2CAP_IR_SUCCESS) {
4778 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4779 conn->info_ident = 0;
4780
4781 l2cap_conn_start(conn);
4782
4783 return 0;
4784 }
4785
4786 switch (type) {
4787 case L2CAP_IT_FEAT_MASK:
4788 conn->feat_mask = get_unaligned_le32(rsp->data);
4789
4790 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
4791 struct l2cap_info_req req;
4792 req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4793
4794 conn->info_ident = l2cap_get_ident(conn);
4795
4796 l2cap_send_cmd(conn, conn->info_ident,
4797 L2CAP_INFO_REQ, sizeof(req), &req);
4798 } else {
4799 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4800 conn->info_ident = 0;
4801
4802 l2cap_conn_start(conn);
4803 }
4804 break;
4805
4806 case L2CAP_IT_FIXED_CHAN:
4807 conn->remote_fixed_chan = rsp->data[0];
4808 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4809 conn->info_ident = 0;
4810
4811 l2cap_conn_start(conn);
4812 break;
4813 }
4814
4815 return 0;
4816 }
4817
4818 static int l2cap_create_channel_req(struct l2cap_conn *conn,
4819 struct l2cap_cmd_hdr *cmd,
4820 u16 cmd_len, void *data)
4821 {
4822 struct l2cap_create_chan_req *req = data;
4823 struct l2cap_create_chan_rsp rsp;
4824 struct l2cap_chan *chan;
4825 struct hci_dev *hdev;
4826 u16 psm, scid;
4827
4828 if (cmd_len != sizeof(*req))
4829 return -EPROTO;
4830
4831 if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
4832 return -EINVAL;
4833
4834 psm = le16_to_cpu(req->psm);
4835 scid = le16_to_cpu(req->scid);
4836
4837 BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm, scid, req->amp_id);
4838
4839
4840 if (req->amp_id == AMP_ID_BREDR) {
4841 l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4842 req->amp_id);
4843 return 0;
4844 }
4845
4846
4847 hdev = hci_dev_get(req->amp_id);
4848 if (!hdev)
4849 goto error;
4850
4851 if (hdev->dev_type != HCI_AMP || !test_bit(HCI_UP, &hdev->flags)) {
4852 hci_dev_put(hdev);
4853 goto error;
4854 }
4855
4856 chan = l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4857 req->amp_id);
4858 if (chan) {
4859 struct amp_mgr *mgr = conn->hcon->amp_mgr;
4860 struct hci_conn *hs_hcon;
4861
4862 hs_hcon = hci_conn_hash_lookup_ba(hdev, AMP_LINK,
4863 &conn->hcon->dst);
4864 if (!hs_hcon) {
4865 hci_dev_put(hdev);
4866 cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4867 chan->dcid);
4868 return 0;
4869 }
4870
4871 BT_DBG("mgr %p bredr_chan %p hs_hcon %p", mgr, chan, hs_hcon);
4872
4873 mgr->bredr_chan = chan;
4874 chan->hs_hcon = hs_hcon;
4875 chan->fcs = L2CAP_FCS_NONE;
4876 conn->mtu = hdev->block_mtu;
4877 }
4878
4879 hci_dev_put(hdev);
4880
4881 return 0;
4882
4883 error:
4884 rsp.dcid = 0;
4885 rsp.scid = cpu_to_le16(scid);
4886 rsp.result = cpu_to_le16(L2CAP_CR_BAD_AMP);
4887 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4888
4889 l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP,
4890 sizeof(rsp), &rsp);
4891
4892 return 0;
4893 }
4894
4895 static void l2cap_send_move_chan_req(struct l2cap_chan *chan, u8 dest_amp_id)
4896 {
4897 struct l2cap_move_chan_req req;
4898 u8 ident;
4899
4900 BT_DBG("chan %p, dest_amp_id %d", chan, dest_amp_id);
4901
4902 ident = l2cap_get_ident(chan->conn);
4903 chan->ident = ident;
4904
4905 req.icid = cpu_to_le16(chan->scid);
4906 req.dest_amp_id = dest_amp_id;
4907
4908 l2cap_send_cmd(chan->conn, ident, L2CAP_MOVE_CHAN_REQ, sizeof(req),
4909 &req);
4910
4911 __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4912 }
4913
4914 static void l2cap_send_move_chan_rsp(struct l2cap_chan *chan, u16 result)
4915 {
4916 struct l2cap_move_chan_rsp rsp;
4917
4918 BT_DBG("chan %p, result 0x%4.4x", chan, result);
4919
4920 rsp.icid = cpu_to_le16(chan->dcid);
4921 rsp.result = cpu_to_le16(result);
4922
4923 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_RSP,
4924 sizeof(rsp), &rsp);
4925 }
4926
4927 static void l2cap_send_move_chan_cfm(struct l2cap_chan *chan, u16 result)
4928 {
4929 struct l2cap_move_chan_cfm cfm;
4930
4931 BT_DBG("chan %p, result 0x%4.4x", chan, result);
4932
4933 chan->ident = l2cap_get_ident(chan->conn);
4934
4935 cfm.icid = cpu_to_le16(chan->scid);
4936 cfm.result = cpu_to_le16(result);
4937
4938 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_CFM,
4939 sizeof(cfm), &cfm);
4940
4941 __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4942 }
4943
4944 static void l2cap_send_move_chan_cfm_icid(struct l2cap_conn *conn, u16 icid)
4945 {
4946 struct l2cap_move_chan_cfm cfm;
4947
4948 BT_DBG("conn %p, icid 0x%4.4x", conn, icid);
4949
4950 cfm.icid = cpu_to_le16(icid);
4951 cfm.result = cpu_to_le16(L2CAP_MC_UNCONFIRMED);
4952
4953 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_MOVE_CHAN_CFM,
4954 sizeof(cfm), &cfm);
4955 }
4956
4957 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
4958 u16 icid)
4959 {
4960 struct l2cap_move_chan_cfm_rsp rsp;
4961
4962 BT_DBG("icid 0x%4.4x", icid);
4963
4964 rsp.icid = cpu_to_le16(icid);
4965 l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
4966 }
4967
4968 static void __release_logical_link(struct l2cap_chan *chan)
4969 {
4970 chan->hs_hchan = NULL;
4971 chan->hs_hcon = NULL;
4972
4973
4974 }
4975
4976 static void l2cap_logical_fail(struct l2cap_chan *chan)
4977 {
4978
4979 if (chan->state != BT_CONNECTED) {
4980
4981 l2cap_send_disconn_req(chan, ECONNRESET);
4982 return;
4983 }
4984
4985 switch (chan->move_role) {
4986 case L2CAP_MOVE_ROLE_RESPONDER:
4987 l2cap_move_done(chan);
4988 l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_SUPP);
4989 break;
4990 case L2CAP_MOVE_ROLE_INITIATOR:
4991 if (chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_COMP ||
4992 chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_CFM) {
4993
4994
4995
4996 l2cap_move_done(chan);
4997 }
4998
4999
5000
5001
5002 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5003 break;
5004 }
5005 }
5006
5007 static void l2cap_logical_finish_create(struct l2cap_chan *chan,
5008 struct hci_chan *hchan)
5009 {
5010 struct l2cap_conf_rsp rsp;
5011
5012 chan->hs_hchan = hchan;
5013 chan->hs_hcon->l2cap_data = chan->conn;
5014
5015 l2cap_send_efs_conf_rsp(chan, &rsp, chan->ident, 0);
5016
5017 if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
5018 int err;
5019
5020 set_default_fcs(chan);
5021
5022 err = l2cap_ertm_init(chan);
5023 if (err < 0)
5024 l2cap_send_disconn_req(chan, -err);
5025 else
5026 l2cap_chan_ready(chan);
5027 }
5028 }
5029
5030 static void l2cap_logical_finish_move(struct l2cap_chan *chan,
5031 struct hci_chan *hchan)
5032 {
5033 chan->hs_hcon = hchan->conn;
5034 chan->hs_hcon->l2cap_data = chan->conn;
5035
5036 BT_DBG("move_state %d", chan->move_state);
5037
5038 switch (chan->move_state) {
5039 case L2CAP_MOVE_WAIT_LOGICAL_COMP:
5040
5041
5042
5043 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5044 break;
5045 case L2CAP_MOVE_WAIT_LOGICAL_CFM:
5046 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5047 chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5048 } else if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5049 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
5050 l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5051 } else if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
5052 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5053 l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
5054 }
5055 break;
5056 default:
5057
5058 __release_logical_link(chan);
5059
5060 chan->move_state = L2CAP_MOVE_STABLE;
5061 }
5062 }
5063
5064
5065 void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
5066 u8 status)
5067 {
5068 BT_DBG("chan %p, hchan %p, status %d", chan, hchan, status);
5069
5070 if (status) {
5071 l2cap_logical_fail(chan);
5072 __release_logical_link(chan);
5073 return;
5074 }
5075
5076 if (chan->state != BT_CONNECTED) {
5077
5078 if (chan->local_amp_id != AMP_ID_BREDR)
5079 l2cap_logical_finish_create(chan, hchan);
5080 } else {
5081 l2cap_logical_finish_move(chan, hchan);
5082 }
5083 }
5084
5085 void l2cap_move_start(struct l2cap_chan *chan)
5086 {
5087 BT_DBG("chan %p", chan);
5088
5089 if (chan->local_amp_id == AMP_ID_BREDR) {
5090 if (chan->chan_policy != BT_CHANNEL_POLICY_AMP_PREFERRED)
5091 return;
5092 chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
5093 chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
5094
5095 } else {
5096 chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
5097 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5098 chan->move_id = 0;
5099 l2cap_move_setup(chan);
5100 l2cap_send_move_chan_req(chan, 0);
5101 }
5102 }
5103
5104 static void l2cap_do_create(struct l2cap_chan *chan, int result,
5105 u8 local_amp_id, u8 remote_amp_id)
5106 {
5107 BT_DBG("chan %p state %s %u -> %u", chan, state_to_string(chan->state),
5108 local_amp_id, remote_amp_id);
5109
5110 chan->fcs = L2CAP_FCS_NONE;
5111
5112
5113 if (chan->state == BT_CONNECT) {
5114 if (result == L2CAP_CR_SUCCESS) {
5115 chan->local_amp_id = local_amp_id;
5116 l2cap_send_create_chan_req(chan, remote_amp_id);
5117 } else {
5118
5119 l2cap_send_conn_req(chan);
5120 }
5121
5122 return;
5123 }
5124
5125
5126 if (__l2cap_no_conn_pending(chan)) {
5127 struct l2cap_conn_rsp rsp;
5128 char buf[128];
5129 rsp.scid = cpu_to_le16(chan->dcid);
5130 rsp.dcid = cpu_to_le16(chan->scid);
5131
5132 if (result == L2CAP_CR_SUCCESS) {
5133
5134 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
5135 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
5136 } else {
5137
5138 rsp.result = cpu_to_le16(L2CAP_CR_NO_MEM);
5139 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
5140 }
5141
5142 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_RSP,
5143 sizeof(rsp), &rsp);
5144
5145 if (result == L2CAP_CR_SUCCESS) {
5146 l2cap_state_change(chan, BT_CONFIG);
5147 set_bit(CONF_REQ_SENT, &chan->conf_state);
5148 l2cap_send_cmd(chan->conn, l2cap_get_ident(chan->conn),
5149 L2CAP_CONF_REQ,
5150 l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
5151 chan->num_conf_req++;
5152 }
5153 }
5154 }
5155
5156 static void l2cap_do_move_initiate(struct l2cap_chan *chan, u8 local_amp_id,
5157 u8 remote_amp_id)
5158 {
5159 l2cap_move_setup(chan);
5160 chan->move_id = local_amp_id;
5161 chan->move_state = L2CAP_MOVE_WAIT_RSP;
5162
5163 l2cap_send_move_chan_req(chan, remote_amp_id);
5164 }
5165
5166 static void l2cap_do_move_respond(struct l2cap_chan *chan, int result)
5167 {
5168 struct hci_chan *hchan = NULL;
5169
5170
5171
5172 if (hchan) {
5173 if (hchan->state == BT_CONNECTED) {
5174
5175 chan->hs_hcon = hchan->conn;
5176 chan->hs_hcon->l2cap_data = chan->conn;
5177 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5178 l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
5179
5180 l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
5181 } else {
5182
5183 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5184 }
5185 } else {
5186
5187 l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_ALLOWED);
5188 }
5189 }
5190
5191 static void l2cap_do_move_cancel(struct l2cap_chan *chan, int result)
5192 {
5193 if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
5194 u8 rsp_result;
5195 if (result == -EINVAL)
5196 rsp_result = L2CAP_MR_BAD_ID;
5197 else
5198 rsp_result = L2CAP_MR_NOT_ALLOWED;
5199
5200 l2cap_send_move_chan_rsp(chan, rsp_result);
5201 }
5202
5203 chan->move_role = L2CAP_MOVE_ROLE_NONE;
5204 chan->move_state = L2CAP_MOVE_STABLE;
5205
5206
5207 l2cap_ertm_send(chan);
5208 }
5209
5210
5211 void __l2cap_physical_cfm(struct l2cap_chan *chan, int result)
5212 {
5213 u8 local_amp_id = chan->local_amp_id;
5214 u8 remote_amp_id = chan->remote_amp_id;
5215
5216 BT_DBG("chan %p, result %d, local_amp_id %d, remote_amp_id %d",
5217 chan, result, local_amp_id, remote_amp_id);
5218
5219 if (chan->state == BT_DISCONN || chan->state == BT_CLOSED)
5220 return;
5221
5222 if (chan->state != BT_CONNECTED) {
5223 l2cap_do_create(chan, result, local_amp_id, remote_amp_id);
5224 } else if (result != L2CAP_MR_SUCCESS) {
5225 l2cap_do_move_cancel(chan, result);
5226 } else {
5227 switch (chan->move_role) {
5228 case L2CAP_MOVE_ROLE_INITIATOR:
5229 l2cap_do_move_initiate(chan, local_amp_id,
5230 remote_amp_id);
5231 break;
5232 case L2CAP_MOVE_ROLE_RESPONDER:
5233 l2cap_do_move_respond(chan, result);
5234 break;
5235 default:
5236 l2cap_do_move_cancel(chan, result);
5237 break;
5238 }
5239 }
5240 }
5241
5242 static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
5243 struct l2cap_cmd_hdr *cmd,
5244 u16 cmd_len, void *data)
5245 {
5246 struct l2cap_move_chan_req *req = data;
5247 struct l2cap_move_chan_rsp rsp;
5248 struct l2cap_chan *chan;
5249 u16 icid = 0;
5250 u16 result = L2CAP_MR_NOT_ALLOWED;
5251
5252 if (cmd_len != sizeof(*req))
5253 return -EPROTO;
5254
5255 icid = le16_to_cpu(req->icid);
5256
5257 BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid, req->dest_amp_id);
5258
5259 if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
5260 return -EINVAL;
5261
5262 chan = l2cap_get_chan_by_dcid(conn, icid);
5263 if (!chan) {
5264 rsp.icid = cpu_to_le16(icid);
5265 rsp.result = cpu_to_le16(L2CAP_MR_NOT_ALLOWED);
5266 l2cap_send_cmd(conn, cmd->ident, L2CAP_MOVE_CHAN_RSP,
5267 sizeof(rsp), &rsp);
5268 return 0;
5269 }
5270
5271 chan->ident = cmd->ident;
5272
5273 if (chan->scid < L2CAP_CID_DYN_START ||
5274 chan->chan_policy == BT_CHANNEL_POLICY_BREDR_ONLY ||
5275 (chan->mode != L2CAP_MODE_ERTM &&
5276 chan->mode != L2CAP_MODE_STREAMING)) {
5277 result = L2CAP_MR_NOT_ALLOWED;
5278 goto send_move_response;
5279 }
5280
5281 if (chan->local_amp_id == req->dest_amp_id) {
5282 result = L2CAP_MR_SAME_ID;
5283 goto send_move_response;
5284 }
5285
5286 if (req->dest_amp_id != AMP_ID_BREDR) {
5287 struct hci_dev *hdev;
5288 hdev = hci_dev_get(req->dest_amp_id);
5289 if (!hdev || hdev->dev_type != HCI_AMP ||
5290 !test_bit(HCI_UP, &hdev->flags)) {
5291 if (hdev)
5292 hci_dev_put(hdev);
5293
5294 result = L2CAP_MR_BAD_ID;
5295 goto send_move_response;
5296 }
5297 hci_dev_put(hdev);
5298 }
5299
5300
5301
5302
5303
5304 if ((__chan_is_moving(chan) ||
5305 chan->move_role != L2CAP_MOVE_ROLE_NONE) &&
5306 bacmp(&conn->hcon->src, &conn->hcon->dst) > 0) {
5307 result = L2CAP_MR_COLLISION;
5308 goto send_move_response;
5309 }
5310
5311 chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5312 l2cap_move_setup(chan);
5313 chan->move_id = req->dest_amp_id;
5314
5315 if (req->dest_amp_id == AMP_ID_BREDR) {
5316
5317 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5318 chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5319 result = L2CAP_MR_PEND;
5320 } else {
5321 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5322 result = L2CAP_MR_SUCCESS;
5323 }
5324 } else {
5325 chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
5326
5327
5328 result = L2CAP_MR_PEND;
5329 }
5330
5331 send_move_response:
5332 l2cap_send_move_chan_rsp(chan, result);
5333
5334 l2cap_chan_unlock(chan);
5335 l2cap_chan_put(chan);
5336
5337 return 0;
5338 }
5339
5340 static void l2cap_move_continue(struct l2cap_conn *conn, u16 icid, u16 result)
5341 {
5342 struct l2cap_chan *chan;
5343 struct hci_chan *hchan = NULL;
5344
5345 chan = l2cap_get_chan_by_scid(conn, icid);
5346 if (!chan) {
5347 l2cap_send_move_chan_cfm_icid(conn, icid);
5348 return;
5349 }
5350
5351 __clear_chan_timer(chan);
5352 if (result == L2CAP_MR_PEND)
5353 __set_chan_timer(chan, L2CAP_MOVE_ERTX_TIMEOUT);
5354
5355 switch (chan->move_state) {
5356 case L2CAP_MOVE_WAIT_LOGICAL_COMP:
5357
5358
5359
5360 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5361 break;
5362 case L2CAP_MOVE_WAIT_RSP_SUCCESS:
5363 if (result == L2CAP_MR_PEND) {
5364 break;
5365 } else if (test_bit(CONN_LOCAL_BUSY,
5366 &chan->conn_state)) {
5367 chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5368 } else {
5369
5370
5371
5372 chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
5373 l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5374 }
5375 break;
5376 case L2CAP_MOVE_WAIT_RSP:
5377
5378 if (result == L2CAP_MR_SUCCESS) {
5379
5380
5381
5382 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5383 } else {
5384
5385
5386
5387 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_COMP;
5388 }
5389
5390
5391 if (!hchan) {
5392
5393 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5394 break;
5395 }
5396
5397
5398
5399
5400 if (hchan->state != BT_CONNECTED)
5401 break;
5402
5403
5404
5405 chan->hs_hcon = hchan->conn;
5406 chan->hs_hcon->l2cap_data = chan->conn;
5407
5408 if (result == L2CAP_MR_SUCCESS) {
5409
5410 l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5411 } else {
5412
5413
5414
5415 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5416 }
5417
5418 l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
5419 break;
5420 default:
5421
5422 chan->move_id = chan->local_amp_id;
5423 l2cap_move_done(chan);
5424 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5425 }
5426
5427 l2cap_chan_unlock(chan);
5428 l2cap_chan_put(chan);
5429 }
5430
5431 static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid,
5432 u16 result)
5433 {
5434 struct l2cap_chan *chan;
5435
5436 chan = l2cap_get_chan_by_ident(conn, ident);
5437 if (!chan) {
5438
5439 l2cap_send_move_chan_cfm_icid(conn, icid);
5440 return;
5441 }
5442
5443 __clear_chan_timer(chan);
5444
5445 if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5446 if (result == L2CAP_MR_COLLISION) {
5447 chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5448 } else {
5449
5450 chan->move_id = chan->local_amp_id;
5451 l2cap_move_done(chan);
5452 }
5453 }
5454
5455 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5456
5457 l2cap_chan_unlock(chan);
5458 l2cap_chan_put(chan);
5459 }
5460
5461 static int l2cap_move_channel_rsp(struct l2cap_conn *conn,
5462 struct l2cap_cmd_hdr *cmd,
5463 u16 cmd_len, void *data)
5464 {
5465 struct l2cap_move_chan_rsp *rsp = data;
5466 u16 icid, result;
5467
5468 if (cmd_len != sizeof(*rsp))
5469 return -EPROTO;
5470
5471 icid = le16_to_cpu(rsp->icid);
5472 result = le16_to_cpu(rsp->result);
5473
5474 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5475
5476 if (result == L2CAP_MR_SUCCESS || result == L2CAP_MR_PEND)
5477 l2cap_move_continue(conn, icid, result);
5478 else
5479 l2cap_move_fail(conn, cmd->ident, icid, result);
5480
5481 return 0;
5482 }
5483
5484 static int l2cap_move_channel_confirm(struct l2cap_conn *conn,
5485 struct l2cap_cmd_hdr *cmd,
5486 u16 cmd_len, void *data)
5487 {
5488 struct l2cap_move_chan_cfm *cfm = data;
5489 struct l2cap_chan *chan;
5490 u16 icid, result;
5491
5492 if (cmd_len != sizeof(*cfm))
5493 return -EPROTO;
5494
5495 icid = le16_to_cpu(cfm->icid);
5496 result = le16_to_cpu(cfm->result);
5497
5498 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5499
5500 chan = l2cap_get_chan_by_dcid(conn, icid);
5501 if (!chan) {
5502
5503 l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5504 return 0;
5505 }
5506
5507 if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM) {
5508 if (result == L2CAP_MC_CONFIRMED) {
5509 chan->local_amp_id = chan->move_id;
5510 if (chan->local_amp_id == AMP_ID_BREDR)
5511 __release_logical_link(chan);
5512 } else {
5513 chan->move_id = chan->local_amp_id;
5514 }
5515
5516 l2cap_move_done(chan);
5517 }
5518
5519 l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5520
5521 l2cap_chan_unlock(chan);
5522 l2cap_chan_put(chan);
5523
5524 return 0;
5525 }
5526
5527 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
5528 struct l2cap_cmd_hdr *cmd,
5529 u16 cmd_len, void *data)
5530 {
5531 struct l2cap_move_chan_cfm_rsp *rsp = data;
5532 struct l2cap_chan *chan;
5533 u16 icid;
5534
5535 if (cmd_len != sizeof(*rsp))
5536 return -EPROTO;
5537
5538 icid = le16_to_cpu(rsp->icid);
5539
5540 BT_DBG("icid 0x%4.4x", icid);
5541
5542 chan = l2cap_get_chan_by_scid(conn, icid);
5543 if (!chan)
5544 return 0;
5545
5546 __clear_chan_timer(chan);
5547
5548 if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM_RSP) {
5549 chan->local_amp_id = chan->move_id;
5550
5551 if (chan->local_amp_id == AMP_ID_BREDR && chan->hs_hchan)
5552 __release_logical_link(chan);
5553
5554 l2cap_move_done(chan);
5555 }
5556
5557 l2cap_chan_unlock(chan);
5558 l2cap_chan_put(chan);
5559
5560 return 0;
5561 }
5562
5563 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
5564 struct l2cap_cmd_hdr *cmd,
5565 u16 cmd_len, u8 *data)
5566 {
5567 struct hci_conn *hcon = conn->hcon;
5568 struct l2cap_conn_param_update_req *req;
5569 struct l2cap_conn_param_update_rsp rsp;
5570 u16 min, max, latency, to_multiplier;
5571 int err;
5572
5573 if (hcon->role != HCI_ROLE_MASTER)
5574 return -EINVAL;
5575
5576 if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
5577 return -EPROTO;
5578
5579 req = (struct l2cap_conn_param_update_req *) data;
5580 min = __le16_to_cpu(req->min);
5581 max = __le16_to_cpu(req->max);
5582 latency = __le16_to_cpu(req->latency);
5583 to_multiplier = __le16_to_cpu(req->to_multiplier);
5584
5585 BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
5586 min, max, latency, to_multiplier);
5587
5588 memset(&rsp, 0, sizeof(rsp));
5589
5590 err = hci_check_conn_params(min, max, latency, to_multiplier);
5591 if (err)
5592 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
5593 else
5594 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
5595
5596 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
5597 sizeof(rsp), &rsp);
5598
5599 if (!err) {
5600 u8 store_hint;
5601
5602 store_hint = hci_le_conn_update(hcon, min, max, latency,
5603 to_multiplier);
5604 mgmt_new_conn_param(hcon->hdev, &hcon->dst, hcon->dst_type,
5605 store_hint, min, max, latency,
5606 to_multiplier);
5607
5608 }
5609
5610 return 0;
5611 }
5612
5613 static int l2cap_le_connect_rsp(struct l2cap_conn *conn,
5614 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5615 u8 *data)
5616 {
5617 struct l2cap_le_conn_rsp *rsp = (struct l2cap_le_conn_rsp *) data;
5618 struct hci_conn *hcon = conn->hcon;
5619 u16 dcid, mtu, mps, credits, result;
5620 struct l2cap_chan *chan;
5621 int err, sec_level;
5622
5623 if (cmd_len < sizeof(*rsp))
5624 return -EPROTO;
5625
5626 dcid = __le16_to_cpu(rsp->dcid);
5627 mtu = __le16_to_cpu(rsp->mtu);
5628 mps = __le16_to_cpu(rsp->mps);
5629 credits = __le16_to_cpu(rsp->credits);
5630 result = __le16_to_cpu(rsp->result);
5631
5632 if (result == L2CAP_CR_LE_SUCCESS && (mtu < 23 || mps < 23 ||
5633 dcid < L2CAP_CID_DYN_START ||
5634 dcid > L2CAP_CID_LE_DYN_END))
5635 return -EPROTO;
5636
5637 BT_DBG("dcid 0x%4.4x mtu %u mps %u credits %u result 0x%2.2x",
5638 dcid, mtu, mps, credits, result);
5639
5640 mutex_lock(&conn->chan_lock);
5641
5642 chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
5643 if (!chan) {
5644 err = -EBADSLT;
5645 goto unlock;
5646 }
5647
5648 err = 0;
5649
5650 l2cap_chan_lock(chan);
5651
5652 switch (result) {
5653 case L2CAP_CR_LE_SUCCESS:
5654 if (__l2cap_get_chan_by_dcid(conn, dcid)) {
5655 err = -EBADSLT;
5656 break;
5657 }
5658
5659 chan->ident = 0;
5660 chan->dcid = dcid;
5661 chan->omtu = mtu;
5662 chan->remote_mps = mps;
5663 chan->tx_credits = credits;
5664 l2cap_chan_ready(chan);
5665 break;
5666
5667 case L2CAP_CR_LE_AUTHENTICATION:
5668 case L2CAP_CR_LE_ENCRYPTION:
5669
5670
5671
5672 if (hcon->sec_level > BT_SECURITY_MEDIUM) {
5673 l2cap_chan_del(chan, ECONNREFUSED);
5674 break;
5675 }
5676
5677 sec_level = hcon->sec_level + 1;
5678 if (chan->sec_level < sec_level)
5679 chan->sec_level = sec_level;
5680
5681
5682 clear_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags);
5683
5684 smp_conn_security(hcon, chan->sec_level);
5685 break;
5686
5687 default:
5688 l2cap_chan_del(chan, ECONNREFUSED);
5689 break;
5690 }
5691
5692 l2cap_chan_unlock(chan);
5693
5694 unlock:
5695 mutex_unlock(&conn->chan_lock);
5696
5697 return err;
5698 }
5699
5700 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
5701 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5702 u8 *data)
5703 {
5704 int err = 0;
5705
5706 switch (cmd->code) {
5707 case L2CAP_COMMAND_REJ:
5708 l2cap_command_rej(conn, cmd, cmd_len, data);
5709 break;
5710
5711 case L2CAP_CONN_REQ:
5712 err = l2cap_connect_req(conn, cmd, cmd_len, data);
5713 break;
5714
5715 case L2CAP_CONN_RSP:
5716 case L2CAP_CREATE_CHAN_RSP:
5717 l2cap_connect_create_rsp(conn, cmd, cmd_len, data);
5718 break;
5719
5720 case L2CAP_CONF_REQ:
5721 err = l2cap_config_req(conn, cmd, cmd_len, data);
5722 break;
5723
5724 case L2CAP_CONF_RSP:
5725 l2cap_config_rsp(conn, cmd, cmd_len, data);
5726 break;
5727
5728 case L2CAP_DISCONN_REQ:
5729 err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
5730 break;
5731
5732 case L2CAP_DISCONN_RSP:
5733 l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
5734 break;
5735
5736 case L2CAP_ECHO_REQ:
5737 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
5738 break;
5739
5740 case L2CAP_ECHO_RSP:
5741 break;
5742
5743 case L2CAP_INFO_REQ:
5744 err = l2cap_information_req(conn, cmd, cmd_len, data);
5745 break;
5746
5747 case L2CAP_INFO_RSP:
5748 l2cap_information_rsp(conn, cmd, cmd_len, data);
5749 break;
5750
5751 case L2CAP_CREATE_CHAN_REQ:
5752 err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
5753 break;
5754
5755 case L2CAP_MOVE_CHAN_REQ:
5756 err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
5757 break;
5758
5759 case L2CAP_MOVE_CHAN_RSP:
5760 l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
5761 break;
5762
5763 case L2CAP_MOVE_CHAN_CFM:
5764 err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
5765 break;
5766
5767 case L2CAP_MOVE_CHAN_CFM_RSP:
5768 l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
5769 break;
5770
5771 default:
5772 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
5773 err = -EINVAL;
5774 break;
5775 }
5776
5777 return err;
5778 }
5779
5780 static int l2cap_le_connect_req(struct l2cap_conn *conn,
5781 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5782 u8 *data)
5783 {
5784 struct l2cap_le_conn_req *req = (struct l2cap_le_conn_req *) data;
5785 struct l2cap_le_conn_rsp rsp;
5786 struct l2cap_chan *chan, *pchan;
5787 u16 dcid, scid, credits, mtu, mps;
5788 __le16 psm;
5789 u8 result;
5790
5791 if (cmd_len != sizeof(*req))
5792 return -EPROTO;
5793
5794 scid = __le16_to_cpu(req->scid);
5795 mtu = __le16_to_cpu(req->mtu);
5796 mps = __le16_to_cpu(req->mps);
5797 psm = req->psm;
5798 dcid = 0;
5799 credits = 0;
5800
5801 if (mtu < 23 || mps < 23)
5802 return -EPROTO;
5803
5804 BT_DBG("psm 0x%2.2x scid 0x%4.4x mtu %u mps %u", __le16_to_cpu(psm),
5805 scid, mtu, mps);
5806
5807
5808 pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
5809 &conn->hcon->dst, LE_LINK);
5810 if (!pchan) {
5811 result = L2CAP_CR_LE_BAD_PSM;
5812 chan = NULL;
5813 goto response;
5814 }
5815
5816 mutex_lock(&conn->chan_lock);
5817 l2cap_chan_lock(pchan);
5818
5819 if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
5820 SMP_ALLOW_STK)) {
5821 result = L2CAP_CR_LE_AUTHENTICATION;
5822 chan = NULL;
5823 goto response_unlock;
5824 }
5825
5826
5827 if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END) {
5828 result = L2CAP_CR_LE_INVALID_SCID;
5829 chan = NULL;
5830 goto response_unlock;
5831 }
5832
5833
5834 if (__l2cap_get_chan_by_dcid(conn, scid)) {
5835 result = L2CAP_CR_LE_SCID_IN_USE;
5836 chan = NULL;
5837 goto response_unlock;
5838 }
5839
5840 chan = pchan->ops->new_connection(pchan);
5841 if (!chan) {
5842 result = L2CAP_CR_LE_NO_MEM;
5843 goto response_unlock;
5844 }
5845
5846 bacpy(&chan->src, &conn->hcon->src);
5847 bacpy(&chan->dst, &conn->hcon->dst);
5848 chan->src_type = bdaddr_src_type(conn->hcon);
5849 chan->dst_type = bdaddr_dst_type(conn->hcon);
5850 chan->psm = psm;
5851 chan->dcid = scid;
5852 chan->omtu = mtu;
5853 chan->remote_mps = mps;
5854
5855 __l2cap_chan_add(conn, chan);
5856
5857 l2cap_le_flowctl_init(chan, __le16_to_cpu(req->credits));
5858
5859 dcid = chan->scid;
5860 credits = chan->rx_credits;
5861
5862 __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
5863
5864 chan->ident = cmd->ident;
5865
5866 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
5867 l2cap_state_change(chan, BT_CONNECT2);
5868
5869
5870
5871
5872
5873 result = L2CAP_CR_PEND;
5874 chan->ops->defer(chan);
5875 } else {
5876 l2cap_chan_ready(chan);
5877 result = L2CAP_CR_LE_SUCCESS;
5878 }
5879
5880 response_unlock:
5881 l2cap_chan_unlock(pchan);
5882 mutex_unlock(&conn->chan_lock);
5883 l2cap_chan_put(pchan);
5884
5885 if (result == L2CAP_CR_PEND)
5886 return 0;
5887
5888 response:
5889 if (chan) {
5890 rsp.mtu = cpu_to_le16(chan->imtu);
5891 rsp.mps = cpu_to_le16(chan->mps);
5892 } else {
5893 rsp.mtu = 0;
5894 rsp.mps = 0;
5895 }
5896
5897 rsp.dcid = cpu_to_le16(dcid);
5898 rsp.credits = cpu_to_le16(credits);
5899 rsp.result = cpu_to_le16(result);
5900
5901 l2cap_send_cmd(conn, cmd->ident, L2CAP_LE_CONN_RSP, sizeof(rsp), &rsp);
5902
5903 return 0;
5904 }
5905
5906 static inline int l2cap_le_credits(struct l2cap_conn *conn,
5907 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5908 u8 *data)
5909 {
5910 struct l2cap_le_credits *pkt;
5911 struct l2cap_chan *chan;
5912 u16 cid, credits, max_credits;
5913
5914 if (cmd_len != sizeof(*pkt))
5915 return -EPROTO;
5916
5917 pkt = (struct l2cap_le_credits *) data;
5918 cid = __le16_to_cpu(pkt->cid);
5919 credits = __le16_to_cpu(pkt->credits);
5920
5921 BT_DBG("cid 0x%4.4x credits 0x%4.4x", cid, credits);
5922
5923 chan = l2cap_get_chan_by_dcid(conn, cid);
5924 if (!chan)
5925 return -EBADSLT;
5926
5927 max_credits = LE_FLOWCTL_MAX_CREDITS - chan->tx_credits;
5928 if (credits > max_credits) {
5929 BT_ERR("LE credits overflow");
5930 l2cap_send_disconn_req(chan, ECONNRESET);
5931
5932
5933
5934
5935 goto unlock;
5936 }
5937
5938 chan->tx_credits += credits;
5939
5940
5941 l2cap_le_flowctl_send(chan);
5942
5943 if (chan->tx_credits)
5944 chan->ops->resume(chan);
5945
5946 unlock:
5947 l2cap_chan_unlock(chan);
5948 l2cap_chan_put(chan);
5949
5950 return 0;
5951 }
5952
5953 static inline int l2cap_ecred_conn_req(struct l2cap_conn *conn,
5954 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5955 u8 *data)
5956 {
5957 struct l2cap_ecred_conn_req *req = (void *) data;
5958 struct {
5959 struct l2cap_ecred_conn_rsp rsp;
5960 __le16 dcid[L2CAP_ECRED_MAX_CID];
5961 } __packed pdu;
5962 struct l2cap_chan *chan, *pchan;
5963 u16 mtu, mps;
5964 __le16 psm;
5965 u8 result, len = 0;
5966 int i, num_scid;
5967 bool defer = false;
5968
5969 if (!enable_ecred)
5970 return -EINVAL;
5971
5972 if (cmd_len < sizeof(*req) || (cmd_len - sizeof(*req)) % sizeof(u16)) {
5973 result = L2CAP_CR_LE_INVALID_PARAMS;
5974 goto response;
5975 }
5976
5977 cmd_len -= sizeof(*req);
5978 num_scid = cmd_len / sizeof(u16);
5979
5980 if (num_scid > ARRAY_SIZE(pdu.dcid)) {
5981 result = L2CAP_CR_LE_INVALID_PARAMS;
5982 goto response;
5983 }
5984
5985 mtu = __le16_to_cpu(req->mtu);
5986 mps = __le16_to_cpu(req->mps);
5987
5988 if (mtu < L2CAP_ECRED_MIN_MTU || mps < L2CAP_ECRED_MIN_MPS) {
5989 result = L2CAP_CR_LE_UNACCEPT_PARAMS;
5990 goto response;
5991 }
5992
5993 psm = req->psm;
5994
5995 BT_DBG("psm 0x%2.2x mtu %u mps %u", __le16_to_cpu(psm), mtu, mps);
5996
5997 memset(&pdu, 0, sizeof(pdu));
5998
5999
6000 pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
6001 &conn->hcon->dst, LE_LINK);
6002 if (!pchan) {
6003 result = L2CAP_CR_LE_BAD_PSM;
6004 goto response;
6005 }
6006
6007 mutex_lock(&conn->chan_lock);
6008 l2cap_chan_lock(pchan);
6009
6010 if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
6011 SMP_ALLOW_STK)) {
6012 result = L2CAP_CR_LE_AUTHENTICATION;
6013 goto unlock;
6014 }
6015
6016 result = L2CAP_CR_LE_SUCCESS;
6017
6018 for (i = 0; i < num_scid; i++) {
6019 u16 scid = __le16_to_cpu(req->scid[i]);
6020
6021 BT_DBG("scid[%d] 0x%4.4x", i, scid);
6022
6023 pdu.dcid[i] = 0x0000;
6024 len += sizeof(*pdu.dcid);
6025
6026
6027 if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END) {
6028 result = L2CAP_CR_LE_INVALID_SCID;
6029 continue;
6030 }
6031
6032
6033 if (__l2cap_get_chan_by_dcid(conn, scid)) {
6034 result = L2CAP_CR_LE_SCID_IN_USE;
6035 continue;
6036 }
6037
6038 chan = pchan->ops->new_connection(pchan);
6039 if (!chan) {
6040 result = L2CAP_CR_LE_NO_MEM;
6041 continue;
6042 }
6043
6044 bacpy(&chan->src, &conn->hcon->src);
6045 bacpy(&chan->dst, &conn->hcon->dst);
6046 chan->src_type = bdaddr_src_type(conn->hcon);
6047 chan->dst_type = bdaddr_dst_type(conn->hcon);
6048 chan->psm = psm;
6049 chan->dcid = scid;
6050 chan->omtu = mtu;
6051 chan->remote_mps = mps;
6052
6053 __l2cap_chan_add(conn, chan);
6054
6055 l2cap_ecred_init(chan, __le16_to_cpu(req->credits));
6056
6057
6058 if (!pdu.rsp.credits) {
6059 pdu.rsp.mtu = cpu_to_le16(chan->imtu);
6060 pdu.rsp.mps = cpu_to_le16(chan->mps);
6061 pdu.rsp.credits = cpu_to_le16(chan->rx_credits);
6062 }
6063
6064 pdu.dcid[i] = cpu_to_le16(chan->scid);
6065
6066 __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
6067
6068 chan->ident = cmd->ident;
6069
6070 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
6071 l2cap_state_change(chan, BT_CONNECT2);
6072 defer = true;
6073 chan->ops->defer(chan);
6074 } else {
6075 l2cap_chan_ready(chan);
6076 }
6077 }
6078
6079 unlock:
6080 l2cap_chan_unlock(pchan);
6081 mutex_unlock(&conn->chan_lock);
6082 l2cap_chan_put(pchan);
6083
6084 response:
6085 pdu.rsp.result = cpu_to_le16(result);
6086
6087 if (defer)
6088 return 0;
6089
6090 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECRED_CONN_RSP,
6091 sizeof(pdu.rsp) + len, &pdu);
6092
6093 return 0;
6094 }
6095
6096 static inline int l2cap_ecred_conn_rsp(struct l2cap_conn *conn,
6097 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6098 u8 *data)
6099 {
6100 struct l2cap_ecred_conn_rsp *rsp = (void *) data;
6101 struct hci_conn *hcon = conn->hcon;
6102 u16 mtu, mps, credits, result;
6103 struct l2cap_chan *chan, *tmp;
6104 int err = 0, sec_level;
6105 int i = 0;
6106
6107 if (cmd_len < sizeof(*rsp))
6108 return -EPROTO;
6109
6110 mtu = __le16_to_cpu(rsp->mtu);
6111 mps = __le16_to_cpu(rsp->mps);
6112 credits = __le16_to_cpu(rsp->credits);
6113 result = __le16_to_cpu(rsp->result);
6114
6115 BT_DBG("mtu %u mps %u credits %u result 0x%4.4x", mtu, mps, credits,
6116 result);
6117
6118 mutex_lock(&conn->chan_lock);
6119
6120 cmd_len -= sizeof(*rsp);
6121
6122 list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
6123 u16 dcid;
6124
6125 if (chan->ident != cmd->ident ||
6126 chan->mode != L2CAP_MODE_EXT_FLOWCTL ||
6127 chan->state == BT_CONNECTED)
6128 continue;
6129
6130 l2cap_chan_lock(chan);
6131
6132
6133 if (cmd_len < sizeof(dcid)) {
6134 l2cap_chan_del(chan, ECONNREFUSED);
6135 l2cap_chan_unlock(chan);
6136 continue;
6137 }
6138
6139 dcid = __le16_to_cpu(rsp->dcid[i++]);
6140 cmd_len -= sizeof(u16);
6141
6142 BT_DBG("dcid[%d] 0x%4.4x", i, dcid);
6143
6144
6145 if (dcid && __l2cap_get_chan_by_dcid(conn, dcid)) {
6146
6147
6148
6149
6150
6151
6152 l2cap_chan_del(chan, ECONNREFUSED);
6153 l2cap_chan_unlock(chan);
6154 chan = __l2cap_get_chan_by_dcid(conn, dcid);
6155 l2cap_chan_lock(chan);
6156 l2cap_chan_del(chan, ECONNRESET);
6157 l2cap_chan_unlock(chan);
6158 continue;
6159 }
6160
6161 switch (result) {
6162 case L2CAP_CR_LE_AUTHENTICATION:
6163 case L2CAP_CR_LE_ENCRYPTION:
6164
6165
6166
6167 if (hcon->sec_level > BT_SECURITY_MEDIUM) {
6168 l2cap_chan_del(chan, ECONNREFUSED);
6169 break;
6170 }
6171
6172 sec_level = hcon->sec_level + 1;
6173 if (chan->sec_level < sec_level)
6174 chan->sec_level = sec_level;
6175
6176
6177 clear_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags);
6178
6179 smp_conn_security(hcon, chan->sec_level);
6180 break;
6181
6182 case L2CAP_CR_LE_BAD_PSM:
6183 l2cap_chan_del(chan, ECONNREFUSED);
6184 break;
6185
6186 default:
6187
6188 if (!dcid) {
6189 l2cap_chan_del(chan, ECONNREFUSED);
6190 break;
6191 }
6192
6193 chan->ident = 0;
6194 chan->dcid = dcid;
6195 chan->omtu = mtu;
6196 chan->remote_mps = mps;
6197 chan->tx_credits = credits;
6198 l2cap_chan_ready(chan);
6199 break;
6200 }
6201
6202 l2cap_chan_unlock(chan);
6203 }
6204
6205 mutex_unlock(&conn->chan_lock);
6206
6207 return err;
6208 }
6209
6210 static inline int l2cap_ecred_reconf_req(struct l2cap_conn *conn,
6211 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6212 u8 *data)
6213 {
6214 struct l2cap_ecred_reconf_req *req = (void *) data;
6215 struct l2cap_ecred_reconf_rsp rsp;
6216 u16 mtu, mps, result;
6217 struct l2cap_chan *chan;
6218 int i, num_scid;
6219
6220 if (!enable_ecred)
6221 return -EINVAL;
6222
6223 if (cmd_len < sizeof(*req) || cmd_len - sizeof(*req) % sizeof(u16)) {
6224 result = L2CAP_CR_LE_INVALID_PARAMS;
6225 goto respond;
6226 }
6227
6228 mtu = __le16_to_cpu(req->mtu);
6229 mps = __le16_to_cpu(req->mps);
6230
6231 BT_DBG("mtu %u mps %u", mtu, mps);
6232
6233 if (mtu < L2CAP_ECRED_MIN_MTU) {
6234 result = L2CAP_RECONF_INVALID_MTU;
6235 goto respond;
6236 }
6237
6238 if (mps < L2CAP_ECRED_MIN_MPS) {
6239 result = L2CAP_RECONF_INVALID_MPS;
6240 goto respond;
6241 }
6242
6243 cmd_len -= sizeof(*req);
6244 num_scid = cmd_len / sizeof(u16);
6245 result = L2CAP_RECONF_SUCCESS;
6246
6247 for (i = 0; i < num_scid; i++) {
6248 u16 scid;
6249
6250 scid = __le16_to_cpu(req->scid[i]);
6251 if (!scid)
6252 return -EPROTO;
6253
6254 chan = __l2cap_get_chan_by_dcid(conn, scid);
6255 if (!chan)
6256 continue;
6257
6258
6259
6260
6261
6262 if (chan->omtu > mtu) {
6263 BT_ERR("chan %p decreased MTU %u -> %u", chan,
6264 chan->omtu, mtu);
6265 result = L2CAP_RECONF_INVALID_MTU;
6266 }
6267
6268 chan->omtu = mtu;
6269 chan->remote_mps = mps;
6270 }
6271
6272 respond:
6273 rsp.result = cpu_to_le16(result);
6274
6275 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECRED_RECONF_RSP, sizeof(rsp),
6276 &rsp);
6277
6278 return 0;
6279 }
6280
6281 static inline int l2cap_ecred_reconf_rsp(struct l2cap_conn *conn,
6282 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6283 u8 *data)
6284 {
6285 struct l2cap_chan *chan, *tmp;
6286 struct l2cap_ecred_conn_rsp *rsp = (void *) data;
6287 u16 result;
6288
6289 if (cmd_len < sizeof(*rsp))
6290 return -EPROTO;
6291
6292 result = __le16_to_cpu(rsp->result);
6293
6294 BT_DBG("result 0x%4.4x", rsp->result);
6295
6296 if (!result)
6297 return 0;
6298
6299 list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
6300 if (chan->ident != cmd->ident)
6301 continue;
6302
6303 l2cap_chan_del(chan, ECONNRESET);
6304 }
6305
6306 return 0;
6307 }
6308
6309 static inline int l2cap_le_command_rej(struct l2cap_conn *conn,
6310 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6311 u8 *data)
6312 {
6313 struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
6314 struct l2cap_chan *chan;
6315
6316 if (cmd_len < sizeof(*rej))
6317 return -EPROTO;
6318
6319 mutex_lock(&conn->chan_lock);
6320
6321 chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
6322 if (!chan)
6323 goto done;
6324
6325 l2cap_chan_lock(chan);
6326 l2cap_chan_del(chan, ECONNREFUSED);
6327 l2cap_chan_unlock(chan);
6328
6329 done:
6330 mutex_unlock(&conn->chan_lock);
6331 return 0;
6332 }
6333
6334 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
6335 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6336 u8 *data)
6337 {
6338 int err = 0;
6339
6340 switch (cmd->code) {
6341 case L2CAP_COMMAND_REJ:
6342 l2cap_le_command_rej(conn, cmd, cmd_len, data);
6343 break;
6344
6345 case L2CAP_CONN_PARAM_UPDATE_REQ:
6346 err = l2cap_conn_param_update_req(conn, cmd, cmd_len, data);
6347 break;
6348
6349 case L2CAP_CONN_PARAM_UPDATE_RSP:
6350 break;
6351
6352 case L2CAP_LE_CONN_RSP:
6353 l2cap_le_connect_rsp(conn, cmd, cmd_len, data);
6354 break;
6355
6356 case L2CAP_LE_CONN_REQ:
6357 err = l2cap_le_connect_req(conn, cmd, cmd_len, data);
6358 break;
6359
6360 case L2CAP_LE_CREDITS:
6361 err = l2cap_le_credits(conn, cmd, cmd_len, data);
6362 break;
6363
6364 case L2CAP_ECRED_CONN_REQ:
6365 err = l2cap_ecred_conn_req(conn, cmd, cmd_len, data);
6366 break;
6367
6368 case L2CAP_ECRED_CONN_RSP:
6369 err = l2cap_ecred_conn_rsp(conn, cmd, cmd_len, data);
6370 break;
6371
6372 case L2CAP_ECRED_RECONF_REQ:
6373 err = l2cap_ecred_reconf_req(conn, cmd, cmd_len, data);
6374 break;
6375
6376 case L2CAP_ECRED_RECONF_RSP:
6377 err = l2cap_ecred_reconf_rsp(conn, cmd, cmd_len, data);
6378 break;
6379
6380 case L2CAP_DISCONN_REQ:
6381 err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
6382 break;
6383
6384 case L2CAP_DISCONN_RSP:
6385 l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
6386 break;
6387
6388 default:
6389 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
6390 err = -EINVAL;
6391 break;
6392 }
6393
6394 return err;
6395 }
6396
6397 static inline void l2cap_le_sig_channel(struct l2cap_conn *conn,
6398 struct sk_buff *skb)
6399 {
6400 struct hci_conn *hcon = conn->hcon;
6401 struct l2cap_cmd_hdr *cmd;
6402 u16 len;
6403 int err;
6404
6405 if (hcon->type != LE_LINK)
6406 goto drop;
6407
6408 if (skb->len < L2CAP_CMD_HDR_SIZE)
6409 goto drop;
6410
6411 cmd = (void *) skb->data;
6412 skb_pull(skb, L2CAP_CMD_HDR_SIZE);
6413
6414 len = le16_to_cpu(cmd->len);
6415
6416 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len, cmd->ident);
6417
6418 if (len != skb->len || !cmd->ident) {
6419 BT_DBG("corrupted command");
6420 goto drop;
6421 }
6422
6423 err = l2cap_le_sig_cmd(conn, cmd, len, skb->data);
6424 if (err) {
6425 struct l2cap_cmd_rej_unk rej;
6426
6427 BT_ERR("Wrong link type (%d)", err);
6428
6429 rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
6430 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
6431 sizeof(rej), &rej);
6432 }
6433
6434 drop:
6435 kfree_skb(skb);
6436 }
6437
6438 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
6439 struct sk_buff *skb)
6440 {
6441 struct hci_conn *hcon = conn->hcon;
6442 struct l2cap_cmd_hdr *cmd;
6443 int err;
6444
6445 l2cap_raw_recv(conn, skb);
6446
6447 if (hcon->type != ACL_LINK)
6448 goto drop;
6449
6450 while (skb->len >= L2CAP_CMD_HDR_SIZE) {
6451 u16 len;
6452
6453 cmd = (void *) skb->data;
6454 skb_pull(skb, L2CAP_CMD_HDR_SIZE);
6455
6456 len = le16_to_cpu(cmd->len);
6457
6458 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len,
6459 cmd->ident);
6460
6461 if (len > skb->len || !cmd->ident) {
6462 BT_DBG("corrupted command");
6463 break;
6464 }
6465
6466 err = l2cap_bredr_sig_cmd(conn, cmd, len, skb->data);
6467 if (err) {
6468 struct l2cap_cmd_rej_unk rej;
6469
6470 BT_ERR("Wrong link type (%d)", err);
6471
6472 rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
6473 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
6474 sizeof(rej), &rej);
6475 }
6476
6477 skb_pull(skb, len);
6478 }
6479
6480 drop:
6481 kfree_skb(skb);
6482 }
6483
6484 static int l2cap_check_fcs(struct l2cap_chan *chan, struct sk_buff *skb)
6485 {
6486 u16 our_fcs, rcv_fcs;
6487 int hdr_size;
6488
6489 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
6490 hdr_size = L2CAP_EXT_HDR_SIZE;
6491 else
6492 hdr_size = L2CAP_ENH_HDR_SIZE;
6493
6494 if (chan->fcs == L2CAP_FCS_CRC16) {
6495 skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
6496 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
6497 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
6498
6499 if (our_fcs != rcv_fcs)
6500 return -EBADMSG;
6501 }
6502 return 0;
6503 }
6504
6505 static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
6506 {
6507 struct l2cap_ctrl control;
6508
6509 BT_DBG("chan %p", chan);
6510
6511 memset(&control, 0, sizeof(control));
6512 control.sframe = 1;
6513 control.final = 1;
6514 control.reqseq = chan->buffer_seq;
6515 set_bit(CONN_SEND_FBIT, &chan->conn_state);
6516
6517 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6518 control.super = L2CAP_SUPER_RNR;
6519 l2cap_send_sframe(chan, &control);
6520 }
6521
6522 if (test_and_clear_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
6523 chan->unacked_frames > 0)
6524 __set_retrans_timer(chan);
6525
6526
6527 l2cap_ertm_send(chan);
6528
6529 if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
6530 test_bit(CONN_SEND_FBIT, &chan->conn_state)) {
6531
6532
6533
6534 control.super = L2CAP_SUPER_RR;
6535 l2cap_send_sframe(chan, &control);
6536 }
6537 }
6538
6539 static void append_skb_frag(struct sk_buff *skb, struct sk_buff *new_frag,
6540 struct sk_buff **last_frag)
6541 {
6542
6543
6544
6545 if (!skb_has_frag_list(skb))
6546 skb_shinfo(skb)->frag_list = new_frag;
6547
6548 new_frag->next = NULL;
6549
6550 (*last_frag)->next = new_frag;
6551 *last_frag = new_frag;
6552
6553 skb->len += new_frag->len;
6554 skb->data_len += new_frag->len;
6555 skb->truesize += new_frag->truesize;
6556 }
6557
6558 static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb,
6559 struct l2cap_ctrl *control)
6560 {
6561 int err = -EINVAL;
6562
6563 switch (control->sar) {
6564 case L2CAP_SAR_UNSEGMENTED:
6565 if (chan->sdu)
6566 break;
6567
6568 err = chan->ops->recv(chan, skb);
6569 break;
6570
6571 case L2CAP_SAR_START:
6572 if (chan->sdu)
6573 break;
6574
6575 if (!pskb_may_pull(skb, L2CAP_SDULEN_SIZE))
6576 break;
6577
6578 chan->sdu_len = get_unaligned_le16(skb->data);
6579 skb_pull(skb, L2CAP_SDULEN_SIZE);
6580
6581 if (chan->sdu_len > chan->imtu) {
6582 err = -EMSGSIZE;
6583 break;
6584 }
6585
6586 if (skb->len >= chan->sdu_len)
6587 break;
6588
6589 chan->sdu = skb;
6590 chan->sdu_last_frag = skb;
6591
6592 skb = NULL;
6593 err = 0;
6594 break;
6595
6596 case L2CAP_SAR_CONTINUE:
6597 if (!chan->sdu)
6598 break;
6599
6600 append_skb_frag(chan->sdu, skb,
6601 &chan->sdu_last_frag);
6602 skb = NULL;
6603
6604 if (chan->sdu->len >= chan->sdu_len)
6605 break;
6606
6607 err = 0;
6608 break;
6609
6610 case L2CAP_SAR_END:
6611 if (!chan->sdu)
6612 break;
6613
6614 append_skb_frag(chan->sdu, skb,
6615 &chan->sdu_last_frag);
6616 skb = NULL;
6617
6618 if (chan->sdu->len != chan->sdu_len)
6619 break;
6620
6621 err = chan->ops->recv(chan, chan->sdu);
6622
6623 if (!err) {
6624
6625 chan->sdu = NULL;
6626 chan->sdu_last_frag = NULL;
6627 chan->sdu_len = 0;
6628 }
6629 break;
6630 }
6631
6632 if (err) {
6633 kfree_skb(skb);
6634 kfree_skb(chan->sdu);
6635 chan->sdu = NULL;
6636 chan->sdu_last_frag = NULL;
6637 chan->sdu_len = 0;
6638 }
6639
6640 return err;
6641 }
6642
6643 static int l2cap_resegment(struct l2cap_chan *chan)
6644 {
6645
6646 return 0;
6647 }
6648
6649 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
6650 {
6651 u8 event;
6652
6653 if (chan->mode != L2CAP_MODE_ERTM)
6654 return;
6655
6656 event = busy ? L2CAP_EV_LOCAL_BUSY_DETECTED : L2CAP_EV_LOCAL_BUSY_CLEAR;
6657 l2cap_tx(chan, NULL, NULL, event);
6658 }
6659
6660 static int l2cap_rx_queued_iframes(struct l2cap_chan *chan)
6661 {
6662 int err = 0;
6663
6664
6665
6666
6667 BT_DBG("chan %p", chan);
6668
6669 while (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6670 struct sk_buff *skb;
6671 BT_DBG("Searching for skb with txseq %d (queue len %d)",
6672 chan->buffer_seq, skb_queue_len(&chan->srej_q));
6673
6674 skb = l2cap_ertm_seq_in_queue(&chan->srej_q, chan->buffer_seq);
6675
6676 if (!skb)
6677 break;
6678
6679 skb_unlink(skb, &chan->srej_q);
6680 chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
6681 err = l2cap_reassemble_sdu(chan, skb, &bt_cb(skb)->l2cap);
6682 if (err)
6683 break;
6684 }
6685
6686 if (skb_queue_empty(&chan->srej_q)) {
6687 chan->rx_state = L2CAP_RX_STATE_RECV;
6688 l2cap_send_ack(chan);
6689 }
6690
6691 return err;
6692 }
6693
6694 static void l2cap_handle_srej(struct l2cap_chan *chan,
6695 struct l2cap_ctrl *control)
6696 {
6697 struct sk_buff *skb;
6698
6699 BT_DBG("chan %p, control %p", chan, control);
6700
6701 if (control->reqseq == chan->next_tx_seq) {
6702 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6703 l2cap_send_disconn_req(chan, ECONNRESET);
6704 return;
6705 }
6706
6707 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6708
6709 if (skb == NULL) {
6710 BT_DBG("Seq %d not available for retransmission",
6711 control->reqseq);
6712 return;
6713 }
6714
6715 if (chan->max_tx != 0 && bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6716 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6717 l2cap_send_disconn_req(chan, ECONNRESET);
6718 return;
6719 }
6720
6721 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6722
6723 if (control->poll) {
6724 l2cap_pass_to_tx(chan, control);
6725
6726 set_bit(CONN_SEND_FBIT, &chan->conn_state);
6727 l2cap_retransmit(chan, control);
6728 l2cap_ertm_send(chan);
6729
6730 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6731 set_bit(CONN_SREJ_ACT, &chan->conn_state);
6732 chan->srej_save_reqseq = control->reqseq;
6733 }
6734 } else {
6735 l2cap_pass_to_tx_fbit(chan, control);
6736
6737 if (control->final) {
6738 if (chan->srej_save_reqseq != control->reqseq ||
6739 !test_and_clear_bit(CONN_SREJ_ACT,
6740 &chan->conn_state))
6741 l2cap_retransmit(chan, control);
6742 } else {
6743 l2cap_retransmit(chan, control);
6744 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6745 set_bit(CONN_SREJ_ACT, &chan->conn_state);
6746 chan->srej_save_reqseq = control->reqseq;
6747 }
6748 }
6749 }
6750 }
6751
6752 static void l2cap_handle_rej(struct l2cap_chan *chan,
6753 struct l2cap_ctrl *control)
6754 {
6755 struct sk_buff *skb;
6756
6757 BT_DBG("chan %p, control %p", chan, control);
6758
6759 if (control->reqseq == chan->next_tx_seq) {
6760 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6761 l2cap_send_disconn_req(chan, ECONNRESET);
6762 return;
6763 }
6764
6765 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6766
6767 if (chan->max_tx && skb &&
6768 bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6769 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6770 l2cap_send_disconn_req(chan, ECONNRESET);
6771 return;
6772 }
6773
6774 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6775
6776 l2cap_pass_to_tx(chan, control);
6777
6778 if (control->final) {
6779 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
6780 l2cap_retransmit_all(chan, control);
6781 } else {
6782 l2cap_retransmit_all(chan, control);
6783 l2cap_ertm_send(chan);
6784 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F)
6785 set_bit(CONN_REJ_ACT, &chan->conn_state);
6786 }
6787 }
6788
6789 static u8 l2cap_classify_txseq(struct l2cap_chan *chan, u16 txseq)
6790 {
6791 BT_DBG("chan %p, txseq %d", chan, txseq);
6792
6793 BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan->last_acked_seq,
6794 chan->expected_tx_seq);
6795
6796 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
6797 if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6798 chan->tx_win) {
6799
6800
6801
6802 if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6803 BT_DBG("Invalid/Ignore - after SREJ");
6804 return L2CAP_TXSEQ_INVALID_IGNORE;
6805 } else {
6806 BT_DBG("Invalid - in window after SREJ sent");
6807 return L2CAP_TXSEQ_INVALID;
6808 }
6809 }
6810
6811 if (chan->srej_list.head == txseq) {
6812 BT_DBG("Expected SREJ");
6813 return L2CAP_TXSEQ_EXPECTED_SREJ;
6814 }
6815
6816 if (l2cap_ertm_seq_in_queue(&chan->srej_q, txseq)) {
6817 BT_DBG("Duplicate SREJ - txseq already stored");
6818 return L2CAP_TXSEQ_DUPLICATE_SREJ;
6819 }
6820
6821 if (l2cap_seq_list_contains(&chan->srej_list, txseq)) {
6822 BT_DBG("Unexpected SREJ - not requested");
6823 return L2CAP_TXSEQ_UNEXPECTED_SREJ;
6824 }
6825 }
6826
6827 if (chan->expected_tx_seq == txseq) {
6828 if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6829 chan->tx_win) {
6830 BT_DBG("Invalid - txseq outside tx window");
6831 return L2CAP_TXSEQ_INVALID;
6832 } else {
6833 BT_DBG("Expected");
6834 return L2CAP_TXSEQ_EXPECTED;
6835 }
6836 }
6837
6838 if (__seq_offset(chan, txseq, chan->last_acked_seq) <
6839 __seq_offset(chan, chan->expected_tx_seq, chan->last_acked_seq)) {
6840 BT_DBG("Duplicate - expected_tx_seq later than txseq");
6841 return L2CAP_TXSEQ_DUPLICATE;
6842 }
6843
6844 if (__seq_offset(chan, txseq, chan->last_acked_seq) >= chan->tx_win) {
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862 if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6863 BT_DBG("Invalid/Ignore - txseq outside tx window");
6864 return L2CAP_TXSEQ_INVALID_IGNORE;
6865 } else {
6866 BT_DBG("Invalid - txseq outside tx window");
6867 return L2CAP_TXSEQ_INVALID;
6868 }
6869 } else {
6870 BT_DBG("Unexpected - txseq indicates missing frames");
6871 return L2CAP_TXSEQ_UNEXPECTED;
6872 }
6873 }
6874
6875 static int l2cap_rx_state_recv(struct l2cap_chan *chan,
6876 struct l2cap_ctrl *control,
6877 struct sk_buff *skb, u8 event)
6878 {
6879 int err = 0;
6880 bool skb_in_use = false;
6881
6882 BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6883 event);
6884
6885 switch (event) {
6886 case L2CAP_EV_RECV_IFRAME:
6887 switch (l2cap_classify_txseq(chan, control->txseq)) {
6888 case L2CAP_TXSEQ_EXPECTED:
6889 l2cap_pass_to_tx(chan, control);
6890
6891 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6892 BT_DBG("Busy, discarding expected seq %d",
6893 control->txseq);
6894 break;
6895 }
6896
6897 chan->expected_tx_seq = __next_seq(chan,
6898 control->txseq);
6899
6900 chan->buffer_seq = chan->expected_tx_seq;
6901 skb_in_use = true;
6902
6903 err = l2cap_reassemble_sdu(chan, skb, control);
6904 if (err)
6905 break;
6906
6907 if (control->final) {
6908 if (!test_and_clear_bit(CONN_REJ_ACT,
6909 &chan->conn_state)) {
6910 control->final = 0;
6911 l2cap_retransmit_all(chan, control);
6912 l2cap_ertm_send(chan);
6913 }
6914 }
6915
6916 if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
6917 l2cap_send_ack(chan);
6918 break;
6919 case L2CAP_TXSEQ_UNEXPECTED:
6920 l2cap_pass_to_tx(chan, control);
6921
6922
6923
6924
6925
6926 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6927 BT_DBG("Busy, discarding unexpected seq %d",
6928 control->txseq);
6929 break;
6930 }
6931
6932
6933
6934
6935
6936 skb_queue_tail(&chan->srej_q, skb);
6937 skb_in_use = true;
6938 BT_DBG("Queued %p (queue len %d)", skb,
6939 skb_queue_len(&chan->srej_q));
6940
6941 clear_bit(CONN_SREJ_ACT, &chan->conn_state);
6942 l2cap_seq_list_clear(&chan->srej_list);
6943 l2cap_send_srej(chan, control->txseq);
6944
6945 chan->rx_state = L2CAP_RX_STATE_SREJ_SENT;
6946 break;
6947 case L2CAP_TXSEQ_DUPLICATE:
6948 l2cap_pass_to_tx(chan, control);
6949 break;
6950 case L2CAP_TXSEQ_INVALID_IGNORE:
6951 break;
6952 case L2CAP_TXSEQ_INVALID:
6953 default:
6954 l2cap_send_disconn_req(chan, ECONNRESET);
6955 break;
6956 }
6957 break;
6958 case L2CAP_EV_RECV_RR:
6959 l2cap_pass_to_tx(chan, control);
6960 if (control->final) {
6961 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6962
6963 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state) &&
6964 !__chan_is_moving(chan)) {
6965 control->final = 0;
6966 l2cap_retransmit_all(chan, control);
6967 }
6968
6969 l2cap_ertm_send(chan);
6970 } else if (control->poll) {
6971 l2cap_send_i_or_rr_or_rnr(chan);
6972 } else {
6973 if (test_and_clear_bit(CONN_REMOTE_BUSY,
6974 &chan->conn_state) &&
6975 chan->unacked_frames)
6976 __set_retrans_timer(chan);
6977
6978 l2cap_ertm_send(chan);
6979 }
6980 break;
6981 case L2CAP_EV_RECV_RNR:
6982 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6983 l2cap_pass_to_tx(chan, control);
6984 if (control && control->poll) {
6985 set_bit(CONN_SEND_FBIT, &chan->conn_state);
6986 l2cap_send_rr_or_rnr(chan, 0);
6987 }
6988 __clear_retrans_timer(chan);
6989 l2cap_seq_list_clear(&chan->retrans_list);
6990 break;
6991 case L2CAP_EV_RECV_REJ:
6992 l2cap_handle_rej(chan, control);
6993 break;
6994 case L2CAP_EV_RECV_SREJ:
6995 l2cap_handle_srej(chan, control);
6996 break;
6997 default:
6998 break;
6999 }
7000
7001 if (skb && !skb_in_use) {
7002 BT_DBG("Freeing %p", skb);
7003 kfree_skb(skb);
7004 }
7005
7006 return err;
7007 }
7008
7009 static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan,
7010 struct l2cap_ctrl *control,
7011 struct sk_buff *skb, u8 event)
7012 {
7013 int err = 0;
7014 u16 txseq = control->txseq;
7015 bool skb_in_use = false;
7016
7017 BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
7018 event);
7019
7020 switch (event) {
7021 case L2CAP_EV_RECV_IFRAME:
7022 switch (l2cap_classify_txseq(chan, txseq)) {
7023 case L2CAP_TXSEQ_EXPECTED:
7024
7025 l2cap_pass_to_tx(chan, control);
7026 skb_queue_tail(&chan->srej_q, skb);
7027 skb_in_use = true;
7028 BT_DBG("Queued %p (queue len %d)", skb,
7029 skb_queue_len(&chan->srej_q));
7030
7031 chan->expected_tx_seq = __next_seq(chan, txseq);
7032 break;
7033 case L2CAP_TXSEQ_EXPECTED_SREJ:
7034 l2cap_seq_list_pop(&chan->srej_list);
7035
7036 l2cap_pass_to_tx(chan, control);
7037 skb_queue_tail(&chan->srej_q, skb);
7038 skb_in_use = true;
7039 BT_DBG("Queued %p (queue len %d)", skb,
7040 skb_queue_len(&chan->srej_q));
7041
7042 err = l2cap_rx_queued_iframes(chan);
7043 if (err)
7044 break;
7045
7046 break;
7047 case L2CAP_TXSEQ_UNEXPECTED:
7048
7049
7050
7051
7052 skb_queue_tail(&chan->srej_q, skb);
7053 skb_in_use = true;
7054 BT_DBG("Queued %p (queue len %d)", skb,
7055 skb_queue_len(&chan->srej_q));
7056
7057 l2cap_pass_to_tx(chan, control);
7058 l2cap_send_srej(chan, control->txseq);
7059 break;
7060 case L2CAP_TXSEQ_UNEXPECTED_SREJ:
7061
7062
7063
7064
7065
7066 skb_queue_tail(&chan->srej_q, skb);
7067 skb_in_use = true;
7068 BT_DBG("Queued %p (queue len %d)", skb,
7069 skb_queue_len(&chan->srej_q));
7070
7071 l2cap_pass_to_tx(chan, control);
7072 l2cap_send_srej_list(chan, control->txseq);
7073 break;
7074 case L2CAP_TXSEQ_DUPLICATE_SREJ:
7075
7076 l2cap_pass_to_tx(chan, control);
7077 break;
7078 case L2CAP_TXSEQ_DUPLICATE:
7079
7080
7081
7082 break;
7083 case L2CAP_TXSEQ_INVALID_IGNORE:
7084 break;
7085 case L2CAP_TXSEQ_INVALID:
7086 default:
7087 l2cap_send_disconn_req(chan, ECONNRESET);
7088 break;
7089 }
7090 break;
7091 case L2CAP_EV_RECV_RR:
7092 l2cap_pass_to_tx(chan, control);
7093 if (control->final) {
7094 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7095
7096 if (!test_and_clear_bit(CONN_REJ_ACT,
7097 &chan->conn_state)) {
7098 control->final = 0;
7099 l2cap_retransmit_all(chan, control);
7100 }
7101
7102 l2cap_ertm_send(chan);
7103 } else if (control->poll) {
7104 if (test_and_clear_bit(CONN_REMOTE_BUSY,
7105 &chan->conn_state) &&
7106 chan->unacked_frames) {
7107 __set_retrans_timer(chan);
7108 }
7109
7110 set_bit(CONN_SEND_FBIT, &chan->conn_state);
7111 l2cap_send_srej_tail(chan);
7112 } else {
7113 if (test_and_clear_bit(CONN_REMOTE_BUSY,
7114 &chan->conn_state) &&
7115 chan->unacked_frames)
7116 __set_retrans_timer(chan);
7117
7118 l2cap_send_ack(chan);
7119 }
7120 break;
7121 case L2CAP_EV_RECV_RNR:
7122 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7123 l2cap_pass_to_tx(chan, control);
7124 if (control->poll) {
7125 l2cap_send_srej_tail(chan);
7126 } else {
7127 struct l2cap_ctrl rr_control;
7128 memset(&rr_control, 0, sizeof(rr_control));
7129 rr_control.sframe = 1;
7130 rr_control.super = L2CAP_SUPER_RR;
7131 rr_control.reqseq = chan->buffer_seq;
7132 l2cap_send_sframe(chan, &rr_control);
7133 }
7134
7135 break;
7136 case L2CAP_EV_RECV_REJ:
7137 l2cap_handle_rej(chan, control);
7138 break;
7139 case L2CAP_EV_RECV_SREJ:
7140 l2cap_handle_srej(chan, control);
7141 break;
7142 }
7143
7144 if (skb && !skb_in_use) {
7145 BT_DBG("Freeing %p", skb);
7146 kfree_skb(skb);
7147 }
7148
7149 return err;
7150 }
7151
7152 static int l2cap_finish_move(struct l2cap_chan *chan)
7153 {
7154 BT_DBG("chan %p", chan);
7155
7156 chan->rx_state = L2CAP_RX_STATE_RECV;
7157
7158 if (chan->hs_hcon)
7159 chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
7160 else
7161 chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
7162
7163 return l2cap_resegment(chan);
7164 }
7165
7166 static int l2cap_rx_state_wait_p(struct l2cap_chan *chan,
7167 struct l2cap_ctrl *control,
7168 struct sk_buff *skb, u8 event)
7169 {
7170 int err;
7171
7172 BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
7173 event);
7174
7175 if (!control->poll)
7176 return -EPROTO;
7177
7178 l2cap_process_reqseq(chan, control->reqseq);
7179
7180 if (!skb_queue_empty(&chan->tx_q))
7181 chan->tx_send_head = skb_peek(&chan->tx_q);
7182 else
7183 chan->tx_send_head = NULL;
7184
7185
7186
7187
7188 chan->next_tx_seq = control->reqseq;
7189 chan->unacked_frames = 0;
7190
7191 err = l2cap_finish_move(chan);
7192 if (err)
7193 return err;
7194
7195 set_bit(CONN_SEND_FBIT, &chan->conn_state);
7196 l2cap_send_i_or_rr_or_rnr(chan);
7197
7198 if (event == L2CAP_EV_RECV_IFRAME)
7199 return -EPROTO;
7200
7201 return l2cap_rx_state_recv(chan, control, NULL, event);
7202 }
7203
7204 static int l2cap_rx_state_wait_f(struct l2cap_chan *chan,
7205 struct l2cap_ctrl *control,
7206 struct sk_buff *skb, u8 event)
7207 {
7208 int err;
7209
7210 if (!control->final)
7211 return -EPROTO;
7212
7213 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7214
7215 chan->rx_state = L2CAP_RX_STATE_RECV;
7216 l2cap_process_reqseq(chan, control->reqseq);
7217
7218 if (!skb_queue_empty(&chan->tx_q))
7219 chan->tx_send_head = skb_peek(&chan->tx_q);
7220 else
7221 chan->tx_send_head = NULL;
7222
7223
7224
7225
7226 chan->next_tx_seq = control->reqseq;
7227 chan->unacked_frames = 0;
7228
7229 if (chan->hs_hcon)
7230 chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
7231 else
7232 chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
7233
7234 err = l2cap_resegment(chan);
7235
7236 if (!err)
7237 err = l2cap_rx_state_recv(chan, control, skb, event);
7238
7239 return err;
7240 }
7241
7242 static bool __valid_reqseq(struct l2cap_chan *chan, u16 reqseq)
7243 {
7244
7245 u16 unacked;
7246
7247 unacked = __seq_offset(chan, chan->next_tx_seq, chan->expected_ack_seq);
7248 return __seq_offset(chan, chan->next_tx_seq, reqseq) <= unacked;
7249 }
7250
7251 static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
7252 struct sk_buff *skb, u8 event)
7253 {
7254 int err = 0;
7255
7256 BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan,
7257 control, skb, event, chan->rx_state);
7258
7259 if (__valid_reqseq(chan, control->reqseq)) {
7260 switch (chan->rx_state) {
7261 case L2CAP_RX_STATE_RECV:
7262 err = l2cap_rx_state_recv(chan, control, skb, event);
7263 break;
7264 case L2CAP_RX_STATE_SREJ_SENT:
7265 err = l2cap_rx_state_srej_sent(chan, control, skb,
7266 event);
7267 break;
7268 case L2CAP_RX_STATE_WAIT_P:
7269 err = l2cap_rx_state_wait_p(chan, control, skb, event);
7270 break;
7271 case L2CAP_RX_STATE_WAIT_F:
7272 err = l2cap_rx_state_wait_f(chan, control, skb, event);
7273 break;
7274 default:
7275
7276 break;
7277 }
7278 } else {
7279 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
7280 control->reqseq, chan->next_tx_seq,
7281 chan->expected_ack_seq);
7282 l2cap_send_disconn_req(chan, ECONNRESET);
7283 }
7284
7285 return err;
7286 }
7287
7288 static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
7289 struct sk_buff *skb)
7290 {
7291 BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb,
7292 chan->rx_state);
7293
7294 if (l2cap_classify_txseq(chan, control->txseq) ==
7295 L2CAP_TXSEQ_EXPECTED) {
7296 l2cap_pass_to_tx(chan, control);
7297
7298 BT_DBG("buffer_seq %u->%u", chan->buffer_seq,
7299 __next_seq(chan, chan->buffer_seq));
7300
7301 chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
7302
7303 l2cap_reassemble_sdu(chan, skb, control);
7304 } else {
7305 if (chan->sdu) {
7306 kfree_skb(chan->sdu);
7307 chan->sdu = NULL;
7308 }
7309 chan->sdu_last_frag = NULL;
7310 chan->sdu_len = 0;
7311
7312 if (skb) {
7313 BT_DBG("Freeing %p", skb);
7314 kfree_skb(skb);
7315 }
7316 }
7317
7318 chan->last_acked_seq = control->txseq;
7319 chan->expected_tx_seq = __next_seq(chan, control->txseq);
7320
7321 return 0;
7322 }
7323
7324 static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
7325 {
7326 struct l2cap_ctrl *control = &bt_cb(skb)->l2cap;
7327 u16 len;
7328 u8 event;
7329
7330 __unpack_control(chan, skb);
7331
7332 len = skb->len;
7333
7334
7335
7336
7337
7338
7339 if (l2cap_check_fcs(chan, skb))
7340 goto drop;
7341
7342 if (!control->sframe && control->sar == L2CAP_SAR_START)
7343 len -= L2CAP_SDULEN_SIZE;
7344
7345 if (chan->fcs == L2CAP_FCS_CRC16)
7346 len -= L2CAP_FCS_SIZE;
7347
7348 if (len > chan->mps) {
7349 l2cap_send_disconn_req(chan, ECONNRESET);
7350 goto drop;
7351 }
7352
7353 if (chan->ops->filter) {
7354 if (chan->ops->filter(chan, skb))
7355 goto drop;
7356 }
7357
7358 if (!control->sframe) {
7359 int err;
7360
7361 BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
7362 control->sar, control->reqseq, control->final,
7363 control->txseq);
7364
7365
7366
7367
7368 if (control->final && chan->tx_state != L2CAP_TX_STATE_WAIT_F)
7369 goto drop;
7370
7371 if (chan->mode != L2CAP_MODE_STREAMING) {
7372 event = L2CAP_EV_RECV_IFRAME;
7373 err = l2cap_rx(chan, control, skb, event);
7374 } else {
7375 err = l2cap_stream_rx(chan, control, skb);
7376 }
7377
7378 if (err)
7379 l2cap_send_disconn_req(chan, ECONNRESET);
7380 } else {
7381 const u8 rx_func_to_event[4] = {
7382 L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ,
7383 L2CAP_EV_RECV_RNR, L2CAP_EV_RECV_SREJ
7384 };
7385
7386
7387 if (chan->mode == L2CAP_MODE_STREAMING)
7388 goto drop;
7389
7390 BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
7391 control->reqseq, control->final, control->poll,
7392 control->super);
7393
7394 if (len != 0) {
7395 BT_ERR("Trailing bytes: %d in sframe", len);
7396 l2cap_send_disconn_req(chan, ECONNRESET);
7397 goto drop;
7398 }
7399
7400
7401 if (control->final && (control->poll ||
7402 chan->tx_state != L2CAP_TX_STATE_WAIT_F))
7403 goto drop;
7404
7405 event = rx_func_to_event[control->super];
7406 if (l2cap_rx(chan, control, skb, event))
7407 l2cap_send_disconn_req(chan, ECONNRESET);
7408 }
7409
7410 return 0;
7411
7412 drop:
7413 kfree_skb(skb);
7414 return 0;
7415 }
7416
7417 static void l2cap_chan_le_send_credits(struct l2cap_chan *chan)
7418 {
7419 struct l2cap_conn *conn = chan->conn;
7420 struct l2cap_le_credits pkt;
7421 u16 return_credits;
7422
7423 return_credits = (chan->imtu / chan->mps) + 1;
7424
7425 if (chan->rx_credits >= return_credits)
7426 return;
7427
7428 return_credits -= chan->rx_credits;
7429
7430 BT_DBG("chan %p returning %u credits to sender", chan, return_credits);
7431
7432 chan->rx_credits += return_credits;
7433
7434 pkt.cid = cpu_to_le16(chan->scid);
7435 pkt.credits = cpu_to_le16(return_credits);
7436
7437 chan->ident = l2cap_get_ident(conn);
7438
7439 l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CREDITS, sizeof(pkt), &pkt);
7440 }
7441
7442 static int l2cap_ecred_recv(struct l2cap_chan *chan, struct sk_buff *skb)
7443 {
7444 int err;
7445
7446 BT_DBG("SDU reassemble complete: chan %p skb->len %u", chan, skb->len);
7447
7448
7449 err = chan->ops->recv(chan, skb);
7450
7451
7452 l2cap_chan_le_send_credits(chan);
7453
7454 return err;
7455 }
7456
7457 static int l2cap_ecred_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
7458 {
7459 int err;
7460
7461 if (!chan->rx_credits) {
7462 BT_ERR("No credits to receive LE L2CAP data");
7463 l2cap_send_disconn_req(chan, ECONNRESET);
7464 return -ENOBUFS;
7465 }
7466
7467 if (chan->imtu < skb->len) {
7468 BT_ERR("Too big LE L2CAP PDU");
7469 return -ENOBUFS;
7470 }
7471
7472 chan->rx_credits--;
7473 BT_DBG("rx_credits %u -> %u", chan->rx_credits + 1, chan->rx_credits);
7474
7475
7476
7477
7478 if (!chan->rx_credits)
7479 l2cap_chan_le_send_credits(chan);
7480
7481 err = 0;
7482
7483 if (!chan->sdu) {
7484 u16 sdu_len;
7485
7486 sdu_len = get_unaligned_le16(skb->data);
7487 skb_pull(skb, L2CAP_SDULEN_SIZE);
7488
7489 BT_DBG("Start of new SDU. sdu_len %u skb->len %u imtu %u",
7490 sdu_len, skb->len, chan->imtu);
7491
7492 if (sdu_len > chan->imtu) {
7493 BT_ERR("Too big LE L2CAP SDU length received");
7494 err = -EMSGSIZE;
7495 goto failed;
7496 }
7497
7498 if (skb->len > sdu_len) {
7499 BT_ERR("Too much LE L2CAP data received");
7500 err = -EINVAL;
7501 goto failed;
7502 }
7503
7504 if (skb->len == sdu_len)
7505 return l2cap_ecred_recv(chan, skb);
7506
7507 chan->sdu = skb;
7508 chan->sdu_len = sdu_len;
7509 chan->sdu_last_frag = skb;
7510
7511
7512 if (skb->len + L2CAP_SDULEN_SIZE < chan->mps) {
7513 u16 mps_len = skb->len + L2CAP_SDULEN_SIZE;
7514
7515
7516 BT_DBG("chan->mps %u -> %u", chan->mps, mps_len);
7517 chan->mps = mps_len;
7518 l2cap_chan_le_send_credits(chan);
7519 }
7520
7521 return 0;
7522 }
7523
7524 BT_DBG("SDU fragment. chan->sdu->len %u skb->len %u chan->sdu_len %u",
7525 chan->sdu->len, skb->len, chan->sdu_len);
7526
7527 if (chan->sdu->len + skb->len > chan->sdu_len) {
7528 BT_ERR("Too much LE L2CAP data received");
7529 err = -EINVAL;
7530 goto failed;
7531 }
7532
7533 append_skb_frag(chan->sdu, skb, &chan->sdu_last_frag);
7534 skb = NULL;
7535
7536 if (chan->sdu->len == chan->sdu_len) {
7537 err = l2cap_ecred_recv(chan, chan->sdu);
7538 if (!err) {
7539 chan->sdu = NULL;
7540 chan->sdu_last_frag = NULL;
7541 chan->sdu_len = 0;
7542 }
7543 }
7544
7545 failed:
7546 if (err) {
7547 kfree_skb(skb);
7548 kfree_skb(chan->sdu);
7549 chan->sdu = NULL;
7550 chan->sdu_last_frag = NULL;
7551 chan->sdu_len = 0;
7552 }
7553
7554
7555
7556
7557
7558 return 0;
7559 }
7560
7561 static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
7562 struct sk_buff *skb)
7563 {
7564 struct l2cap_chan *chan;
7565
7566 chan = l2cap_get_chan_by_scid(conn, cid);
7567 if (!chan) {
7568 if (cid == L2CAP_CID_A2MP) {
7569 chan = a2mp_channel_create(conn, skb);
7570 if (!chan) {
7571 kfree_skb(skb);
7572 return;
7573 }
7574
7575 l2cap_chan_lock(chan);
7576 } else {
7577 BT_DBG("unknown cid 0x%4.4x", cid);
7578
7579 kfree_skb(skb);
7580 return;
7581 }
7582 }
7583
7584 BT_DBG("chan %p, len %d", chan, skb->len);
7585
7586
7587
7588
7589
7590 if (chan->chan_type == L2CAP_CHAN_FIXED)
7591 l2cap_chan_ready(chan);
7592
7593 if (chan->state != BT_CONNECTED)
7594 goto drop;
7595
7596 switch (chan->mode) {
7597 case L2CAP_MODE_LE_FLOWCTL:
7598 case L2CAP_MODE_EXT_FLOWCTL:
7599 if (l2cap_ecred_data_rcv(chan, skb) < 0)
7600 goto drop;
7601
7602 goto done;
7603
7604 case L2CAP_MODE_BASIC:
7605
7606
7607
7608
7609
7610 if (chan->imtu < skb->len) {
7611 BT_ERR("Dropping L2CAP data: receive buffer overflow");
7612 goto drop;
7613 }
7614
7615 if (!chan->ops->recv(chan, skb))
7616 goto done;
7617 break;
7618
7619 case L2CAP_MODE_ERTM:
7620 case L2CAP_MODE_STREAMING:
7621 l2cap_data_rcv(chan, skb);
7622 goto done;
7623
7624 default:
7625 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
7626 break;
7627 }
7628
7629 drop:
7630 kfree_skb(skb);
7631
7632 done:
7633 l2cap_chan_unlock(chan);
7634 l2cap_chan_put(chan);
7635 }
7636
7637 static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
7638 struct sk_buff *skb)
7639 {
7640 struct hci_conn *hcon = conn->hcon;
7641 struct l2cap_chan *chan;
7642
7643 if (hcon->type != ACL_LINK)
7644 goto free_skb;
7645
7646 chan = l2cap_global_chan_by_psm(0, psm, &hcon->src, &hcon->dst,
7647 ACL_LINK);
7648 if (!chan)
7649 goto free_skb;
7650
7651 BT_DBG("chan %p, len %d", chan, skb->len);
7652
7653 if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
7654 goto drop;
7655
7656 if (chan->imtu < skb->len)
7657 goto drop;
7658
7659
7660 bacpy(&bt_cb(skb)->l2cap.bdaddr, &hcon->dst);
7661 bt_cb(skb)->l2cap.psm = psm;
7662
7663 if (!chan->ops->recv(chan, skb)) {
7664 l2cap_chan_put(chan);
7665 return;
7666 }
7667
7668 drop:
7669 l2cap_chan_put(chan);
7670 free_skb:
7671 kfree_skb(skb);
7672 }
7673
7674 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
7675 {
7676 struct l2cap_hdr *lh = (void *) skb->data;
7677 struct hci_conn *hcon = conn->hcon;
7678 u16 cid, len;
7679 __le16 psm;
7680
7681 if (hcon->state != BT_CONNECTED) {
7682 BT_DBG("queueing pending rx skb");
7683 skb_queue_tail(&conn->pending_rx, skb);
7684 return;
7685 }
7686
7687 skb_pull(skb, L2CAP_HDR_SIZE);
7688 cid = __le16_to_cpu(lh->cid);
7689 len = __le16_to_cpu(lh->len);
7690
7691 if (len != skb->len) {
7692 kfree_skb(skb);
7693 return;
7694 }
7695
7696
7697
7698
7699 if (hcon->type == LE_LINK &&
7700 hci_bdaddr_list_lookup(&hcon->hdev->reject_list, &hcon->dst,
7701 bdaddr_dst_type(hcon))) {
7702 kfree_skb(skb);
7703 return;
7704 }
7705
7706 BT_DBG("len %d, cid 0x%4.4x", len, cid);
7707
7708 switch (cid) {
7709 case L2CAP_CID_SIGNALING:
7710 l2cap_sig_channel(conn, skb);
7711 break;
7712
7713 case L2CAP_CID_CONN_LESS:
7714 psm = get_unaligned((__le16 *) skb->data);
7715 skb_pull(skb, L2CAP_PSMLEN_SIZE);
7716 l2cap_conless_channel(conn, psm, skb);
7717 break;
7718
7719 case L2CAP_CID_LE_SIGNALING:
7720 l2cap_le_sig_channel(conn, skb);
7721 break;
7722
7723 default:
7724 l2cap_data_channel(conn, cid, skb);
7725 break;
7726 }
7727 }
7728
7729 static void process_pending_rx(struct work_struct *work)
7730 {
7731 struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
7732 pending_rx_work);
7733 struct sk_buff *skb;
7734
7735 BT_DBG("");
7736
7737 while ((skb = skb_dequeue(&conn->pending_rx)))
7738 l2cap_recv_frame(conn, skb);
7739 }
7740
7741 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
7742 {
7743 struct l2cap_conn *conn = hcon->l2cap_data;
7744 struct hci_chan *hchan;
7745
7746 if (conn)
7747 return conn;
7748
7749 hchan = hci_chan_create(hcon);
7750 if (!hchan)
7751 return NULL;
7752
7753 conn = kzalloc(sizeof(*conn), GFP_KERNEL);
7754 if (!conn) {
7755 hci_chan_del(hchan);
7756 return NULL;
7757 }
7758
7759 kref_init(&conn->ref);
7760 hcon->l2cap_data = conn;
7761 conn->hcon = hci_conn_get(hcon);
7762 conn->hchan = hchan;
7763
7764 BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
7765
7766 switch (hcon->type) {
7767 case LE_LINK:
7768 if (hcon->hdev->le_mtu) {
7769 conn->mtu = hcon->hdev->le_mtu;
7770 break;
7771 }
7772 fallthrough;
7773 default:
7774 conn->mtu = hcon->hdev->acl_mtu;
7775 break;
7776 }
7777
7778 conn->feat_mask = 0;
7779
7780 conn->local_fixed_chan = L2CAP_FC_SIG_BREDR | L2CAP_FC_CONNLESS;
7781
7782 if (hcon->type == ACL_LINK &&
7783 hci_dev_test_flag(hcon->hdev, HCI_HS_ENABLED))
7784 conn->local_fixed_chan |= L2CAP_FC_A2MP;
7785
7786 if (hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED) &&
7787 (bredr_sc_enabled(hcon->hdev) ||
7788 hci_dev_test_flag(hcon->hdev, HCI_FORCE_BREDR_SMP)))
7789 conn->local_fixed_chan |= L2CAP_FC_SMP_BREDR;
7790
7791 mutex_init(&conn->ident_lock);
7792 mutex_init(&conn->chan_lock);
7793
7794 INIT_LIST_HEAD(&conn->chan_l);
7795 INIT_LIST_HEAD(&conn->users);
7796
7797 INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
7798
7799 skb_queue_head_init(&conn->pending_rx);
7800 INIT_WORK(&conn->pending_rx_work, process_pending_rx);
7801 INIT_WORK(&conn->id_addr_update_work, l2cap_conn_update_id_addr);
7802
7803 conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
7804
7805 return conn;
7806 }
7807
7808 static bool is_valid_psm(u16 psm, u8 dst_type)
7809 {
7810 if (!psm)
7811 return false;
7812
7813 if (bdaddr_type_is_le(dst_type))
7814 return (psm <= 0x00ff);
7815
7816
7817 return ((psm & 0x0101) == 0x0001);
7818 }
7819
7820 struct l2cap_chan_data {
7821 struct l2cap_chan *chan;
7822 struct pid *pid;
7823 int count;
7824 };
7825
7826 static void l2cap_chan_by_pid(struct l2cap_chan *chan, void *data)
7827 {
7828 struct l2cap_chan_data *d = data;
7829 struct pid *pid;
7830
7831 if (chan == d->chan)
7832 return;
7833
7834 if (!test_bit(FLAG_DEFER_SETUP, &chan->flags))
7835 return;
7836
7837 pid = chan->ops->get_peer_pid(chan);
7838
7839
7840 if (d->pid != pid || chan->psm != d->chan->psm || chan->ident ||
7841 chan->mode != L2CAP_MODE_EXT_FLOWCTL || chan->state != BT_CONNECT)
7842 return;
7843
7844 d->count++;
7845 }
7846
7847 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
7848 bdaddr_t *dst, u8 dst_type)
7849 {
7850 struct l2cap_conn *conn;
7851 struct hci_conn *hcon;
7852 struct hci_dev *hdev;
7853 int err;
7854
7855 BT_DBG("%pMR -> %pMR (type %u) psm 0x%4.4x mode 0x%2.2x", &chan->src,
7856 dst, dst_type, __le16_to_cpu(psm), chan->mode);
7857
7858 hdev = hci_get_route(dst, &chan->src, chan->src_type);
7859 if (!hdev)
7860 return -EHOSTUNREACH;
7861
7862 hci_dev_lock(hdev);
7863
7864 if (!is_valid_psm(__le16_to_cpu(psm), dst_type) && !cid &&
7865 chan->chan_type != L2CAP_CHAN_RAW) {
7866 err = -EINVAL;
7867 goto done;
7868 }
7869
7870 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !psm) {
7871 err = -EINVAL;
7872 goto done;
7873 }
7874
7875 if (chan->chan_type == L2CAP_CHAN_FIXED && !cid) {
7876 err = -EINVAL;
7877 goto done;
7878 }
7879
7880 switch (chan->mode) {
7881 case L2CAP_MODE_BASIC:
7882 break;
7883 case L2CAP_MODE_LE_FLOWCTL:
7884 break;
7885 case L2CAP_MODE_EXT_FLOWCTL:
7886 if (!enable_ecred) {
7887 err = -EOPNOTSUPP;
7888 goto done;
7889 }
7890 break;
7891 case L2CAP_MODE_ERTM:
7892 case L2CAP_MODE_STREAMING:
7893 if (!disable_ertm)
7894 break;
7895 fallthrough;
7896 default:
7897 err = -EOPNOTSUPP;
7898 goto done;
7899 }
7900
7901 switch (chan->state) {
7902 case BT_CONNECT:
7903 case BT_CONNECT2:
7904 case BT_CONFIG:
7905
7906 err = 0;
7907 goto done;
7908
7909 case BT_CONNECTED:
7910
7911 err = -EISCONN;
7912 goto done;
7913
7914 case BT_OPEN:
7915 case BT_BOUND:
7916
7917 break;
7918
7919 default:
7920 err = -EBADFD;
7921 goto done;
7922 }
7923
7924
7925 bacpy(&chan->dst, dst);
7926 chan->dst_type = dst_type;
7927
7928 chan->psm = psm;
7929 chan->dcid = cid;
7930
7931 if (bdaddr_type_is_le(dst_type)) {
7932
7933
7934 if (dst_type == BDADDR_LE_PUBLIC)
7935 dst_type = ADDR_LE_DEV_PUBLIC;
7936 else
7937 dst_type = ADDR_LE_DEV_RANDOM;
7938
7939 if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
7940 hcon = hci_connect_le(hdev, dst, dst_type, false,
7941 chan->sec_level,
7942 HCI_LE_CONN_TIMEOUT,
7943 HCI_ROLE_SLAVE);
7944 else
7945 hcon = hci_connect_le_scan(hdev, dst, dst_type,
7946 chan->sec_level,
7947 HCI_LE_CONN_TIMEOUT,
7948 CONN_REASON_L2CAP_CHAN);
7949
7950 } else {
7951 u8 auth_type = l2cap_get_auth_type(chan);
7952 hcon = hci_connect_acl(hdev, dst, chan->sec_level, auth_type,
7953 CONN_REASON_L2CAP_CHAN);
7954 }
7955
7956 if (IS_ERR(hcon)) {
7957 err = PTR_ERR(hcon);
7958 goto done;
7959 }
7960
7961 conn = l2cap_conn_add(hcon);
7962 if (!conn) {
7963 hci_conn_drop(hcon);
7964 err = -ENOMEM;
7965 goto done;
7966 }
7967
7968 if (chan->mode == L2CAP_MODE_EXT_FLOWCTL) {
7969 struct l2cap_chan_data data;
7970
7971 data.chan = chan;
7972 data.pid = chan->ops->get_peer_pid(chan);
7973 data.count = 1;
7974
7975 l2cap_chan_list(conn, l2cap_chan_by_pid, &data);
7976
7977
7978 if (data.count > L2CAP_ECRED_CONN_SCID_MAX) {
7979 hci_conn_drop(hcon);
7980 err = -EPROTO;
7981 goto done;
7982 }
7983 }
7984
7985 mutex_lock(&conn->chan_lock);
7986 l2cap_chan_lock(chan);
7987
7988 if (cid && __l2cap_get_chan_by_dcid(conn, cid)) {
7989 hci_conn_drop(hcon);
7990 err = -EBUSY;
7991 goto chan_unlock;
7992 }
7993
7994
7995 bacpy(&chan->src, &hcon->src);
7996 chan->src_type = bdaddr_src_type(hcon);
7997
7998 __l2cap_chan_add(conn, chan);
7999
8000
8001 hci_conn_drop(hcon);
8002
8003 l2cap_state_change(chan, BT_CONNECT);
8004 __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
8005
8006
8007
8008
8009 write_lock(&chan_list_lock);
8010 chan->sport = 0;
8011 write_unlock(&chan_list_lock);
8012
8013 if (hcon->state == BT_CONNECTED) {
8014 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
8015 __clear_chan_timer(chan);
8016 if (l2cap_chan_check_security(chan, true))
8017 l2cap_state_change(chan, BT_CONNECTED);
8018 } else
8019 l2cap_do_start(chan);
8020 }
8021
8022 err = 0;
8023
8024 chan_unlock:
8025 l2cap_chan_unlock(chan);
8026 mutex_unlock(&conn->chan_lock);
8027 done:
8028 hci_dev_unlock(hdev);
8029 hci_dev_put(hdev);
8030 return err;
8031 }
8032 EXPORT_SYMBOL_GPL(l2cap_chan_connect);
8033
8034 static void l2cap_ecred_reconfigure(struct l2cap_chan *chan)
8035 {
8036 struct l2cap_conn *conn = chan->conn;
8037 struct {
8038 struct l2cap_ecred_reconf_req req;
8039 __le16 scid;
8040 } pdu;
8041
8042 pdu.req.mtu = cpu_to_le16(chan->imtu);
8043 pdu.req.mps = cpu_to_le16(chan->mps);
8044 pdu.scid = cpu_to_le16(chan->scid);
8045
8046 chan->ident = l2cap_get_ident(conn);
8047
8048 l2cap_send_cmd(conn, chan->ident, L2CAP_ECRED_RECONF_REQ,
8049 sizeof(pdu), &pdu);
8050 }
8051
8052 int l2cap_chan_reconfigure(struct l2cap_chan *chan, __u16 mtu)
8053 {
8054 if (chan->imtu > mtu)
8055 return -EINVAL;
8056
8057 BT_DBG("chan %p mtu 0x%4.4x", chan, mtu);
8058
8059 chan->imtu = mtu;
8060
8061 l2cap_ecred_reconfigure(chan);
8062
8063 return 0;
8064 }
8065
8066
8067
8068 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
8069 {
8070 int exact = 0, lm1 = 0, lm2 = 0;
8071 struct l2cap_chan *c;
8072
8073 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
8074
8075
8076 read_lock(&chan_list_lock);
8077 list_for_each_entry(c, &chan_list, global_l) {
8078 if (c->state != BT_LISTEN)
8079 continue;
8080
8081 if (!bacmp(&c->src, &hdev->bdaddr)) {
8082 lm1 |= HCI_LM_ACCEPT;
8083 if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
8084 lm1 |= HCI_LM_MASTER;
8085 exact++;
8086 } else if (!bacmp(&c->src, BDADDR_ANY)) {
8087 lm2 |= HCI_LM_ACCEPT;
8088 if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
8089 lm2 |= HCI_LM_MASTER;
8090 }
8091 }
8092 read_unlock(&chan_list_lock);
8093
8094 return exact ? lm1 : lm2;
8095 }
8096
8097
8098
8099
8100
8101 static struct l2cap_chan *l2cap_global_fixed_chan(struct l2cap_chan *c,
8102 struct hci_conn *hcon)
8103 {
8104 u8 src_type = bdaddr_src_type(hcon);
8105
8106 read_lock(&chan_list_lock);
8107
8108 if (c)
8109 c = list_next_entry(c, global_l);
8110 else
8111 c = list_entry(chan_list.next, typeof(*c), global_l);
8112
8113 list_for_each_entry_from(c, &chan_list, global_l) {
8114 if (c->chan_type != L2CAP_CHAN_FIXED)
8115 continue;
8116 if (c->state != BT_LISTEN)
8117 continue;
8118 if (bacmp(&c->src, &hcon->src) && bacmp(&c->src, BDADDR_ANY))
8119 continue;
8120 if (src_type != c->src_type)
8121 continue;
8122
8123 c = l2cap_chan_hold_unless_zero(c);
8124 read_unlock(&chan_list_lock);
8125 return c;
8126 }
8127
8128 read_unlock(&chan_list_lock);
8129
8130 return NULL;
8131 }
8132
8133 static void l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
8134 {
8135 struct hci_dev *hdev = hcon->hdev;
8136 struct l2cap_conn *conn;
8137 struct l2cap_chan *pchan;
8138 u8 dst_type;
8139
8140 if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
8141 return;
8142
8143 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
8144
8145 if (status) {
8146 l2cap_conn_del(hcon, bt_to_errno(status));
8147 return;
8148 }
8149
8150 conn = l2cap_conn_add(hcon);
8151 if (!conn)
8152 return;
8153
8154 dst_type = bdaddr_dst_type(hcon);
8155
8156
8157 if (hci_bdaddr_list_lookup(&hdev->reject_list, &hcon->dst, dst_type))
8158 return;
8159
8160
8161
8162
8163
8164
8165 pchan = l2cap_global_fixed_chan(NULL, hcon);
8166 while (pchan) {
8167 struct l2cap_chan *chan, *next;
8168
8169
8170 if (__l2cap_get_chan_by_dcid(conn, pchan->scid))
8171 goto next;
8172
8173 l2cap_chan_lock(pchan);
8174 chan = pchan->ops->new_connection(pchan);
8175 if (chan) {
8176 bacpy(&chan->src, &hcon->src);
8177 bacpy(&chan->dst, &hcon->dst);
8178 chan->src_type = bdaddr_src_type(hcon);
8179 chan->dst_type = dst_type;
8180
8181 __l2cap_chan_add(conn, chan);
8182 }
8183
8184 l2cap_chan_unlock(pchan);
8185 next:
8186 next = l2cap_global_fixed_chan(pchan, hcon);
8187 l2cap_chan_put(pchan);
8188 pchan = next;
8189 }
8190
8191 l2cap_conn_ready(conn);
8192 }
8193
8194 int l2cap_disconn_ind(struct hci_conn *hcon)
8195 {
8196 struct l2cap_conn *conn = hcon->l2cap_data;
8197
8198 BT_DBG("hcon %p", hcon);
8199
8200 if (!conn)
8201 return HCI_ERROR_REMOTE_USER_TERM;
8202 return conn->disc_reason;
8203 }
8204
8205 static void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
8206 {
8207 if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
8208 return;
8209
8210 BT_DBG("hcon %p reason %d", hcon, reason);
8211
8212 l2cap_conn_del(hcon, bt_to_errno(reason));
8213 }
8214
8215 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
8216 {
8217 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
8218 return;
8219
8220 if (encrypt == 0x00) {
8221 if (chan->sec_level == BT_SECURITY_MEDIUM) {
8222 __set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
8223 } else if (chan->sec_level == BT_SECURITY_HIGH ||
8224 chan->sec_level == BT_SECURITY_FIPS)
8225 l2cap_chan_close(chan, ECONNREFUSED);
8226 } else {
8227 if (chan->sec_level == BT_SECURITY_MEDIUM)
8228 __clear_chan_timer(chan);
8229 }
8230 }
8231
8232 static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
8233 {
8234 struct l2cap_conn *conn = hcon->l2cap_data;
8235 struct l2cap_chan *chan;
8236
8237 if (!conn)
8238 return;
8239
8240 BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt);
8241
8242 mutex_lock(&conn->chan_lock);
8243
8244 list_for_each_entry(chan, &conn->chan_l, list) {
8245 l2cap_chan_lock(chan);
8246
8247 BT_DBG("chan %p scid 0x%4.4x state %s", chan, chan->scid,
8248 state_to_string(chan->state));
8249
8250 if (chan->scid == L2CAP_CID_A2MP) {
8251 l2cap_chan_unlock(chan);
8252 continue;
8253 }
8254
8255 if (!status && encrypt)
8256 chan->sec_level = hcon->sec_level;
8257
8258 if (!__l2cap_no_conn_pending(chan)) {
8259 l2cap_chan_unlock(chan);
8260 continue;
8261 }
8262
8263 if (!status && (chan->state == BT_CONNECTED ||
8264 chan->state == BT_CONFIG)) {
8265 chan->ops->resume(chan);
8266 l2cap_check_encryption(chan, encrypt);
8267 l2cap_chan_unlock(chan);
8268 continue;
8269 }
8270
8271 if (chan->state == BT_CONNECT) {
8272 if (!status && l2cap_check_enc_key_size(hcon))
8273 l2cap_start_connection(chan);
8274 else
8275 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
8276 } else if (chan->state == BT_CONNECT2 &&
8277 !(chan->mode == L2CAP_MODE_EXT_FLOWCTL ||
8278 chan->mode == L2CAP_MODE_LE_FLOWCTL)) {
8279 struct l2cap_conn_rsp rsp;
8280 __u16 res, stat;
8281
8282 if (!status && l2cap_check_enc_key_size(hcon)) {
8283 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
8284 res = L2CAP_CR_PEND;
8285 stat = L2CAP_CS_AUTHOR_PEND;
8286 chan->ops->defer(chan);
8287 } else {
8288 l2cap_state_change(chan, BT_CONFIG);
8289 res = L2CAP_CR_SUCCESS;
8290 stat = L2CAP_CS_NO_INFO;
8291 }
8292 } else {
8293 l2cap_state_change(chan, BT_DISCONN);
8294 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
8295 res = L2CAP_CR_SEC_BLOCK;
8296 stat = L2CAP_CS_NO_INFO;
8297 }
8298
8299 rsp.scid = cpu_to_le16(chan->dcid);
8300 rsp.dcid = cpu_to_le16(chan->scid);
8301 rsp.result = cpu_to_le16(res);
8302 rsp.status = cpu_to_le16(stat);
8303 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
8304 sizeof(rsp), &rsp);
8305
8306 if (!test_bit(CONF_REQ_SENT, &chan->conf_state) &&
8307 res == L2CAP_CR_SUCCESS) {
8308 char buf[128];
8309 set_bit(CONF_REQ_SENT, &chan->conf_state);
8310 l2cap_send_cmd(conn, l2cap_get_ident(conn),
8311 L2CAP_CONF_REQ,
8312 l2cap_build_conf_req(chan, buf, sizeof(buf)),
8313 buf);
8314 chan->num_conf_req++;
8315 }
8316 }
8317
8318 l2cap_chan_unlock(chan);
8319 }
8320
8321 mutex_unlock(&conn->chan_lock);
8322 }
8323
8324
8325 static int l2cap_recv_frag(struct l2cap_conn *conn, struct sk_buff *skb,
8326 u16 len)
8327 {
8328 if (!conn->rx_skb) {
8329
8330 conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL);
8331 if (!conn->rx_skb)
8332 return -ENOMEM;
8333
8334 conn->rx_len = len;
8335 }
8336
8337
8338 len = min_t(u16, len, skb->len);
8339 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, len), len);
8340 skb_pull(skb, len);
8341 conn->rx_len -= len;
8342
8343 return len;
8344 }
8345
8346 static int l2cap_recv_len(struct l2cap_conn *conn, struct sk_buff *skb)
8347 {
8348 struct sk_buff *rx_skb;
8349 int len;
8350
8351
8352 len = l2cap_recv_frag(conn, skb, L2CAP_LEN_SIZE - conn->rx_skb->len);
8353
8354
8355 if (len < 0 || conn->rx_skb->len < L2CAP_LEN_SIZE)
8356 return len;
8357
8358 rx_skb = conn->rx_skb;
8359 len = get_unaligned_le16(rx_skb->data);
8360
8361
8362 if (len + (L2CAP_HDR_SIZE - L2CAP_LEN_SIZE) <= skb_tailroom(rx_skb)) {
8363
8364 conn->rx_len = len + (L2CAP_HDR_SIZE - L2CAP_LEN_SIZE);
8365 return L2CAP_LEN_SIZE;
8366 }
8367
8368
8369
8370
8371 conn->rx_skb = NULL;
8372
8373
8374 len = l2cap_recv_frag(conn, rx_skb,
8375 len + (L2CAP_HDR_SIZE - L2CAP_LEN_SIZE));
8376 kfree_skb(rx_skb);
8377
8378 return len;
8379 }
8380
8381 static void l2cap_recv_reset(struct l2cap_conn *conn)
8382 {
8383 kfree_skb(conn->rx_skb);
8384 conn->rx_skb = NULL;
8385 conn->rx_len = 0;
8386 }
8387
8388 void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
8389 {
8390 struct l2cap_conn *conn = hcon->l2cap_data;
8391 int len;
8392
8393
8394 if (!conn && hcon->hdev->dev_type != HCI_PRIMARY)
8395 goto drop;
8396
8397 if (!conn)
8398 conn = l2cap_conn_add(hcon);
8399
8400 if (!conn)
8401 goto drop;
8402
8403 BT_DBG("conn %p len %u flags 0x%x", conn, skb->len, flags);
8404
8405 switch (flags) {
8406 case ACL_START:
8407 case ACL_START_NO_FLUSH:
8408 case ACL_COMPLETE:
8409 if (conn->rx_skb) {
8410 BT_ERR("Unexpected start frame (len %d)", skb->len);
8411 l2cap_recv_reset(conn);
8412 l2cap_conn_unreliable(conn, ECOMM);
8413 }
8414
8415
8416
8417
8418
8419 if (skb->len < L2CAP_LEN_SIZE) {
8420 if (l2cap_recv_frag(conn, skb, conn->mtu) < 0)
8421 goto drop;
8422 return;
8423 }
8424
8425 len = get_unaligned_le16(skb->data) + L2CAP_HDR_SIZE;
8426
8427 if (len == skb->len) {
8428
8429 l2cap_recv_frame(conn, skb);
8430 return;
8431 }
8432
8433 BT_DBG("Start: total len %d, frag len %u", len, skb->len);
8434
8435 if (skb->len > len) {
8436 BT_ERR("Frame is too long (len %u, expected len %d)",
8437 skb->len, len);
8438 l2cap_conn_unreliable(conn, ECOMM);
8439 goto drop;
8440 }
8441
8442
8443 if (l2cap_recv_frag(conn, skb, len) < 0)
8444 goto drop;
8445
8446 break;
8447
8448 case ACL_CONT:
8449 BT_DBG("Cont: frag len %u (expecting %u)", skb->len, conn->rx_len);
8450
8451 if (!conn->rx_skb) {
8452 BT_ERR("Unexpected continuation frame (len %d)", skb->len);
8453 l2cap_conn_unreliable(conn, ECOMM);
8454 goto drop;
8455 }
8456
8457
8458 if (conn->rx_skb->len < L2CAP_LEN_SIZE) {
8459 if (l2cap_recv_len(conn, skb) < 0) {
8460 l2cap_conn_unreliable(conn, ECOMM);
8461 goto drop;
8462 }
8463
8464
8465 if (conn->rx_skb->len < L2CAP_LEN_SIZE)
8466 return;
8467 }
8468
8469 if (skb->len > conn->rx_len) {
8470 BT_ERR("Fragment is too long (len %u, expected %u)",
8471 skb->len, conn->rx_len);
8472 l2cap_recv_reset(conn);
8473 l2cap_conn_unreliable(conn, ECOMM);
8474 goto drop;
8475 }
8476
8477
8478 l2cap_recv_frag(conn, skb, skb->len);
8479
8480 if (!conn->rx_len) {
8481
8482
8483
8484
8485 struct sk_buff *rx_skb = conn->rx_skb;
8486 conn->rx_skb = NULL;
8487 l2cap_recv_frame(conn, rx_skb);
8488 }
8489 break;
8490 }
8491
8492 drop:
8493 kfree_skb(skb);
8494 }
8495
8496 static struct hci_cb l2cap_cb = {
8497 .name = "L2CAP",
8498 .connect_cfm = l2cap_connect_cfm,
8499 .disconn_cfm = l2cap_disconn_cfm,
8500 .security_cfm = l2cap_security_cfm,
8501 };
8502
8503 static int l2cap_debugfs_show(struct seq_file *f, void *p)
8504 {
8505 struct l2cap_chan *c;
8506
8507 read_lock(&chan_list_lock);
8508
8509 list_for_each_entry(c, &chan_list, global_l) {
8510 seq_printf(f, "%pMR (%u) %pMR (%u) %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
8511 &c->src, c->src_type, &c->dst, c->dst_type,
8512 c->state, __le16_to_cpu(c->psm),
8513 c->scid, c->dcid, c->imtu, c->omtu,
8514 c->sec_level, c->mode);
8515 }
8516
8517 read_unlock(&chan_list_lock);
8518
8519 return 0;
8520 }
8521
8522 DEFINE_SHOW_ATTRIBUTE(l2cap_debugfs);
8523
8524 static struct dentry *l2cap_debugfs;
8525
8526 int __init l2cap_init(void)
8527 {
8528 int err;
8529
8530 err = l2cap_init_sockets();
8531 if (err < 0)
8532 return err;
8533
8534 hci_register_cb(&l2cap_cb);
8535
8536 if (IS_ERR_OR_NULL(bt_debugfs))
8537 return 0;
8538
8539 l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs,
8540 NULL, &l2cap_debugfs_fops);
8541
8542 return 0;
8543 }
8544
8545 void l2cap_exit(void)
8546 {
8547 debugfs_remove(l2cap_debugfs);
8548 hci_unregister_cb(&l2cap_cb);
8549 l2cap_cleanup_sockets();
8550 }
8551
8552 module_param(disable_ertm, bool, 0644);
8553 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
8554
8555 module_param(enable_ecred, bool, 0644);
8556 MODULE_PARM_DESC(enable_ecred, "Enable enhanced credit flow control mode");