linux/net/bluetooth/l2cap_core.c
<<
>>
Prefs
   1/*
   2   BlueZ - Bluetooth protocol stack for Linux
   3   Copyright (C) 2000-2001 Qualcomm Incorporated
   4   Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
   5   Copyright (C) 2010 Google Inc.
   6   Copyright (C) 2011 ProFUSION Embedded Systems
   7   Copyright (c) 2012 Code Aurora Forum.  All rights reserved.
   8
   9   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
  10
  11   This program is free software; you can redistribute it and/or modify
  12   it under the terms of the GNU General Public License version 2 as
  13   published by the Free Software Foundation;
  14
  15   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  16   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
  18   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
  19   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
  20   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  21   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  22   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  23
  24   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
  25   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
  26   SOFTWARE IS DISCLAIMED.
  27*/
  28
  29/* Bluetooth L2CAP core. */
  30
  31#include <linux/module.h>
  32
  33#include <linux/debugfs.h>
  34#include <linux/crc16.h>
  35#include <linux/filter.h>
  36
  37#include <net/bluetooth/bluetooth.h>
  38#include <net/bluetooth/hci_core.h>
  39#include <net/bluetooth/l2cap.h>
  40
  41#include "smp.h"
  42#include "a2mp.h"
  43#include "amp.h"
  44
  45#define LE_FLOWCTL_MAX_CREDITS 65535
  46
  47bool disable_ertm;
  48bool enable_ecred;
  49
  50static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN | L2CAP_FEAT_UCD;
  51
  52static LIST_HEAD(chan_list);
  53static DEFINE_RWLOCK(chan_list_lock);
  54
  55static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
  56                                       u8 code, u8 ident, u16 dlen, void *data);
  57static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
  58                           void *data);
  59static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size);
  60static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err);
  61
  62static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
  63                     struct sk_buff_head *skbs, u8 event);
  64
  65static inline u8 bdaddr_type(u8 link_type, u8 bdaddr_type)
  66{
  67        if (link_type == LE_LINK) {
  68                if (bdaddr_type == ADDR_LE_DEV_PUBLIC)
  69                        return BDADDR_LE_PUBLIC;
  70                else
  71                        return BDADDR_LE_RANDOM;
  72        }
  73
  74        return BDADDR_BREDR;
  75}
  76
  77static inline u8 bdaddr_src_type(struct hci_conn *hcon)
  78{
  79        return bdaddr_type(hcon->type, hcon->src_type);
  80}
  81
  82static inline u8 bdaddr_dst_type(struct hci_conn *hcon)
  83{
  84        return bdaddr_type(hcon->type, hcon->dst_type);
  85}
  86
  87/* ---- L2CAP channels ---- */
  88
  89static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
  90                                                   u16 cid)
  91{
  92        struct l2cap_chan *c;
  93
  94        list_for_each_entry(c, &conn->chan_l, list) {
  95                if (c->dcid == cid)
  96                        return c;
  97        }
  98        return NULL;
  99}
 100
 101static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn,
 102                                                   u16 cid)
 103{
 104        struct l2cap_chan *c;
 105
 106        list_for_each_entry(c, &conn->chan_l, list) {
 107                if (c->scid == cid)
 108                        return c;
 109        }
 110        return NULL;
 111}
 112
 113/* Find channel with given SCID.
 114 * Returns locked channel. */
 115static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn,
 116                                                 u16 cid)
 117{
 118        struct l2cap_chan *c;
 119
 120        mutex_lock(&conn->chan_lock);
 121        c = __l2cap_get_chan_by_scid(conn, cid);
 122        if (c)
 123                l2cap_chan_lock(c);
 124        mutex_unlock(&conn->chan_lock);
 125
 126        return c;
 127}
 128
 129/* Find channel with given DCID.
 130 * Returns locked channel.
 131 */
 132static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
 133                                                 u16 cid)
 134{
 135        struct l2cap_chan *c;
 136
 137        mutex_lock(&conn->chan_lock);
 138        c = __l2cap_get_chan_by_dcid(conn, cid);
 139        if (c)
 140                l2cap_chan_lock(c);
 141        mutex_unlock(&conn->chan_lock);
 142
 143        return c;
 144}
 145
 146static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn,
 147                                                    u8 ident)
 148{
 149        struct l2cap_chan *c;
 150
 151        list_for_each_entry(c, &conn->chan_l, list) {
 152                if (c->ident == ident)
 153                        return c;
 154        }
 155        return NULL;
 156}
 157
 158static struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn,
 159                                                  u8 ident)
 160{
 161        struct l2cap_chan *c;
 162
 163        mutex_lock(&conn->chan_lock);
 164        c = __l2cap_get_chan_by_ident(conn, ident);
 165        if (c)
 166                l2cap_chan_lock(c);
 167        mutex_unlock(&conn->chan_lock);
 168
 169        return c;
 170}
 171
 172static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src,
 173                                                      u8 src_type)
 174{
 175        struct l2cap_chan *c;
 176
 177        list_for_each_entry(c, &chan_list, global_l) {
 178                if (src_type == BDADDR_BREDR && c->src_type != BDADDR_BREDR)
 179                        continue;
 180
 181                if (src_type != BDADDR_BREDR && c->src_type == BDADDR_BREDR)
 182                        continue;
 183
 184                if (c->sport == psm && !bacmp(&c->src, src))
 185                        return c;
 186        }
 187        return NULL;
 188}
 189
 190int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
 191{
 192        int err;
 193
 194        write_lock(&chan_list_lock);
 195
 196        if (psm && __l2cap_global_chan_by_addr(psm, src, chan->src_type)) {
 197                err = -EADDRINUSE;
 198                goto done;
 199        }
 200
 201        if (psm) {
 202                chan->psm = psm;
 203                chan->sport = psm;
 204                err = 0;
 205        } else {
 206                u16 p, start, end, incr;
 207
 208                if (chan->src_type == BDADDR_BREDR) {
 209                        start = L2CAP_PSM_DYN_START;
 210                        end = L2CAP_PSM_AUTO_END;
 211                        incr = 2;
 212                } else {
 213                        start = L2CAP_PSM_LE_DYN_START;
 214                        end = L2CAP_PSM_LE_DYN_END;
 215                        incr = 1;
 216                }
 217
 218                err = -EINVAL;
 219                for (p = start; p <= end; p += incr)
 220                        if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src,
 221                                                         chan->src_type)) {
 222                                chan->psm   = cpu_to_le16(p);
 223                                chan->sport = cpu_to_le16(p);
 224                                err = 0;
 225                                break;
 226                        }
 227        }
 228
 229done:
 230        write_unlock(&chan_list_lock);
 231        return err;
 232}
 233EXPORT_SYMBOL_GPL(l2cap_add_psm);
 234
 235int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
 236{
 237        write_lock(&chan_list_lock);
 238
 239        /* Override the defaults (which are for conn-oriented) */
 240        chan->omtu = L2CAP_DEFAULT_MTU;
 241        chan->chan_type = L2CAP_CHAN_FIXED;
 242
 243        chan->scid = scid;
 244
 245        write_unlock(&chan_list_lock);
 246
 247        return 0;
 248}
 249
 250static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
 251{
 252        u16 cid, dyn_end;
 253
 254        if (conn->hcon->type == LE_LINK)
 255                dyn_end = L2CAP_CID_LE_DYN_END;
 256        else
 257                dyn_end = L2CAP_CID_DYN_END;
 258
 259        for (cid = L2CAP_CID_DYN_START; cid <= dyn_end; cid++) {
 260                if (!__l2cap_get_chan_by_scid(conn, cid))
 261                        return cid;
 262        }
 263
 264        return 0;
 265}
 266
 267static void l2cap_state_change(struct l2cap_chan *chan, int state)
 268{
 269        BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
 270               state_to_string(state));
 271
 272        chan->state = state;
 273        chan->ops->state_change(chan, state, 0);
 274}
 275
 276static inline void l2cap_state_change_and_error(struct l2cap_chan *chan,
 277                                                int state, int err)
 278{
 279        chan->state = state;
 280        chan->ops->state_change(chan, chan->state, err);
 281}
 282
 283static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
 284{
 285        chan->ops->state_change(chan, chan->state, err);
 286}
 287
 288static void __set_retrans_timer(struct l2cap_chan *chan)
 289{
 290        if (!delayed_work_pending(&chan->monitor_timer) &&
 291            chan->retrans_timeout) {
 292                l2cap_set_timer(chan, &chan->retrans_timer,
 293                                msecs_to_jiffies(chan->retrans_timeout));
 294        }
 295}
 296
 297static void __set_monitor_timer(struct l2cap_chan *chan)
 298{
 299        __clear_retrans_timer(chan);
 300        if (chan->monitor_timeout) {
 301                l2cap_set_timer(chan, &chan->monitor_timer,
 302                                msecs_to_jiffies(chan->monitor_timeout));
 303        }
 304}
 305
 306static struct sk_buff *l2cap_ertm_seq_in_queue(struct sk_buff_head *head,
 307                                               u16 seq)
 308{
 309        struct sk_buff *skb;
 310
 311        skb_queue_walk(head, skb) {
 312                if (bt_cb(skb)->l2cap.txseq == seq)
 313                        return skb;
 314        }
 315
 316        return NULL;
 317}
 318
 319/* ---- L2CAP sequence number lists ---- */
 320
 321/* For ERTM, ordered lists of sequence numbers must be tracked for
 322 * SREJ requests that are received and for frames that are to be
 323 * retransmitted. These seq_list functions implement a singly-linked
 324 * list in an array, where membership in the list can also be checked
 325 * in constant time. Items can also be added to the tail of the list
 326 * and removed from the head in constant time, without further memory
 327 * allocs or frees.
 328 */
 329
 330static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size)
 331{
 332        size_t alloc_size, i;
 333
 334        /* Allocated size is a power of 2 to map sequence numbers
 335         * (which may be up to 14 bits) in to a smaller array that is
 336         * sized for the negotiated ERTM transmit windows.
 337         */
 338        alloc_size = roundup_pow_of_two(size);
 339
 340        seq_list->list = kmalloc_array(alloc_size, sizeof(u16), GFP_KERNEL);
 341        if (!seq_list->list)
 342                return -ENOMEM;
 343
 344        seq_list->mask = alloc_size - 1;
 345        seq_list->head = L2CAP_SEQ_LIST_CLEAR;
 346        seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
 347        for (i = 0; i < alloc_size; i++)
 348                seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
 349
 350        return 0;
 351}
 352
 353static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list)
 354{
 355        kfree(seq_list->list);
 356}
 357
 358static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list,
 359                                           u16 seq)
 360{
 361        /* Constant-time check for list membership */
 362        return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR;
 363}
 364
 365static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list)
 366{
 367        u16 seq = seq_list->head;
 368        u16 mask = seq_list->mask;
 369
 370        seq_list->head = seq_list->list[seq & mask];
 371        seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
 372
 373        if (seq_list->head == L2CAP_SEQ_LIST_TAIL) {
 374                seq_list->head = L2CAP_SEQ_LIST_CLEAR;
 375                seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
 376        }
 377
 378        return seq;
 379}
 380
 381static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list)
 382{
 383        u16 i;
 384
 385        if (seq_list->head == L2CAP_SEQ_LIST_CLEAR)
 386                return;
 387
 388        for (i = 0; i <= seq_list->mask; i++)
 389                seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
 390
 391        seq_list->head = L2CAP_SEQ_LIST_CLEAR;
 392        seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
 393}
 394
 395static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq)
 396{
 397        u16 mask = seq_list->mask;
 398
 399        /* All appends happen in constant time */
 400
 401        if (seq_list->list[seq & mask] != L2CAP_SEQ_LIST_CLEAR)
 402                return;
 403
 404        if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR)
 405                seq_list->head = seq;
 406        else
 407                seq_list->list[seq_list->tail & mask] = seq;
 408
 409        seq_list->tail = seq;
 410        seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL;
 411}
 412
 413static void l2cap_chan_timeout(struct work_struct *work)
 414{
 415        struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
 416                                               chan_timer.work);
 417        struct l2cap_conn *conn = chan->conn;
 418        int reason;
 419
 420        BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
 421
 422        mutex_lock(&conn->chan_lock);
 423        /* __set_chan_timer() calls l2cap_chan_hold(chan) while scheduling
 424         * this work. No need to call l2cap_chan_hold(chan) here again.
 425         */
 426        l2cap_chan_lock(chan);
 427
 428        if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
 429                reason = ECONNREFUSED;
 430        else if (chan->state == BT_CONNECT &&
 431                 chan->sec_level != BT_SECURITY_SDP)
 432                reason = ECONNREFUSED;
 433        else
 434                reason = ETIMEDOUT;
 435
 436        l2cap_chan_close(chan, reason);
 437
 438        chan->ops->close(chan);
 439
 440        l2cap_chan_unlock(chan);
 441        l2cap_chan_put(chan);
 442
 443        mutex_unlock(&conn->chan_lock);
 444}
 445
 446struct l2cap_chan *l2cap_chan_create(void)
 447{
 448        struct l2cap_chan *chan;
 449
 450        chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
 451        if (!chan)
 452                return NULL;
 453
 454        mutex_init(&chan->lock);
 455
 456        /* Set default lock nesting level */
 457        atomic_set(&chan->nesting, L2CAP_NESTING_NORMAL);
 458
 459        write_lock(&chan_list_lock);
 460        list_add(&chan->global_l, &chan_list);
 461        write_unlock(&chan_list_lock);
 462
 463        INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
 464
 465        chan->state = BT_OPEN;
 466
 467        kref_init(&chan->kref);
 468
 469        /* This flag is cleared in l2cap_chan_ready() */
 470        set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
 471
 472        BT_DBG("chan %p", chan);
 473
 474        return chan;
 475}
 476EXPORT_SYMBOL_GPL(l2cap_chan_create);
 477
 478static void l2cap_chan_destroy(struct kref *kref)
 479{
 480        struct l2cap_chan *chan = container_of(kref, struct l2cap_chan, kref);
 481
 482        BT_DBG("chan %p", chan);
 483
 484        write_lock(&chan_list_lock);
 485        list_del(&chan->global_l);
 486        write_unlock(&chan_list_lock);
 487
 488        kfree(chan);
 489}
 490
 491void l2cap_chan_hold(struct l2cap_chan *c)
 492{
 493        BT_DBG("chan %p orig refcnt %d", c, kref_read(&c->kref));
 494
 495        kref_get(&c->kref);
 496}
 497
 498void l2cap_chan_put(struct l2cap_chan *c)
 499{
 500        BT_DBG("chan %p orig refcnt %d", c, kref_read(&c->kref));
 501
 502        kref_put(&c->kref, l2cap_chan_destroy);
 503}
 504EXPORT_SYMBOL_GPL(l2cap_chan_put);
 505
 506void l2cap_chan_set_defaults(struct l2cap_chan *chan)
 507{
 508        chan->fcs  = L2CAP_FCS_CRC16;
 509        chan->max_tx = L2CAP_DEFAULT_MAX_TX;
 510        chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
 511        chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
 512        chan->remote_max_tx = chan->max_tx;
 513        chan->remote_tx_win = chan->tx_win;
 514        chan->ack_win = L2CAP_DEFAULT_TX_WINDOW;
 515        chan->sec_level = BT_SECURITY_LOW;
 516        chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
 517        chan->retrans_timeout = L2CAP_DEFAULT_RETRANS_TO;
 518        chan->monitor_timeout = L2CAP_DEFAULT_MONITOR_TO;
 519        chan->conf_state = 0;
 520
 521        set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
 522}
 523EXPORT_SYMBOL_GPL(l2cap_chan_set_defaults);
 524
 525static void l2cap_le_flowctl_init(struct l2cap_chan *chan, u16 tx_credits)
 526{
 527        chan->sdu = NULL;
 528        chan->sdu_last_frag = NULL;
 529        chan->sdu_len = 0;
 530        chan->tx_credits = tx_credits;
 531        /* Derive MPS from connection MTU to stop HCI fragmentation */
 532        chan->mps = min_t(u16, chan->imtu, chan->conn->mtu - L2CAP_HDR_SIZE);
 533        /* Give enough credits for a full packet */
 534        chan->rx_credits = (chan->imtu / chan->mps) + 1;
 535
 536        skb_queue_head_init(&chan->tx_q);
 537}
 538
 539static void l2cap_ecred_init(struct l2cap_chan *chan, u16 tx_credits)
 540{
 541        l2cap_le_flowctl_init(chan, tx_credits);
 542
 543        /* L2CAP implementations shall support a minimum MPS of 64 octets */
 544        if (chan->mps < L2CAP_ECRED_MIN_MPS) {
 545                chan->mps = L2CAP_ECRED_MIN_MPS;
 546                chan->rx_credits = (chan->imtu / chan->mps) + 1;
 547        }
 548}
 549
 550void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
 551{
 552        BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
 553               __le16_to_cpu(chan->psm), chan->dcid);
 554
 555        conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
 556
 557        chan->conn = conn;
 558
 559        switch (chan->chan_type) {
 560        case L2CAP_CHAN_CONN_ORIENTED:
 561                /* Alloc CID for connection-oriented socket */
 562                chan->scid = l2cap_alloc_cid(conn);
 563                if (conn->hcon->type == ACL_LINK)
 564                        chan->omtu = L2CAP_DEFAULT_MTU;
 565                break;
 566
 567        case L2CAP_CHAN_CONN_LESS:
 568                /* Connectionless socket */
 569                chan->scid = L2CAP_CID_CONN_LESS;
 570                chan->dcid = L2CAP_CID_CONN_LESS;
 571                chan->omtu = L2CAP_DEFAULT_MTU;
 572                break;
 573
 574        case L2CAP_CHAN_FIXED:
 575                /* Caller will set CID and CID specific MTU values */
 576                break;
 577
 578        default:
 579                /* Raw socket can send/recv signalling messages only */
 580                chan->scid = L2CAP_CID_SIGNALING;
 581                chan->dcid = L2CAP_CID_SIGNALING;
 582                chan->omtu = L2CAP_DEFAULT_MTU;
 583        }
 584
 585        chan->local_id          = L2CAP_BESTEFFORT_ID;
 586        chan->local_stype       = L2CAP_SERV_BESTEFFORT;
 587        chan->local_msdu        = L2CAP_DEFAULT_MAX_SDU_SIZE;
 588        chan->local_sdu_itime   = L2CAP_DEFAULT_SDU_ITIME;
 589        chan->local_acc_lat     = L2CAP_DEFAULT_ACC_LAT;
 590        chan->local_flush_to    = L2CAP_EFS_DEFAULT_FLUSH_TO;
 591
 592        l2cap_chan_hold(chan);
 593
 594        /* Only keep a reference for fixed channels if they requested it */
 595        if (chan->chan_type != L2CAP_CHAN_FIXED ||
 596            test_bit(FLAG_HOLD_HCI_CONN, &chan->flags))
 597                hci_conn_hold(conn->hcon);
 598
 599        list_add(&chan->list, &conn->chan_l);
 600}
 601
 602void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
 603{
 604        mutex_lock(&conn->chan_lock);
 605        __l2cap_chan_add(conn, chan);
 606        mutex_unlock(&conn->chan_lock);
 607}
 608
 609void l2cap_chan_del(struct l2cap_chan *chan, int err)
 610{
 611        struct l2cap_conn *conn = chan->conn;
 612
 613        __clear_chan_timer(chan);
 614
 615        BT_DBG("chan %p, conn %p, err %d, state %s", chan, conn, err,
 616               state_to_string(chan->state));
 617
 618        chan->ops->teardown(chan, err);
 619
 620        if (conn) {
 621                struct amp_mgr *mgr = conn->hcon->amp_mgr;
 622                /* Delete from channel list */
 623                list_del(&chan->list);
 624
 625                l2cap_chan_put(chan);
 626
 627                chan->conn = NULL;
 628
 629                /* Reference was only held for non-fixed channels or
 630                 * fixed channels that explicitly requested it using the
 631                 * FLAG_HOLD_HCI_CONN flag.
 632                 */
 633                if (chan->chan_type != L2CAP_CHAN_FIXED ||
 634                    test_bit(FLAG_HOLD_HCI_CONN, &chan->flags))
 635                        hci_conn_drop(conn->hcon);
 636
 637                if (mgr && mgr->bredr_chan == chan)
 638                        mgr->bredr_chan = NULL;
 639        }
 640
 641        if (chan->hs_hchan) {
 642                struct hci_chan *hs_hchan = chan->hs_hchan;
 643
 644                BT_DBG("chan %p disconnect hs_hchan %p", chan, hs_hchan);
 645                amp_disconnect_logical_link(hs_hchan);
 646        }
 647
 648        if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state))
 649                return;
 650
 651        switch(chan->mode) {
 652        case L2CAP_MODE_BASIC:
 653                break;
 654
 655        case L2CAP_MODE_LE_FLOWCTL:
 656        case L2CAP_MODE_EXT_FLOWCTL:
 657                skb_queue_purge(&chan->tx_q);
 658                break;
 659
 660        case L2CAP_MODE_ERTM:
 661                __clear_retrans_timer(chan);
 662                __clear_monitor_timer(chan);
 663                __clear_ack_timer(chan);
 664
 665                skb_queue_purge(&chan->srej_q);
 666
 667                l2cap_seq_list_free(&chan->srej_list);
 668                l2cap_seq_list_free(&chan->retrans_list);
 669
 670                /* fall through */
 671
 672        case L2CAP_MODE_STREAMING:
 673                skb_queue_purge(&chan->tx_q);
 674                break;
 675        }
 676
 677        return;
 678}
 679EXPORT_SYMBOL_GPL(l2cap_chan_del);
 680
 681static void __l2cap_chan_list(struct l2cap_conn *conn, l2cap_chan_func_t func,
 682                              void *data)
 683{
 684        struct l2cap_chan *chan;
 685
 686        list_for_each_entry(chan, &conn->chan_l, list) {
 687                func(chan, data);
 688        }
 689}
 690
 691void l2cap_chan_list(struct l2cap_conn *conn, l2cap_chan_func_t func,
 692                     void *data)
 693{
 694        if (!conn)
 695                return;
 696
 697        mutex_lock(&conn->chan_lock);
 698        __l2cap_chan_list(conn, func, data);
 699        mutex_unlock(&conn->chan_lock);
 700}
 701
 702EXPORT_SYMBOL_GPL(l2cap_chan_list);
 703
 704static void l2cap_conn_update_id_addr(struct work_struct *work)
 705{
 706        struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
 707                                               id_addr_update_work);
 708        struct hci_conn *hcon = conn->hcon;
 709        struct l2cap_chan *chan;
 710
 711        mutex_lock(&conn->chan_lock);
 712
 713        list_for_each_entry(chan, &conn->chan_l, list) {
 714                l2cap_chan_lock(chan);
 715                bacpy(&chan->dst, &hcon->dst);
 716                chan->dst_type = bdaddr_dst_type(hcon);
 717                l2cap_chan_unlock(chan);
 718        }
 719
 720        mutex_unlock(&conn->chan_lock);
 721}
 722
 723static void l2cap_chan_le_connect_reject(struct l2cap_chan *chan)
 724{
 725        struct l2cap_conn *conn = chan->conn;
 726        struct l2cap_le_conn_rsp rsp;
 727        u16 result;
 728
 729        if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
 730                result = L2CAP_CR_LE_AUTHORIZATION;
 731        else
 732                result = L2CAP_CR_LE_BAD_PSM;
 733
 734        l2cap_state_change(chan, BT_DISCONN);
 735
 736        rsp.dcid    = cpu_to_le16(chan->scid);
 737        rsp.mtu     = cpu_to_le16(chan->imtu);
 738        rsp.mps     = cpu_to_le16(chan->mps);
 739        rsp.credits = cpu_to_le16(chan->rx_credits);
 740        rsp.result  = cpu_to_le16(result);
 741
 742        l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
 743                       &rsp);
 744}
 745
 746static void l2cap_chan_ecred_connect_reject(struct l2cap_chan *chan)
 747{
 748        struct l2cap_conn *conn = chan->conn;
 749        struct l2cap_ecred_conn_rsp rsp;
 750        u16 result;
 751
 752        if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
 753                result = L2CAP_CR_LE_AUTHORIZATION;
 754        else
 755                result = L2CAP_CR_LE_BAD_PSM;
 756
 757        l2cap_state_change(chan, BT_DISCONN);
 758
 759        memset(&rsp, 0, sizeof(rsp));
 760
 761        rsp.result  = cpu_to_le16(result);
 762
 763        l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
 764                       &rsp);
 765}
 766
 767static void l2cap_chan_connect_reject(struct l2cap_chan *chan)
 768{
 769        struct l2cap_conn *conn = chan->conn;
 770        struct l2cap_conn_rsp rsp;
 771        u16 result;
 772
 773        if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
 774                result = L2CAP_CR_SEC_BLOCK;
 775        else
 776                result = L2CAP_CR_BAD_PSM;
 777
 778        l2cap_state_change(chan, BT_DISCONN);
 779
 780        rsp.scid   = cpu_to_le16(chan->dcid);
 781        rsp.dcid   = cpu_to_le16(chan->scid);
 782        rsp.result = cpu_to_le16(result);
 783        rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
 784
 785        l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
 786}
 787
 788void l2cap_chan_close(struct l2cap_chan *chan, int reason)
 789{
 790        struct l2cap_conn *conn = chan->conn;
 791
 792        BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
 793
 794        switch (chan->state) {
 795        case BT_LISTEN:
 796                chan->ops->teardown(chan, 0);
 797                break;
 798
 799        case BT_CONNECTED:
 800        case BT_CONFIG:
 801                if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
 802                        __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
 803                        l2cap_send_disconn_req(chan, reason);
 804                } else
 805                        l2cap_chan_del(chan, reason);
 806                break;
 807
 808        case BT_CONNECT2:
 809                if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
 810                        if (conn->hcon->type == ACL_LINK)
 811                                l2cap_chan_connect_reject(chan);
 812                        else if (conn->hcon->type == LE_LINK) {
 813                                switch (chan->mode) {
 814                                case L2CAP_MODE_LE_FLOWCTL:
 815                                        l2cap_chan_le_connect_reject(chan);
 816                                        break;
 817                                case L2CAP_MODE_EXT_FLOWCTL:
 818                                        l2cap_chan_ecred_connect_reject(chan);
 819                                        break;
 820                                }
 821                        }
 822                }
 823
 824                l2cap_chan_del(chan, reason);
 825                break;
 826
 827        case BT_CONNECT:
 828        case BT_DISCONN:
 829                l2cap_chan_del(chan, reason);
 830                break;
 831
 832        default:
 833                chan->ops->teardown(chan, 0);
 834                break;
 835        }
 836}
 837EXPORT_SYMBOL(l2cap_chan_close);
 838
 839static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
 840{
 841        switch (chan->chan_type) {
 842        case L2CAP_CHAN_RAW:
 843                switch (chan->sec_level) {
 844                case BT_SECURITY_HIGH:
 845                case BT_SECURITY_FIPS:
 846                        return HCI_AT_DEDICATED_BONDING_MITM;
 847                case BT_SECURITY_MEDIUM:
 848                        return HCI_AT_DEDICATED_BONDING;
 849                default:
 850                        return HCI_AT_NO_BONDING;
 851                }
 852                break;
 853        case L2CAP_CHAN_CONN_LESS:
 854                if (chan->psm == cpu_to_le16(L2CAP_PSM_3DSP)) {
 855                        if (chan->sec_level == BT_SECURITY_LOW)
 856                                chan->sec_level = BT_SECURITY_SDP;
 857                }
 858                if (chan->sec_level == BT_SECURITY_HIGH ||
 859                    chan->sec_level == BT_SECURITY_FIPS)
 860                        return HCI_AT_NO_BONDING_MITM;
 861                else
 862                        return HCI_AT_NO_BONDING;
 863                break;
 864        case L2CAP_CHAN_CONN_ORIENTED:
 865                if (chan->psm == cpu_to_le16(L2CAP_PSM_SDP)) {
 866                        if (chan->sec_level == BT_SECURITY_LOW)
 867                                chan->sec_level = BT_SECURITY_SDP;
 868
 869                        if (chan->sec_level == BT_SECURITY_HIGH ||
 870                            chan->sec_level == BT_SECURITY_FIPS)
 871                                return HCI_AT_NO_BONDING_MITM;
 872                        else
 873                                return HCI_AT_NO_BONDING;
 874                }
 875                /* fall through */
 876        default:
 877                switch (chan->sec_level) {
 878                case BT_SECURITY_HIGH:
 879                case BT_SECURITY_FIPS:
 880                        return HCI_AT_GENERAL_BONDING_MITM;
 881                case BT_SECURITY_MEDIUM:
 882                        return HCI_AT_GENERAL_BONDING;
 883                default:
 884                        return HCI_AT_NO_BONDING;
 885                }
 886                break;
 887        }
 888}
 889
 890/* Service level security */
 891int l2cap_chan_check_security(struct l2cap_chan *chan, bool initiator)
 892{
 893        struct l2cap_conn *conn = chan->conn;
 894        __u8 auth_type;
 895
 896        if (conn->hcon->type == LE_LINK)
 897                return smp_conn_security(conn->hcon, chan->sec_level);
 898
 899        auth_type = l2cap_get_auth_type(chan);
 900
 901        return hci_conn_security(conn->hcon, chan->sec_level, auth_type,
 902                                 initiator);
 903}
 904
 905static u8 l2cap_get_ident(struct l2cap_conn *conn)
 906{
 907        u8 id;
 908
 909        /* Get next available identificator.
 910         *    1 - 128 are used by kernel.
 911         *  129 - 199 are reserved.
 912         *  200 - 254 are used by utilities like l2ping, etc.
 913         */
 914
 915        mutex_lock(&conn->ident_lock);
 916
 917        if (++conn->tx_ident > 128)
 918                conn->tx_ident = 1;
 919
 920        id = conn->tx_ident;
 921
 922        mutex_unlock(&conn->ident_lock);
 923
 924        return id;
 925}
 926
 927static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
 928                           void *data)
 929{
 930        struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
 931        u8 flags;
 932
 933        BT_DBG("code 0x%2.2x", code);
 934
 935        if (!skb)
 936                return;
 937
 938        /* Use NO_FLUSH if supported or we have an LE link (which does
 939         * not support auto-flushing packets) */
 940        if (lmp_no_flush_capable(conn->hcon->hdev) ||
 941            conn->hcon->type == LE_LINK)
 942                flags = ACL_START_NO_FLUSH;
 943        else
 944                flags = ACL_START;
 945
 946        bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
 947        skb->priority = HCI_PRIO_MAX;
 948
 949        hci_send_acl(conn->hchan, skb, flags);
 950}
 951
 952static bool __chan_is_moving(struct l2cap_chan *chan)
 953{
 954        return chan->move_state != L2CAP_MOVE_STABLE &&
 955               chan->move_state != L2CAP_MOVE_WAIT_PREPARE;
 956}
 957
 958static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
 959{
 960        struct hci_conn *hcon = chan->conn->hcon;
 961        u16 flags;
 962
 963        BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len,
 964               skb->priority);
 965
 966        if (chan->hs_hcon && !__chan_is_moving(chan)) {
 967                if (chan->hs_hchan)
 968                        hci_send_acl(chan->hs_hchan, skb, ACL_COMPLETE);
 969                else
 970                        kfree_skb(skb);
 971
 972                return;
 973        }
 974
 975        /* Use NO_FLUSH for LE links (where this is the only option) or
 976         * if the BR/EDR link supports it and flushing has not been
 977         * explicitly requested (through FLAG_FLUSHABLE).
 978         */
 979        if (hcon->type == LE_LINK ||
 980            (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
 981             lmp_no_flush_capable(hcon->hdev)))
 982                flags = ACL_START_NO_FLUSH;
 983        else
 984                flags = ACL_START;
 985
 986        bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
 987        hci_send_acl(chan->conn->hchan, skb, flags);
 988}
 989
 990static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control)
 991{
 992        control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
 993        control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT;
 994
 995        if (enh & L2CAP_CTRL_FRAME_TYPE) {
 996                /* S-Frame */
 997                control->sframe = 1;
 998                control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT;
 999                control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
1000
1001                control->sar = 0;
1002                control->txseq = 0;
1003        } else {
1004                /* I-Frame */
1005                control->sframe = 0;
1006                control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
1007                control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
1008
1009                control->poll = 0;
1010                control->super = 0;
1011        }
1012}
1013
1014static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control)
1015{
1016        control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT;
1017        control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT;
1018
1019        if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) {
1020                /* S-Frame */
1021                control->sframe = 1;
1022                control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT;
1023                control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT;
1024
1025                control->sar = 0;
1026                control->txseq = 0;
1027        } else {
1028                /* I-Frame */
1029                control->sframe = 0;
1030                control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
1031                control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT;
1032
1033                control->poll = 0;
1034                control->super = 0;
1035        }
1036}
1037
1038static inline void __unpack_control(struct l2cap_chan *chan,
1039                                    struct sk_buff *skb)
1040{
1041        if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
1042                __unpack_extended_control(get_unaligned_le32(skb->data),
1043                                          &bt_cb(skb)->l2cap);
1044                skb_pull(skb, L2CAP_EXT_CTRL_SIZE);
1045        } else {
1046                __unpack_enhanced_control(get_unaligned_le16(skb->data),
1047                                          &bt_cb(skb)->l2cap);
1048                skb_pull(skb, L2CAP_ENH_CTRL_SIZE);
1049        }
1050}
1051
1052static u32 __pack_extended_control(struct l2cap_ctrl *control)
1053{
1054        u32 packed;
1055
1056        packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT;
1057        packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT;
1058
1059        if (control->sframe) {
1060                packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT;
1061                packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT;
1062                packed |= L2CAP_EXT_CTRL_FRAME_TYPE;
1063        } else {
1064                packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT;
1065                packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT;
1066        }
1067
1068        return packed;
1069}
1070
1071static u16 __pack_enhanced_control(struct l2cap_ctrl *control)
1072{
1073        u16 packed;
1074
1075        packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT;
1076        packed |= control->final << L2CAP_CTRL_FINAL_SHIFT;
1077
1078        if (control->sframe) {
1079                packed |= control->poll << L2CAP_CTRL_POLL_SHIFT;
1080                packed |= control->super << L2CAP_CTRL_SUPER_SHIFT;
1081                packed |= L2CAP_CTRL_FRAME_TYPE;
1082        } else {
1083                packed |= control->sar << L2CAP_CTRL_SAR_SHIFT;
1084                packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT;
1085        }
1086
1087        return packed;
1088}
1089
1090static inline void __pack_control(struct l2cap_chan *chan,
1091                                  struct l2cap_ctrl *control,
1092                                  struct sk_buff *skb)
1093{
1094        if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
1095                put_unaligned_le32(__pack_extended_control(control),
1096                                   skb->data + L2CAP_HDR_SIZE);
1097        } else {
1098                put_unaligned_le16(__pack_enhanced_control(control),
1099                                   skb->data + L2CAP_HDR_SIZE);
1100        }
1101}
1102
1103static inline unsigned int __ertm_hdr_size(struct l2cap_chan *chan)
1104{
1105        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1106                return L2CAP_EXT_HDR_SIZE;
1107        else
1108                return L2CAP_ENH_HDR_SIZE;
1109}
1110
1111static struct sk_buff *l2cap_create_sframe_pdu(struct l2cap_chan *chan,
1112                                               u32 control)
1113{
1114        struct sk_buff *skb;
1115        struct l2cap_hdr *lh;
1116        int hlen = __ertm_hdr_size(chan);
1117
1118        if (chan->fcs == L2CAP_FCS_CRC16)
1119                hlen += L2CAP_FCS_SIZE;
1120
1121        skb = bt_skb_alloc(hlen, GFP_KERNEL);
1122
1123        if (!skb)
1124                return ERR_PTR(-ENOMEM);
1125
1126        lh = skb_put(skb, L2CAP_HDR_SIZE);
1127        lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
1128        lh->cid = cpu_to_le16(chan->dcid);
1129
1130        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1131                put_unaligned_le32(control, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
1132        else
1133                put_unaligned_le16(control, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
1134
1135        if (chan->fcs == L2CAP_FCS_CRC16) {
1136                u16 fcs = crc16(0, (u8 *)skb->data, skb->len);
1137                put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1138        }
1139
1140        skb->priority = HCI_PRIO_MAX;
1141        return skb;
1142}
1143
1144static void l2cap_send_sframe(struct l2cap_chan *chan,
1145                              struct l2cap_ctrl *control)
1146{
1147        struct sk_buff *skb;
1148        u32 control_field;
1149
1150        BT_DBG("chan %p, control %p", chan, control);
1151
1152        if (!control->sframe)
1153                return;
1154
1155        if (__chan_is_moving(chan))
1156                return;
1157
1158        if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state) &&
1159            !control->poll)
1160                control->final = 1;
1161
1162        if (control->super == L2CAP_SUPER_RR)
1163                clear_bit(CONN_RNR_SENT, &chan->conn_state);
1164        else if (control->super == L2CAP_SUPER_RNR)
1165                set_bit(CONN_RNR_SENT, &chan->conn_state);
1166
1167        if (control->super != L2CAP_SUPER_SREJ) {
1168                chan->last_acked_seq = control->reqseq;
1169                __clear_ack_timer(chan);
1170        }
1171
1172        BT_DBG("reqseq %d, final %d, poll %d, super %d", control->reqseq,
1173               control->final, control->poll, control->super);
1174
1175        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1176                control_field = __pack_extended_control(control);
1177        else
1178                control_field = __pack_enhanced_control(control);
1179
1180        skb = l2cap_create_sframe_pdu(chan, control_field);
1181        if (!IS_ERR(skb))
1182                l2cap_do_send(chan, skb);
1183}
1184
1185static void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, bool poll)
1186{
1187        struct l2cap_ctrl control;
1188
1189        BT_DBG("chan %p, poll %d", chan, poll);
1190
1191        memset(&control, 0, sizeof(control));
1192        control.sframe = 1;
1193        control.poll = poll;
1194
1195        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
1196                control.super = L2CAP_SUPER_RNR;
1197        else
1198                control.super = L2CAP_SUPER_RR;
1199
1200        control.reqseq = chan->buffer_seq;
1201        l2cap_send_sframe(chan, &control);
1202}
1203
1204static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
1205{
1206        if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
1207                return true;
1208
1209        return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
1210}
1211
1212static bool __amp_capable(struct l2cap_chan *chan)
1213{
1214        struct l2cap_conn *conn = chan->conn;
1215        struct hci_dev *hdev;
1216        bool amp_available = false;
1217
1218        if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
1219                return false;
1220
1221        if (!(conn->remote_fixed_chan & L2CAP_FC_A2MP))
1222                return false;
1223
1224        read_lock(&hci_dev_list_lock);
1225        list_for_each_entry(hdev, &hci_dev_list, list) {
1226                if (hdev->amp_type != AMP_TYPE_BREDR &&
1227                    test_bit(HCI_UP, &hdev->flags)) {
1228                        amp_available = true;
1229                        break;
1230                }
1231        }
1232        read_unlock(&hci_dev_list_lock);
1233
1234        if (chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED)
1235                return amp_available;
1236
1237        return false;
1238}
1239
1240static bool l2cap_check_efs(struct l2cap_chan *chan)
1241{
1242        /* Check EFS parameters */
1243        return true;
1244}
1245
1246void l2cap_send_conn_req(struct l2cap_chan *chan)
1247{
1248        struct l2cap_conn *conn = chan->conn;
1249        struct l2cap_conn_req req;
1250
1251        req.scid = cpu_to_le16(chan->scid);
1252        req.psm  = chan->psm;
1253
1254        chan->ident = l2cap_get_ident(conn);
1255
1256        set_bit(CONF_CONNECT_PEND, &chan->conf_state);
1257
1258        l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
1259}
1260
1261static void l2cap_send_create_chan_req(struct l2cap_chan *chan, u8 amp_id)
1262{
1263        struct l2cap_create_chan_req req;
1264        req.scid = cpu_to_le16(chan->scid);
1265        req.psm  = chan->psm;
1266        req.amp_id = amp_id;
1267
1268        chan->ident = l2cap_get_ident(chan->conn);
1269
1270        l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_REQ,
1271                       sizeof(req), &req);
1272}
1273
1274static void l2cap_move_setup(struct l2cap_chan *chan)
1275{
1276        struct sk_buff *skb;
1277
1278        BT_DBG("chan %p", chan);
1279
1280        if (chan->mode != L2CAP_MODE_ERTM)
1281                return;
1282
1283        __clear_retrans_timer(chan);
1284        __clear_monitor_timer(chan);
1285        __clear_ack_timer(chan);
1286
1287        chan->retry_count = 0;
1288        skb_queue_walk(&chan->tx_q, skb) {
1289                if (bt_cb(skb)->l2cap.retries)
1290                        bt_cb(skb)->l2cap.retries = 1;
1291                else
1292                        break;
1293        }
1294
1295        chan->expected_tx_seq = chan->buffer_seq;
1296
1297        clear_bit(CONN_REJ_ACT, &chan->conn_state);
1298        clear_bit(CONN_SREJ_ACT, &chan->conn_state);
1299        l2cap_seq_list_clear(&chan->retrans_list);
1300        l2cap_seq_list_clear(&chan->srej_list);
1301        skb_queue_purge(&chan->srej_q);
1302
1303        chan->tx_state = L2CAP_TX_STATE_XMIT;
1304        chan->rx_state = L2CAP_RX_STATE_MOVE;
1305
1306        set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
1307}
1308
1309static void l2cap_move_done(struct l2cap_chan *chan)
1310{
1311        u8 move_role = chan->move_role;
1312        BT_DBG("chan %p", chan);
1313
1314        chan->move_state = L2CAP_MOVE_STABLE;
1315        chan->move_role = L2CAP_MOVE_ROLE_NONE;
1316
1317        if (chan->mode != L2CAP_MODE_ERTM)
1318                return;
1319
1320        switch (move_role) {
1321        case L2CAP_MOVE_ROLE_INITIATOR:
1322                l2cap_tx(chan, NULL, NULL, L2CAP_EV_EXPLICIT_POLL);
1323                chan->rx_state = L2CAP_RX_STATE_WAIT_F;
1324                break;
1325        case L2CAP_MOVE_ROLE_RESPONDER:
1326                chan->rx_state = L2CAP_RX_STATE_WAIT_P;
1327                break;
1328        }
1329}
1330
1331static void l2cap_chan_ready(struct l2cap_chan *chan)
1332{
1333        /* The channel may have already been flagged as connected in
1334         * case of receiving data before the L2CAP info req/rsp
1335         * procedure is complete.
1336         */
1337        if (chan->state == BT_CONNECTED)
1338                return;
1339
1340        /* This clears all conf flags, including CONF_NOT_COMPLETE */
1341        chan->conf_state = 0;
1342        __clear_chan_timer(chan);
1343
1344        switch (chan->mode) {
1345        case L2CAP_MODE_LE_FLOWCTL:
1346        case L2CAP_MODE_EXT_FLOWCTL:
1347                if (!chan->tx_credits)
1348                        chan->ops->suspend(chan);
1349                break;
1350        }
1351
1352        chan->state = BT_CONNECTED;
1353
1354        chan->ops->ready(chan);
1355}
1356
1357static void l2cap_le_connect(struct l2cap_chan *chan)
1358{
1359        struct l2cap_conn *conn = chan->conn;
1360        struct l2cap_le_conn_req req;
1361
1362        if (test_and_set_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags))
1363                return;
1364
1365        if (!chan->imtu)
1366                chan->imtu = chan->conn->mtu;
1367
1368        l2cap_le_flowctl_init(chan, 0);
1369
1370        req.psm     = chan->psm;
1371        req.scid    = cpu_to_le16(chan->scid);
1372        req.mtu     = cpu_to_le16(chan->imtu);
1373        req.mps     = cpu_to_le16(chan->mps);
1374        req.credits = cpu_to_le16(chan->rx_credits);
1375
1376        chan->ident = l2cap_get_ident(conn);
1377
1378        l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_REQ,
1379                       sizeof(req), &req);
1380}
1381
1382struct l2cap_ecred_conn_data {
1383        struct {
1384                struct l2cap_ecred_conn_req req;
1385                __le16 scid[5];
1386        } __packed pdu;
1387        struct l2cap_chan *chan;
1388        struct pid *pid;
1389        int count;
1390};
1391
1392static void l2cap_ecred_defer_connect(struct l2cap_chan *chan, void *data)
1393{
1394        struct l2cap_ecred_conn_data *conn = data;
1395        struct pid *pid;
1396
1397        if (chan == conn->chan)
1398                return;
1399
1400        if (!test_and_clear_bit(FLAG_DEFER_SETUP, &chan->flags))
1401                return;
1402
1403        pid = chan->ops->get_peer_pid(chan);
1404
1405        /* Only add deferred channels with the same PID/PSM */
1406        if (conn->pid != pid || chan->psm != conn->chan->psm || chan->ident ||
1407            chan->mode != L2CAP_MODE_EXT_FLOWCTL || chan->state != BT_CONNECT)
1408                return;
1409
1410        if (test_and_set_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags))
1411                return;
1412
1413        l2cap_ecred_init(chan, 0);
1414
1415        /* Set the same ident so we can match on the rsp */
1416        chan->ident = conn->chan->ident;
1417
1418        /* Include all channels deferred */
1419        conn->pdu.scid[conn->count] = cpu_to_le16(chan->scid);
1420
1421        conn->count++;
1422}
1423
1424static void l2cap_ecred_connect(struct l2cap_chan *chan)
1425{
1426        struct l2cap_conn *conn = chan->conn;
1427        struct l2cap_ecred_conn_data data;
1428
1429        if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
1430                return;
1431
1432        if (test_and_set_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags))
1433                return;
1434
1435        l2cap_ecred_init(chan, 0);
1436
1437        data.pdu.req.psm     = chan->psm;
1438        data.pdu.req.mtu     = cpu_to_le16(chan->imtu);
1439        data.pdu.req.mps     = cpu_to_le16(chan->mps);
1440        data.pdu.req.credits = cpu_to_le16(chan->rx_credits);
1441        data.pdu.scid[0]     = cpu_to_le16(chan->scid);
1442
1443        chan->ident = l2cap_get_ident(conn);
1444        data.pid = chan->ops->get_peer_pid(chan);
1445
1446        data.count = 1;
1447        data.chan = chan;
1448        data.pid = chan->ops->get_peer_pid(chan);
1449
1450        __l2cap_chan_list(conn, l2cap_ecred_defer_connect, &data);
1451
1452        l2cap_send_cmd(conn, chan->ident, L2CAP_ECRED_CONN_REQ,
1453                       sizeof(data.pdu.req) + data.count * sizeof(__le16),
1454                       &data.pdu);
1455}
1456
1457static void l2cap_le_start(struct l2cap_chan *chan)
1458{
1459        struct l2cap_conn *conn = chan->conn;
1460
1461        if (!smp_conn_security(conn->hcon, chan->sec_level))
1462                return;
1463
1464        if (!chan->psm) {
1465                l2cap_chan_ready(chan);
1466                return;
1467        }
1468
1469        if (chan->state == BT_CONNECT) {
1470                if (chan->mode == L2CAP_MODE_EXT_FLOWCTL)
1471                        l2cap_ecred_connect(chan);
1472                else
1473                        l2cap_le_connect(chan);
1474        }
1475}
1476
1477static void l2cap_start_connection(struct l2cap_chan *chan)
1478{
1479        if (__amp_capable(chan)) {
1480                BT_DBG("chan %p AMP capable: discover AMPs", chan);
1481                a2mp_discover_amp(chan);
1482        } else if (chan->conn->hcon->type == LE_LINK) {
1483                l2cap_le_start(chan);
1484        } else {
1485                l2cap_send_conn_req(chan);
1486        }
1487}
1488
1489static void l2cap_request_info(struct l2cap_conn *conn)
1490{
1491        struct l2cap_info_req req;
1492
1493        if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1494                return;
1495
1496        req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
1497
1498        conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
1499        conn->info_ident = l2cap_get_ident(conn);
1500
1501        schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
1502
1503        l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
1504                       sizeof(req), &req);
1505}
1506
1507static bool l2cap_check_enc_key_size(struct hci_conn *hcon)
1508{
1509        /* The minimum encryption key size needs to be enforced by the
1510         * host stack before establishing any L2CAP connections. The
1511         * specification in theory allows a minimum of 1, but to align
1512         * BR/EDR and LE transports, a minimum of 7 is chosen.
1513         *
1514         * This check might also be called for unencrypted connections
1515         * that have no key size requirements. Ensure that the link is
1516         * actually encrypted before enforcing a key size.
1517         */
1518        return (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags) ||
1519                hcon->enc_key_size >= hcon->hdev->min_enc_key_size);
1520}
1521
1522static void l2cap_do_start(struct l2cap_chan *chan)
1523{
1524        struct l2cap_conn *conn = chan->conn;
1525
1526        if (conn->hcon->type == LE_LINK) {
1527                l2cap_le_start(chan);
1528                return;
1529        }
1530
1531        if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)) {
1532                l2cap_request_info(conn);
1533                return;
1534        }
1535
1536        if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
1537                return;
1538
1539        if (!l2cap_chan_check_security(chan, true) ||
1540            !__l2cap_no_conn_pending(chan))
1541                return;
1542
1543        if (l2cap_check_enc_key_size(conn->hcon))
1544                l2cap_start_connection(chan);
1545        else
1546                __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
1547}
1548
1549static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
1550{
1551        u32 local_feat_mask = l2cap_feat_mask;
1552        if (!disable_ertm)
1553                local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
1554
1555        switch (mode) {
1556        case L2CAP_MODE_ERTM:
1557                return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
1558        case L2CAP_MODE_STREAMING:
1559                return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
1560        default:
1561                return 0x00;
1562        }
1563}
1564
1565static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err)
1566{
1567        struct l2cap_conn *conn = chan->conn;
1568        struct l2cap_disconn_req req;
1569
1570        if (!conn)
1571                return;
1572
1573        if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) {
1574                __clear_retrans_timer(chan);
1575                __clear_monitor_timer(chan);
1576                __clear_ack_timer(chan);
1577        }
1578
1579        if (chan->scid == L2CAP_CID_A2MP) {
1580                l2cap_state_change(chan, BT_DISCONN);
1581                return;
1582        }
1583
1584        req.dcid = cpu_to_le16(chan->dcid);
1585        req.scid = cpu_to_le16(chan->scid);
1586        l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_DISCONN_REQ,
1587                       sizeof(req), &req);
1588
1589        l2cap_state_change_and_error(chan, BT_DISCONN, err);
1590}
1591
1592/* ---- L2CAP connections ---- */
1593static void l2cap_conn_start(struct l2cap_conn *conn)
1594{
1595        struct l2cap_chan *chan, *tmp;
1596
1597        BT_DBG("conn %p", conn);
1598
1599        mutex_lock(&conn->chan_lock);
1600
1601        list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
1602                l2cap_chan_lock(chan);
1603
1604                if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1605                        l2cap_chan_ready(chan);
1606                        l2cap_chan_unlock(chan);
1607                        continue;
1608                }
1609
1610                if (chan->state == BT_CONNECT) {
1611                        if (!l2cap_chan_check_security(chan, true) ||
1612                            !__l2cap_no_conn_pending(chan)) {
1613                                l2cap_chan_unlock(chan);
1614                                continue;
1615                        }
1616
1617                        if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
1618                            && test_bit(CONF_STATE2_DEVICE,
1619                                        &chan->conf_state)) {
1620                                l2cap_chan_close(chan, ECONNRESET);
1621                                l2cap_chan_unlock(chan);
1622                                continue;
1623                        }
1624
1625                        if (l2cap_check_enc_key_size(conn->hcon))
1626                                l2cap_start_connection(chan);
1627                        else
1628                                l2cap_chan_close(chan, ECONNREFUSED);
1629
1630                } else if (chan->state == BT_CONNECT2) {
1631                        struct l2cap_conn_rsp rsp;
1632                        char buf[128];
1633                        rsp.scid = cpu_to_le16(chan->dcid);
1634                        rsp.dcid = cpu_to_le16(chan->scid);
1635
1636                        if (l2cap_chan_check_security(chan, false)) {
1637                                if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
1638                                        rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1639                                        rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
1640                                        chan->ops->defer(chan);
1641
1642                                } else {
1643                                        l2cap_state_change(chan, BT_CONFIG);
1644                                        rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
1645                                        rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
1646                                }
1647                        } else {
1648                                rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1649                                rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
1650                        }
1651
1652                        l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
1653                                       sizeof(rsp), &rsp);
1654
1655                        if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
1656                            rsp.result != L2CAP_CR_SUCCESS) {
1657                                l2cap_chan_unlock(chan);
1658                                continue;
1659                        }
1660
1661                        set_bit(CONF_REQ_SENT, &chan->conf_state);
1662                        l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1663                                       l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
1664                        chan->num_conf_req++;
1665                }
1666
1667                l2cap_chan_unlock(chan);
1668        }
1669
1670        mutex_unlock(&conn->chan_lock);
1671}
1672
1673static void l2cap_le_conn_ready(struct l2cap_conn *conn)
1674{
1675        struct hci_conn *hcon = conn->hcon;
1676        struct hci_dev *hdev = hcon->hdev;
1677
1678        BT_DBG("%s conn %p", hdev->name, conn);
1679
1680        /* For outgoing pairing which doesn't necessarily have an
1681         * associated socket (e.g. mgmt_pair_device).
1682         */
1683        if (hcon->out)
1684                smp_conn_security(hcon, hcon->pending_sec_level);
1685
1686        /* For LE slave connections, make sure the connection interval
1687         * is in the range of the minium and maximum interval that has
1688         * been configured for this connection. If not, then trigger
1689         * the connection update procedure.
1690         */
1691        if (hcon->role == HCI_ROLE_SLAVE &&
1692            (hcon->le_conn_interval < hcon->le_conn_min_interval ||
1693             hcon->le_conn_interval > hcon->le_conn_max_interval)) {
1694                struct l2cap_conn_param_update_req req;
1695
1696                req.min = cpu_to_le16(hcon->le_conn_min_interval);
1697                req.max = cpu_to_le16(hcon->le_conn_max_interval);
1698                req.latency = cpu_to_le16(hcon->le_conn_latency);
1699                req.to_multiplier = cpu_to_le16(hcon->le_supv_timeout);
1700
1701                l2cap_send_cmd(conn, l2cap_get_ident(conn),
1702                               L2CAP_CONN_PARAM_UPDATE_REQ, sizeof(req), &req);
1703        }
1704}
1705
1706static void l2cap_conn_ready(struct l2cap_conn *conn)
1707{
1708        struct l2cap_chan *chan;
1709        struct hci_conn *hcon = conn->hcon;
1710
1711        BT_DBG("conn %p", conn);
1712
1713        if (hcon->type == ACL_LINK)
1714                l2cap_request_info(conn);
1715
1716        mutex_lock(&conn->chan_lock);
1717
1718        list_for_each_entry(chan, &conn->chan_l, list) {
1719
1720                l2cap_chan_lock(chan);
1721
1722                if (chan->scid == L2CAP_CID_A2MP) {
1723                        l2cap_chan_unlock(chan);
1724                        continue;
1725                }
1726
1727                if (hcon->type == LE_LINK) {
1728                        l2cap_le_start(chan);
1729                } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1730                        if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
1731                                l2cap_chan_ready(chan);
1732                } else if (chan->state == BT_CONNECT) {
1733                        l2cap_do_start(chan);
1734                }
1735
1736                l2cap_chan_unlock(chan);
1737        }
1738
1739        mutex_unlock(&conn->chan_lock);
1740
1741        if (hcon->type == LE_LINK)
1742                l2cap_le_conn_ready(conn);
1743
1744        queue_work(hcon->hdev->workqueue, &conn->pending_rx_work);
1745}
1746
1747/* Notify sockets that we cannot guaranty reliability anymore */
1748static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
1749{
1750        struct l2cap_chan *chan;
1751
1752        BT_DBG("conn %p", conn);
1753
1754        mutex_lock(&conn->chan_lock);
1755
1756        list_for_each_entry(chan, &conn->chan_l, list) {
1757                if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
1758                        l2cap_chan_set_err(chan, err);
1759        }
1760
1761        mutex_unlock(&conn->chan_lock);
1762}
1763
1764static void l2cap_info_timeout(struct work_struct *work)
1765{
1766        struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1767                                               info_timer.work);
1768
1769        conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1770        conn->info_ident = 0;
1771
1772        l2cap_conn_start(conn);
1773}
1774
1775/*
1776 * l2cap_user
1777 * External modules can register l2cap_user objects on l2cap_conn. The ->probe
1778 * callback is called during registration. The ->remove callback is called
1779 * during unregistration.
1780 * An l2cap_user object can either be explicitly unregistered or when the
1781 * underlying l2cap_conn object is deleted. This guarantees that l2cap->hcon,
1782 * l2cap->hchan, .. are valid as long as the remove callback hasn't been called.
1783 * External modules must own a reference to the l2cap_conn object if they intend
1784 * to call l2cap_unregister_user(). The l2cap_conn object might get destroyed at
1785 * any time if they don't.
1786 */
1787
1788int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user)
1789{
1790        struct hci_dev *hdev = conn->hcon->hdev;
1791        int ret;
1792
1793        /* We need to check whether l2cap_conn is registered. If it is not, we
1794         * must not register the l2cap_user. l2cap_conn_del() is unregisters
1795         * l2cap_conn objects, but doesn't provide its own locking. Instead, it
1796         * relies on the parent hci_conn object to be locked. This itself relies
1797         * on the hci_dev object to be locked. So we must lock the hci device
1798         * here, too. */
1799
1800        hci_dev_lock(hdev);
1801
1802        if (!list_empty(&user->list)) {
1803                ret = -EINVAL;
1804                goto out_unlock;
1805        }
1806
1807        /* conn->hchan is NULL after l2cap_conn_del() was called */
1808        if (!conn->hchan) {
1809                ret = -ENODEV;
1810                goto out_unlock;
1811        }
1812
1813        ret = user->probe(conn, user);
1814        if (ret)
1815                goto out_unlock;
1816
1817        list_add(&user->list, &conn->users);
1818        ret = 0;
1819
1820out_unlock:
1821        hci_dev_unlock(hdev);
1822        return ret;
1823}
1824EXPORT_SYMBOL(l2cap_register_user);
1825
1826void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user)
1827{
1828        struct hci_dev *hdev = conn->hcon->hdev;
1829
1830        hci_dev_lock(hdev);
1831
1832        if (list_empty(&user->list))
1833                goto out_unlock;
1834
1835        list_del_init(&user->list);
1836        user->remove(conn, user);
1837
1838out_unlock:
1839        hci_dev_unlock(hdev);
1840}
1841EXPORT_SYMBOL(l2cap_unregister_user);
1842
1843static void l2cap_unregister_all_users(struct l2cap_conn *conn)
1844{
1845        struct l2cap_user *user;
1846
1847        while (!list_empty(&conn->users)) {
1848                user = list_first_entry(&conn->users, struct l2cap_user, list);
1849                list_del_init(&user->list);
1850                user->remove(conn, user);
1851        }
1852}
1853
1854static void l2cap_conn_del(struct hci_conn *hcon, int err)
1855{
1856        struct l2cap_conn *conn = hcon->l2cap_data;
1857        struct l2cap_chan *chan, *l;
1858
1859        if (!conn)
1860                return;
1861
1862        BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
1863
1864        kfree_skb(conn->rx_skb);
1865
1866        skb_queue_purge(&conn->pending_rx);
1867
1868        /* We can not call flush_work(&conn->pending_rx_work) here since we
1869         * might block if we are running on a worker from the same workqueue
1870         * pending_rx_work is waiting on.
1871         */
1872        if (work_pending(&conn->pending_rx_work))
1873                cancel_work_sync(&conn->pending_rx_work);
1874
1875        if (work_pending(&conn->id_addr_update_work))
1876                cancel_work_sync(&conn->id_addr_update_work);
1877
1878        l2cap_unregister_all_users(conn);
1879
1880        /* Force the connection to be immediately dropped */
1881        hcon->disc_timeout = 0;
1882
1883        mutex_lock(&conn->chan_lock);
1884
1885        /* Kill channels */
1886        list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1887                l2cap_chan_hold(chan);
1888                l2cap_chan_lock(chan);
1889
1890                l2cap_chan_del(chan, err);
1891
1892                chan->ops->close(chan);
1893
1894                l2cap_chan_unlock(chan);
1895                l2cap_chan_put(chan);
1896        }
1897
1898        mutex_unlock(&conn->chan_lock);
1899
1900        hci_chan_del(conn->hchan);
1901
1902        if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1903                cancel_delayed_work_sync(&conn->info_timer);
1904
1905        hcon->l2cap_data = NULL;
1906        conn->hchan = NULL;
1907        l2cap_conn_put(conn);
1908}
1909
1910static void l2cap_conn_free(struct kref *ref)
1911{
1912        struct l2cap_conn *conn = container_of(ref, struct l2cap_conn, ref);
1913
1914        hci_conn_put(conn->hcon);
1915        kfree(conn);
1916}
1917
1918struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn)
1919{
1920        kref_get(&conn->ref);
1921        return conn;
1922}
1923EXPORT_SYMBOL(l2cap_conn_get);
1924
1925void l2cap_conn_put(struct l2cap_conn *conn)
1926{
1927        kref_put(&conn->ref, l2cap_conn_free);
1928}
1929EXPORT_SYMBOL(l2cap_conn_put);
1930
1931/* ---- Socket interface ---- */
1932
1933/* Find socket with psm and source / destination bdaddr.
1934 * Returns closest match.
1935 */
1936static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
1937                                                   bdaddr_t *src,
1938                                                   bdaddr_t *dst,
1939                                                   u8 link_type)
1940{
1941        struct l2cap_chan *c, *c1 = NULL;
1942
1943        read_lock(&chan_list_lock);
1944
1945        list_for_each_entry(c, &chan_list, global_l) {
1946                if (state && c->state != state)
1947                        continue;
1948
1949                if (link_type == ACL_LINK && c->src_type != BDADDR_BREDR)
1950                        continue;
1951
1952                if (link_type == LE_LINK && c->src_type == BDADDR_BREDR)
1953                        continue;
1954
1955                if (c->psm == psm) {
1956                        int src_match, dst_match;
1957                        int src_any, dst_any;
1958
1959                        /* Exact match. */
1960                        src_match = !bacmp(&c->src, src);
1961                        dst_match = !bacmp(&c->dst, dst);
1962                        if (src_match && dst_match) {
1963                                l2cap_chan_hold(c);
1964                                read_unlock(&chan_list_lock);
1965                                return c;
1966                        }
1967
1968                        /* Closest match */
1969                        src_any = !bacmp(&c->src, BDADDR_ANY);
1970                        dst_any = !bacmp(&c->dst, BDADDR_ANY);
1971                        if ((src_match && dst_any) || (src_any && dst_match) ||
1972                            (src_any && dst_any))
1973                                c1 = c;
1974                }
1975        }
1976
1977        if (c1)
1978                l2cap_chan_hold(c1);
1979
1980        read_unlock(&chan_list_lock);
1981
1982        return c1;
1983}
1984
1985static void l2cap_monitor_timeout(struct work_struct *work)
1986{
1987        struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1988                                               monitor_timer.work);
1989
1990        BT_DBG("chan %p", chan);
1991
1992        l2cap_chan_lock(chan);
1993
1994        if (!chan->conn) {
1995                l2cap_chan_unlock(chan);
1996                l2cap_chan_put(chan);
1997                return;
1998        }
1999
2000        l2cap_tx(chan, NULL, NULL, L2CAP_EV_MONITOR_TO);
2001
2002        l2cap_chan_unlock(chan);
2003        l2cap_chan_put(chan);
2004}
2005
2006static void l2cap_retrans_timeout(struct work_struct *work)
2007{
2008        struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
2009                                               retrans_timer.work);
2010
2011        BT_DBG("chan %p", chan);
2012
2013        l2cap_chan_lock(chan);
2014
2015        if (!chan->conn) {
2016                l2cap_chan_unlock(chan);
2017                l2cap_chan_put(chan);
2018                return;
2019        }
2020
2021        l2cap_tx(chan, NULL, NULL, L2CAP_EV_RETRANS_TO);
2022        l2cap_chan_unlock(chan);
2023        l2cap_chan_put(chan);
2024}
2025
2026static void l2cap_streaming_send(struct l2cap_chan *chan,
2027                                 struct sk_buff_head *skbs)
2028{
2029        struct sk_buff *skb;
2030        struct l2cap_ctrl *control;
2031
2032        BT_DBG("chan %p, skbs %p", chan, skbs);
2033
2034        if (__chan_is_moving(chan))
2035                return;
2036
2037        skb_queue_splice_tail_init(skbs, &chan->tx_q);
2038
2039        while (!skb_queue_empty(&chan->tx_q)) {
2040
2041                skb = skb_dequeue(&chan->tx_q);
2042
2043                bt_cb(skb)->l2cap.retries = 1;
2044                control = &bt_cb(skb)->l2cap;
2045
2046                control->reqseq = 0;
2047                control->txseq = chan->next_tx_seq;
2048
2049                __pack_control(chan, control, skb);
2050
2051                if (chan->fcs == L2CAP_FCS_CRC16) {
2052                        u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
2053                        put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
2054                }
2055
2056                l2cap_do_send(chan, skb);
2057
2058                BT_DBG("Sent txseq %u", control->txseq);
2059
2060                chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
2061                chan->frames_sent++;
2062        }
2063}
2064
2065static int l2cap_ertm_send(struct l2cap_chan *chan)
2066{
2067        struct sk_buff *skb, *tx_skb;
2068        struct l2cap_ctrl *control;
2069        int sent = 0;
2070
2071        BT_DBG("chan %p", chan);
2072
2073        if (chan->state != BT_CONNECTED)
2074                return -ENOTCONN;
2075
2076        if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2077                return 0;
2078
2079        if (__chan_is_moving(chan))
2080                return 0;
2081
2082        while (chan->tx_send_head &&
2083               chan->unacked_frames < chan->remote_tx_win &&
2084               chan->tx_state == L2CAP_TX_STATE_XMIT) {
2085
2086                skb = chan->tx_send_head;
2087
2088                bt_cb(skb)->l2cap.retries = 1;
2089                control = &bt_cb(skb)->l2cap;
2090
2091                if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
2092                        control->final = 1;
2093
2094                control->reqseq = chan->buffer_seq;
2095                chan->last_acked_seq = chan->buffer_seq;
2096                control->txseq = chan->next_tx_seq;
2097
2098                __pack_control(chan, control, skb);
2099
2100                if (chan->fcs == L2CAP_FCS_CRC16) {
2101                        u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
2102                        put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
2103                }
2104
2105                /* Clone after data has been modified. Data is assumed to be
2106                   read-only (for locking purposes) on cloned sk_buffs.
2107                 */
2108                tx_skb = skb_clone(skb, GFP_KERNEL);
2109
2110                if (!tx_skb)
2111                        break;
2112
2113                __set_retrans_timer(chan);
2114
2115                chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
2116                chan->unacked_frames++;
2117                chan->frames_sent++;
2118                sent++;
2119
2120                if (skb_queue_is_last(&chan->tx_q, skb))
2121                        chan->tx_send_head = NULL;
2122                else
2123                        chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
2124
2125                l2cap_do_send(chan, tx_skb);
2126                BT_DBG("Sent txseq %u", control->txseq);
2127        }
2128
2129        BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent,
2130               chan->unacked_frames, skb_queue_len(&chan->tx_q));
2131
2132        return sent;
2133}
2134
2135static void l2cap_ertm_resend(struct l2cap_chan *chan)
2136{
2137        struct l2cap_ctrl control;
2138        struct sk_buff *skb;
2139        struct sk_buff *tx_skb;
2140        u16 seq;
2141
2142        BT_DBG("chan %p", chan);
2143
2144        if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2145                return;
2146
2147        if (__chan_is_moving(chan))
2148                return;
2149
2150        while (chan->retrans_list.head != L2CAP_SEQ_LIST_CLEAR) {
2151                seq = l2cap_seq_list_pop(&chan->retrans_list);
2152
2153                skb = l2cap_ertm_seq_in_queue(&chan->tx_q, seq);
2154                if (!skb) {
2155                        BT_DBG("Error: Can't retransmit seq %d, frame missing",
2156                               seq);
2157                        continue;
2158                }
2159
2160                bt_cb(skb)->l2cap.retries++;
2161                control = bt_cb(skb)->l2cap;
2162
2163                if (chan->max_tx != 0 &&
2164                    bt_cb(skb)->l2cap.retries > chan->max_tx) {
2165                        BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
2166                        l2cap_send_disconn_req(chan, ECONNRESET);
2167                        l2cap_seq_list_clear(&chan->retrans_list);
2168                        break;
2169                }
2170
2171                control.reqseq = chan->buffer_seq;
2172                if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
2173                        control.final = 1;
2174                else
2175                        control.final = 0;
2176
2177                if (skb_cloned(skb)) {
2178                        /* Cloned sk_buffs are read-only, so we need a
2179                         * writeable copy
2180                         */
2181                        tx_skb = skb_copy(skb, GFP_KERNEL);
2182                } else {
2183                        tx_skb = skb_clone(skb, GFP_KERNEL);
2184                }
2185
2186                if (!tx_skb) {
2187                        l2cap_seq_list_clear(&chan->retrans_list);
2188                        break;
2189                }
2190
2191                /* Update skb contents */
2192                if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
2193                        put_unaligned_le32(__pack_extended_control(&control),
2194                                           tx_skb->data + L2CAP_HDR_SIZE);
2195                } else {
2196                        put_unaligned_le16(__pack_enhanced_control(&control),
2197                                           tx_skb->data + L2CAP_HDR_SIZE);
2198                }
2199
2200                /* Update FCS */
2201                if (chan->fcs == L2CAP_FCS_CRC16) {
2202                        u16 fcs = crc16(0, (u8 *) tx_skb->data,
2203                                        tx_skb->len - L2CAP_FCS_SIZE);
2204                        put_unaligned_le16(fcs, skb_tail_pointer(tx_skb) -
2205                                                L2CAP_FCS_SIZE);
2206                }
2207
2208                l2cap_do_send(chan, tx_skb);
2209
2210                BT_DBG("Resent txseq %d", control.txseq);
2211
2212                chan->last_acked_seq = chan->buffer_seq;
2213        }
2214}
2215
2216static void l2cap_retransmit(struct l2cap_chan *chan,
2217                             struct l2cap_ctrl *control)
2218{
2219        BT_DBG("chan %p, control %p", chan, control);
2220
2221        l2cap_seq_list_append(&chan->retrans_list, control->reqseq);
2222        l2cap_ertm_resend(chan);
2223}
2224
2225static void l2cap_retransmit_all(struct l2cap_chan *chan,
2226                                 struct l2cap_ctrl *control)
2227{
2228        struct sk_buff *skb;
2229
2230        BT_DBG("chan %p, control %p", chan, control);
2231
2232        if (control->poll)
2233                set_bit(CONN_SEND_FBIT, &chan->conn_state);
2234
2235        l2cap_seq_list_clear(&chan->retrans_list);
2236
2237        if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2238                return;
2239
2240        if (chan->unacked_frames) {
2241                skb_queue_walk(&chan->tx_q, skb) {
2242                        if (bt_cb(skb)->l2cap.txseq == control->reqseq ||
2243                            skb == chan->tx_send_head)
2244                                break;
2245                }
2246
2247                skb_queue_walk_from(&chan->tx_q, skb) {
2248                        if (skb == chan->tx_send_head)
2249                                break;
2250
2251                        l2cap_seq_list_append(&chan->retrans_list,
2252                                              bt_cb(skb)->l2cap.txseq);
2253                }
2254
2255                l2cap_ertm_resend(chan);
2256        }
2257}
2258
2259static void l2cap_send_ack(struct l2cap_chan *chan)
2260{
2261        struct l2cap_ctrl control;
2262        u16 frames_to_ack = __seq_offset(chan, chan->buffer_seq,
2263                                         chan->last_acked_seq);
2264        int threshold;
2265
2266        BT_DBG("chan %p last_acked_seq %d buffer_seq %d",
2267               chan, chan->last_acked_seq, chan->buffer_seq);
2268
2269        memset(&control, 0, sizeof(control));
2270        control.sframe = 1;
2271
2272        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
2273            chan->rx_state == L2CAP_RX_STATE_RECV) {
2274                __clear_ack_timer(chan);
2275                control.super = L2CAP_SUPER_RNR;
2276                control.reqseq = chan->buffer_seq;
2277                l2cap_send_sframe(chan, &control);
2278        } else {
2279                if (!test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) {
2280                        l2cap_ertm_send(chan);
2281                        /* If any i-frames were sent, they included an ack */
2282                        if (chan->buffer_seq == chan->last_acked_seq)
2283                                frames_to_ack = 0;
2284                }
2285
2286                /* Ack now if the window is 3/4ths full.
2287                 * Calculate without mul or div
2288                 */
2289                threshold = chan->ack_win;
2290                threshold += threshold << 1;
2291                threshold >>= 2;
2292
2293                BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack,
2294                       threshold);
2295
2296                if (frames_to_ack >= threshold) {
2297                        __clear_ack_timer(chan);
2298                        control.super = L2CAP_SUPER_RR;
2299                        control.reqseq = chan->buffer_seq;
2300                        l2cap_send_sframe(chan, &control);
2301                        frames_to_ack = 0;
2302                }
2303
2304                if (frames_to_ack)
2305                        __set_ack_timer(chan);
2306        }
2307}
2308
2309static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
2310                                         struct msghdr *msg, int len,
2311                                         int count, struct sk_buff *skb)
2312{
2313        struct l2cap_conn *conn = chan->conn;
2314        struct sk_buff **frag;
2315        int sent = 0;
2316
2317        if (!copy_from_iter_full(skb_put(skb, count), count, &msg->msg_iter))
2318                return -EFAULT;
2319
2320        sent += count;
2321        len  -= count;
2322
2323        /* Continuation fragments (no L2CAP header) */
2324        frag = &skb_shinfo(skb)->frag_list;
2325        while (len) {
2326                struct sk_buff *tmp;
2327
2328                count = min_t(unsigned int, conn->mtu, len);
2329
2330                tmp = chan->ops->alloc_skb(chan, 0, count,
2331                                           msg->msg_flags & MSG_DONTWAIT);
2332                if (IS_ERR(tmp))
2333                        return PTR_ERR(tmp);
2334
2335                *frag = tmp;
2336
2337                if (!copy_from_iter_full(skb_put(*frag, count), count,
2338                                   &msg->msg_iter))
2339                        return -EFAULT;
2340
2341                sent += count;
2342                len  -= count;
2343
2344                skb->len += (*frag)->len;
2345                skb->data_len += (*frag)->len;
2346
2347                frag = &(*frag)->next;
2348        }
2349
2350        return sent;
2351}
2352
2353static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
2354                                                 struct msghdr *msg, size_t len)
2355{
2356        struct l2cap_conn *conn = chan->conn;
2357        struct sk_buff *skb;
2358        int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
2359        struct l2cap_hdr *lh;
2360
2361        BT_DBG("chan %p psm 0x%2.2x len %zu", chan,
2362               __le16_to_cpu(chan->psm), len);
2363
2364        count = min_t(unsigned int, (conn->mtu - hlen), len);
2365
2366        skb = chan->ops->alloc_skb(chan, hlen, count,
2367                                   msg->msg_flags & MSG_DONTWAIT);
2368        if (IS_ERR(skb))
2369                return skb;
2370
2371        /* Create L2CAP header */
2372        lh = skb_put(skb, L2CAP_HDR_SIZE);
2373        lh->cid = cpu_to_le16(chan->dcid);
2374        lh->len = cpu_to_le16(len + L2CAP_PSMLEN_SIZE);
2375        put_unaligned(chan->psm, (__le16 *) skb_put(skb, L2CAP_PSMLEN_SIZE));
2376
2377        err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2378        if (unlikely(err < 0)) {
2379                kfree_skb(skb);
2380                return ERR_PTR(err);
2381        }
2382        return skb;
2383}
2384
2385static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
2386                                              struct msghdr *msg, size_t len)
2387{
2388        struct l2cap_conn *conn = chan->conn;
2389        struct sk_buff *skb;
2390        int err, count;
2391        struct l2cap_hdr *lh;
2392
2393        BT_DBG("chan %p len %zu", chan, len);
2394
2395        count = min_t(unsigned int, (conn->mtu - L2CAP_HDR_SIZE), len);
2396
2397        skb = chan->ops->alloc_skb(chan, L2CAP_HDR_SIZE, count,
2398                                   msg->msg_flags & MSG_DONTWAIT);
2399        if (IS_ERR(skb))
2400                return skb;
2401
2402        /* Create L2CAP header */
2403        lh = skb_put(skb, L2CAP_HDR_SIZE);
2404        lh->cid = cpu_to_le16(chan->dcid);
2405        lh->len = cpu_to_le16(len);
2406
2407        err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2408        if (unlikely(err < 0)) {
2409                kfree_skb(skb);
2410                return ERR_PTR(err);
2411        }
2412        return skb;
2413}
2414
2415static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
2416                                               struct msghdr *msg, size_t len,
2417                                               u16 sdulen)
2418{
2419        struct l2cap_conn *conn = chan->conn;
2420        struct sk_buff *skb;
2421        int err, count, hlen;
2422        struct l2cap_hdr *lh;
2423
2424        BT_DBG("chan %p len %zu", chan, len);
2425
2426        if (!conn)
2427                return ERR_PTR(-ENOTCONN);
2428
2429        hlen = __ertm_hdr_size(chan);
2430
2431        if (sdulen)
2432                hlen += L2CAP_SDULEN_SIZE;
2433
2434        if (chan->fcs == L2CAP_FCS_CRC16)
2435                hlen += L2CAP_FCS_SIZE;
2436
2437        count = min_t(unsigned int, (conn->mtu - hlen), len);
2438
2439        skb = chan->ops->alloc_skb(chan, hlen, count,
2440                                   msg->msg_flags & MSG_DONTWAIT);
2441        if (IS_ERR(skb))
2442                return skb;
2443
2444        /* Create L2CAP header */
2445        lh = skb_put(skb, L2CAP_HDR_SIZE);
2446        lh->cid = cpu_to_le16(chan->dcid);
2447        lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2448
2449        /* Control header is populated later */
2450        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
2451                put_unaligned_le32(0, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
2452        else
2453                put_unaligned_le16(0, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
2454
2455        if (sdulen)
2456                put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2457
2458        err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2459        if (unlikely(err < 0)) {
2460                kfree_skb(skb);
2461                return ERR_PTR(err);
2462        }
2463
2464        bt_cb(skb)->l2cap.fcs = chan->fcs;
2465        bt_cb(skb)->l2cap.retries = 0;
2466        return skb;
2467}
2468
2469static int l2cap_segment_sdu(struct l2cap_chan *chan,
2470                             struct sk_buff_head *seg_queue,
2471                             struct msghdr *msg, size_t len)
2472{
2473        struct sk_buff *skb;
2474        u16 sdu_len;
2475        size_t pdu_len;
2476        u8 sar;
2477
2478        BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2479
2480        /* It is critical that ERTM PDUs fit in a single HCI fragment,
2481         * so fragmented skbs are not used.  The HCI layer's handling
2482         * of fragmented skbs is not compatible with ERTM's queueing.
2483         */
2484
2485        /* PDU size is derived from the HCI MTU */
2486        pdu_len = chan->conn->mtu;
2487
2488        /* Constrain PDU size for BR/EDR connections */
2489        if (!chan->hs_hcon)
2490                pdu_len = min_t(size_t, pdu_len, L2CAP_BREDR_MAX_PAYLOAD);
2491
2492        /* Adjust for largest possible L2CAP overhead. */
2493        if (chan->fcs)
2494                pdu_len -= L2CAP_FCS_SIZE;
2495
2496        pdu_len -= __ertm_hdr_size(chan);
2497
2498        /* Remote device may have requested smaller PDUs */
2499        pdu_len = min_t(size_t, pdu_len, chan->remote_mps);
2500
2501        if (len <= pdu_len) {
2502                sar = L2CAP_SAR_UNSEGMENTED;
2503                sdu_len = 0;
2504                pdu_len = len;
2505        } else {
2506                sar = L2CAP_SAR_START;
2507                sdu_len = len;
2508        }
2509
2510        while (len > 0) {
2511                skb = l2cap_create_iframe_pdu(chan, msg, pdu_len, sdu_len);
2512
2513                if (IS_ERR(skb)) {
2514                        __skb_queue_purge(seg_queue);
2515                        return PTR_ERR(skb);
2516                }
2517
2518                bt_cb(skb)->l2cap.sar = sar;
2519                __skb_queue_tail(seg_queue, skb);
2520
2521                len -= pdu_len;
2522                if (sdu_len)
2523                        sdu_len = 0;
2524
2525                if (len <= pdu_len) {
2526                        sar = L2CAP_SAR_END;
2527                        pdu_len = len;
2528                } else {
2529                        sar = L2CAP_SAR_CONTINUE;
2530                }
2531        }
2532
2533        return 0;
2534}
2535
2536static struct sk_buff *l2cap_create_le_flowctl_pdu(struct l2cap_chan *chan,
2537                                                   struct msghdr *msg,
2538                                                   size_t len, u16 sdulen)
2539{
2540        struct l2cap_conn *conn = chan->conn;
2541        struct sk_buff *skb;
2542        int err, count, hlen;
2543        struct l2cap_hdr *lh;
2544
2545        BT_DBG("chan %p len %zu", chan, len);
2546
2547        if (!conn)
2548                return ERR_PTR(-ENOTCONN);
2549
2550        hlen = L2CAP_HDR_SIZE;
2551
2552        if (sdulen)
2553                hlen += L2CAP_SDULEN_SIZE;
2554
2555        count = min_t(unsigned int, (conn->mtu - hlen), len);
2556
2557        skb = chan->ops->alloc_skb(chan, hlen, count,
2558                                   msg->msg_flags & MSG_DONTWAIT);
2559        if (IS_ERR(skb))
2560                return skb;
2561
2562        /* Create L2CAP header */
2563        lh = skb_put(skb, L2CAP_HDR_SIZE);
2564        lh->cid = cpu_to_le16(chan->dcid);
2565        lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2566
2567        if (sdulen)
2568                put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2569
2570        err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2571        if (unlikely(err < 0)) {
2572                kfree_skb(skb);
2573                return ERR_PTR(err);
2574        }
2575
2576        return skb;
2577}
2578
2579static int l2cap_segment_le_sdu(struct l2cap_chan *chan,
2580                                struct sk_buff_head *seg_queue,
2581                                struct msghdr *msg, size_t len)
2582{
2583        struct sk_buff *skb;
2584        size_t pdu_len;
2585        u16 sdu_len;
2586
2587        BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2588
2589        sdu_len = len;
2590        pdu_len = chan->remote_mps - L2CAP_SDULEN_SIZE;
2591
2592        while (len > 0) {
2593                if (len <= pdu_len)
2594                        pdu_len = len;
2595
2596                skb = l2cap_create_le_flowctl_pdu(chan, msg, pdu_len, sdu_len);
2597                if (IS_ERR(skb)) {
2598                        __skb_queue_purge(seg_queue);
2599                        return PTR_ERR(skb);
2600                }
2601
2602                __skb_queue_tail(seg_queue, skb);
2603
2604                len -= pdu_len;
2605
2606                if (sdu_len) {
2607                        sdu_len = 0;
2608                        pdu_len += L2CAP_SDULEN_SIZE;
2609                }
2610        }
2611
2612        return 0;
2613}
2614
2615static void l2cap_le_flowctl_send(struct l2cap_chan *chan)
2616{
2617        int sent = 0;
2618
2619        BT_DBG("chan %p", chan);
2620
2621        while (chan->tx_credits && !skb_queue_empty(&chan->tx_q)) {
2622                l2cap_do_send(chan, skb_dequeue(&chan->tx_q));
2623                chan->tx_credits--;
2624                sent++;
2625        }
2626
2627        BT_DBG("Sent %d credits %u queued %u", sent, chan->tx_credits,
2628               skb_queue_len(&chan->tx_q));
2629}
2630
2631int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
2632{
2633        struct sk_buff *skb;
2634        int err;
2635        struct sk_buff_head seg_queue;
2636
2637        if (!chan->conn)
2638                return -ENOTCONN;
2639
2640        /* Connectionless channel */
2641        if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
2642                skb = l2cap_create_connless_pdu(chan, msg, len);
2643                if (IS_ERR(skb))
2644                        return PTR_ERR(skb);
2645
2646                /* Channel lock is released before requesting new skb and then
2647                 * reacquired thus we need to recheck channel state.
2648                 */
2649                if (chan->state != BT_CONNECTED) {
2650                        kfree_skb(skb);
2651                        return -ENOTCONN;
2652                }
2653
2654                l2cap_do_send(chan, skb);
2655                return len;
2656        }
2657
2658        switch (chan->mode) {
2659        case L2CAP_MODE_LE_FLOWCTL:
2660        case L2CAP_MODE_EXT_FLOWCTL:
2661                /* Check outgoing MTU */
2662                if (len > chan->omtu)
2663                        return -EMSGSIZE;
2664
2665                __skb_queue_head_init(&seg_queue);
2666
2667                err = l2cap_segment_le_sdu(chan, &seg_queue, msg, len);
2668
2669                if (chan->state != BT_CONNECTED) {
2670                        __skb_queue_purge(&seg_queue);
2671                        err = -ENOTCONN;
2672                }
2673
2674                if (err)
2675                        return err;
2676
2677                skb_queue_splice_tail_init(&seg_queue, &chan->tx_q);
2678
2679                l2cap_le_flowctl_send(chan);
2680
2681                if (!chan->tx_credits)
2682                        chan->ops->suspend(chan);
2683
2684                err = len;
2685
2686                break;
2687
2688        case L2CAP_MODE_BASIC:
2689                /* Check outgoing MTU */
2690                if (len > chan->omtu)
2691                        return -EMSGSIZE;
2692
2693                /* Create a basic PDU */
2694                skb = l2cap_create_basic_pdu(chan, msg, len);
2695                if (IS_ERR(skb))
2696                        return PTR_ERR(skb);
2697
2698                /* Channel lock is released before requesting new skb and then
2699                 * reacquired thus we need to recheck channel state.
2700                 */
2701                if (chan->state != BT_CONNECTED) {
2702                        kfree_skb(skb);
2703                        return -ENOTCONN;
2704                }
2705
2706                l2cap_do_send(chan, skb);
2707                err = len;
2708                break;
2709
2710        case L2CAP_MODE_ERTM:
2711        case L2CAP_MODE_STREAMING:
2712                /* Check outgoing MTU */
2713                if (len > chan->omtu) {
2714                        err = -EMSGSIZE;
2715                        break;
2716                }
2717
2718                __skb_queue_head_init(&seg_queue);
2719
2720                /* Do segmentation before calling in to the state machine,
2721                 * since it's possible to block while waiting for memory
2722                 * allocation.
2723                 */
2724                err = l2cap_segment_sdu(chan, &seg_queue, msg, len);
2725
2726                /* The channel could have been closed while segmenting,
2727                 * check that it is still connected.
2728                 */
2729                if (chan->state != BT_CONNECTED) {
2730                        __skb_queue_purge(&seg_queue);
2731                        err = -ENOTCONN;
2732                }
2733
2734                if (err)
2735                        break;
2736
2737                if (chan->mode == L2CAP_MODE_ERTM)
2738                        l2cap_tx(chan, NULL, &seg_queue, L2CAP_EV_DATA_REQUEST);
2739                else
2740                        l2cap_streaming_send(chan, &seg_queue);
2741
2742                err = len;
2743
2744                /* If the skbs were not queued for sending, they'll still be in
2745                 * seg_queue and need to be purged.
2746                 */
2747                __skb_queue_purge(&seg_queue);
2748                break;
2749
2750        default:
2751                BT_DBG("bad state %1.1x", chan->mode);
2752                err = -EBADFD;
2753        }
2754
2755        return err;
2756}
2757EXPORT_SYMBOL_GPL(l2cap_chan_send);
2758
2759static void l2cap_send_srej(struct l2cap_chan *chan, u16 txseq)
2760{
2761        struct l2cap_ctrl control;
2762        u16 seq;
2763
2764        BT_DBG("chan %p, txseq %u", chan, txseq);
2765
2766        memset(&control, 0, sizeof(control));
2767        control.sframe = 1;
2768        control.super = L2CAP_SUPER_SREJ;
2769
2770        for (seq = chan->expected_tx_seq; seq != txseq;
2771             seq = __next_seq(chan, seq)) {
2772                if (!l2cap_ertm_seq_in_queue(&chan->srej_q, seq)) {
2773                        control.reqseq = seq;
2774                        l2cap_send_sframe(chan, &control);
2775                        l2cap_seq_list_append(&chan->srej_list, seq);
2776                }
2777        }
2778
2779        chan->expected_tx_seq = __next_seq(chan, txseq);
2780}
2781
2782static void l2cap_send_srej_tail(struct l2cap_chan *chan)
2783{
2784        struct l2cap_ctrl control;
2785
2786        BT_DBG("chan %p", chan);
2787
2788        if (chan->srej_list.tail == L2CAP_SEQ_LIST_CLEAR)
2789                return;
2790
2791        memset(&control, 0, sizeof(control));
2792        control.sframe = 1;
2793        control.super = L2CAP_SUPER_SREJ;
2794        control.reqseq = chan->srej_list.tail;
2795        l2cap_send_sframe(chan, &control);
2796}
2797
2798static void l2cap_send_srej_list(struct l2cap_chan *chan, u16 txseq)
2799{
2800        struct l2cap_ctrl control;
2801        u16 initial_head;
2802        u16 seq;
2803
2804        BT_DBG("chan %p, txseq %u", chan, txseq);
2805
2806        memset(&control, 0, sizeof(control));
2807        control.sframe = 1;
2808        control.super = L2CAP_SUPER_SREJ;
2809
2810        /* Capture initial list head to allow only one pass through the list. */
2811        initial_head = chan->srej_list.head;
2812
2813        do {
2814                seq = l2cap_seq_list_pop(&chan->srej_list);
2815                if (seq == txseq || seq == L2CAP_SEQ_LIST_CLEAR)
2816                        break;
2817
2818                control.reqseq = seq;
2819                l2cap_send_sframe(chan, &control);
2820                l2cap_seq_list_append(&chan->srej_list, seq);
2821        } while (chan->srej_list.head != initial_head);
2822}
2823
2824static void l2cap_process_reqseq(struct l2cap_chan *chan, u16 reqseq)
2825{
2826        struct sk_buff *acked_skb;
2827        u16 ackseq;
2828
2829        BT_DBG("chan %p, reqseq %u", chan, reqseq);
2830
2831        if (chan->unacked_frames == 0 || reqseq == chan->expected_ack_seq)
2832                return;
2833
2834        BT_DBG("expected_ack_seq %u, unacked_frames %u",
2835               chan->expected_ack_seq, chan->unacked_frames);
2836
2837        for (ackseq = chan->expected_ack_seq; ackseq != reqseq;
2838             ackseq = __next_seq(chan, ackseq)) {
2839
2840                acked_skb = l2cap_ertm_seq_in_queue(&chan->tx_q, ackseq);
2841                if (acked_skb) {
2842                        skb_unlink(acked_skb, &chan->tx_q);
2843                        kfree_skb(acked_skb);
2844                        chan->unacked_frames--;
2845                }
2846        }
2847
2848        chan->expected_ack_seq = reqseq;
2849
2850        if (chan->unacked_frames == 0)
2851                __clear_retrans_timer(chan);
2852
2853        BT_DBG("unacked_frames %u", chan->unacked_frames);
2854}
2855
2856static void l2cap_abort_rx_srej_sent(struct l2cap_chan *chan)
2857{
2858        BT_DBG("chan %p", chan);
2859
2860        chan->expected_tx_seq = chan->buffer_seq;
2861        l2cap_seq_list_clear(&chan->srej_list);
2862        skb_queue_purge(&chan->srej_q);
2863        chan->rx_state = L2CAP_RX_STATE_RECV;
2864}
2865
2866static void l2cap_tx_state_xmit(struct l2cap_chan *chan,
2867                                struct l2cap_ctrl *control,
2868                                struct sk_buff_head *skbs, u8 event)
2869{
2870        BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2871               event);
2872
2873        switch (event) {
2874        case L2CAP_EV_DATA_REQUEST:
2875                if (chan->tx_send_head == NULL)
2876                        chan->tx_send_head = skb_peek(skbs);
2877
2878                skb_queue_splice_tail_init(skbs, &chan->tx_q);
2879                l2cap_ertm_send(chan);
2880                break;
2881        case L2CAP_EV_LOCAL_BUSY_DETECTED:
2882                BT_DBG("Enter LOCAL_BUSY");
2883                set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2884
2885                if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2886                        /* The SREJ_SENT state must be aborted if we are to
2887                         * enter the LOCAL_BUSY state.
2888                         */
2889                        l2cap_abort_rx_srej_sent(chan);
2890                }
2891
2892                l2cap_send_ack(chan);
2893
2894                break;
2895        case L2CAP_EV_LOCAL_BUSY_CLEAR:
2896                BT_DBG("Exit LOCAL_BUSY");
2897                clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2898
2899                if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2900                        struct l2cap_ctrl local_control;
2901
2902                        memset(&local_control, 0, sizeof(local_control));
2903                        local_control.sframe = 1;
2904                        local_control.super = L2CAP_SUPER_RR;
2905                        local_control.poll = 1;
2906                        local_control.reqseq = chan->buffer_seq;
2907                        l2cap_send_sframe(chan, &local_control);
2908
2909                        chan->retry_count = 1;
2910                        __set_monitor_timer(chan);
2911                        chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2912                }
2913                break;
2914        case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2915                l2cap_process_reqseq(chan, control->reqseq);
2916                break;
2917        case L2CAP_EV_EXPLICIT_POLL:
2918                l2cap_send_rr_or_rnr(chan, 1);
2919                chan->retry_count = 1;
2920                __set_monitor_timer(chan);
2921                __clear_ack_timer(chan);
2922                chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2923                break;
2924        case L2CAP_EV_RETRANS_TO:
2925                l2cap_send_rr_or_rnr(chan, 1);
2926                chan->retry_count = 1;
2927                __set_monitor_timer(chan);
2928                chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2929                break;
2930        case L2CAP_EV_RECV_FBIT:
2931                /* Nothing to process */
2932                break;
2933        default:
2934                break;
2935        }
2936}
2937
2938static void l2cap_tx_state_wait_f(struct l2cap_chan *chan,
2939                                  struct l2cap_ctrl *control,
2940                                  struct sk_buff_head *skbs, u8 event)
2941{
2942        BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2943               event);
2944
2945        switch (event) {
2946        case L2CAP_EV_DATA_REQUEST:
2947                if (chan->tx_send_head == NULL)
2948                        chan->tx_send_head = skb_peek(skbs);
2949                /* Queue data, but don't send. */
2950                skb_queue_splice_tail_init(skbs, &chan->tx_q);
2951                break;
2952        case L2CAP_EV_LOCAL_BUSY_DETECTED:
2953                BT_DBG("Enter LOCAL_BUSY");
2954                set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2955
2956                if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2957                        /* The SREJ_SENT state must be aborted if we are to
2958                         * enter the LOCAL_BUSY state.
2959                         */
2960                        l2cap_abort_rx_srej_sent(chan);
2961                }
2962
2963                l2cap_send_ack(chan);
2964
2965                break;
2966        case L2CAP_EV_LOCAL_BUSY_CLEAR:
2967                BT_DBG("Exit LOCAL_BUSY");
2968                clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2969
2970                if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2971                        struct l2cap_ctrl local_control;
2972                        memset(&local_control, 0, sizeof(local_control));
2973                        local_control.sframe = 1;
2974                        local_control.super = L2CAP_SUPER_RR;
2975                        local_control.poll = 1;
2976                        local_control.reqseq = chan->buffer_seq;
2977                        l2cap_send_sframe(chan, &local_control);
2978
2979                        chan->retry_count = 1;
2980                        __set_monitor_timer(chan);
2981                        chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2982                }
2983                break;
2984        case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2985                l2cap_process_reqseq(chan, control->reqseq);
2986
2987                /* Fall through */
2988
2989        case L2CAP_EV_RECV_FBIT:
2990                if (control && control->final) {
2991                        __clear_monitor_timer(chan);
2992                        if (chan->unacked_frames > 0)
2993                                __set_retrans_timer(chan);
2994                        chan->retry_count = 0;
2995                        chan->tx_state = L2CAP_TX_STATE_XMIT;
2996                        BT_DBG("recv fbit tx_state 0x2.2%x", chan->tx_state);
2997                }
2998                break;
2999        case L2CAP_EV_EXPLICIT_POLL:
3000                /* Ignore */
3001                break;
3002        case L2CAP_EV_MONITOR_TO:
3003                if (chan->max_tx == 0 || chan->retry_count < chan->max_tx) {
3004                        l2cap_send_rr_or_rnr(chan, 1);
3005                        __set_monitor_timer(chan);
3006                        chan->retry_count++;
3007                } else {
3008                        l2cap_send_disconn_req(chan, ECONNABORTED);
3009                }
3010                break;
3011        default:
3012                break;
3013        }
3014}
3015
3016static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
3017                     struct sk_buff_head *skbs, u8 event)
3018{
3019        BT_DBG("chan %p, control %p, skbs %p, event %d, state %d",
3020               chan, control, skbs, event, chan->tx_state);
3021
3022        switch (chan->tx_state) {
3023        case L2CAP_TX_STATE_XMIT:
3024                l2cap_tx_state_xmit(chan, control, skbs, event);
3025                break;
3026        case L2CAP_TX_STATE_WAIT_F:
3027                l2cap_tx_state_wait_f(chan, control, skbs, event);
3028                break;
3029        default:
3030                /* Ignore event */
3031                break;
3032        }
3033}
3034
3035static void l2cap_pass_to_tx(struct l2cap_chan *chan,
3036                             struct l2cap_ctrl *control)
3037{
3038        BT_DBG("chan %p, control %p", chan, control);
3039        l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_REQSEQ_AND_FBIT);
3040}
3041
3042static void l2cap_pass_to_tx_fbit(struct l2cap_chan *chan,
3043                                  struct l2cap_ctrl *control)
3044{
3045        BT_DBG("chan %p, control %p", chan, control);
3046        l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_FBIT);
3047}
3048
3049/* Copy frame to all raw sockets on that connection */
3050static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
3051{
3052        struct sk_buff *nskb;
3053        struct l2cap_chan *chan;
3054
3055        BT_DBG("conn %p", conn);
3056
3057        mutex_lock(&conn->chan_lock);
3058
3059        list_for_each_entry(chan, &conn->chan_l, list) {
3060                if (chan->chan_type != L2CAP_CHAN_RAW)
3061                        continue;
3062
3063                /* Don't send frame to the channel it came from */
3064                if (bt_cb(skb)->l2cap.chan == chan)
3065                        continue;
3066
3067                nskb = skb_clone(skb, GFP_KERNEL);
3068                if (!nskb)
3069                        continue;
3070                if (chan->ops->recv(chan, nskb))
3071                        kfree_skb(nskb);
3072        }
3073
3074        mutex_unlock(&conn->chan_lock);
3075}
3076
3077/* ---- L2CAP signalling commands ---- */
3078static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, u8 code,
3079                                       u8 ident, u16 dlen, void *data)
3080{
3081        struct sk_buff *skb, **frag;
3082        struct l2cap_cmd_hdr *cmd;
3083        struct l2cap_hdr *lh;
3084        int len, count;
3085
3086        BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u",
3087               conn, code, ident, dlen);
3088
3089        if (conn->mtu < L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE)
3090                return NULL;
3091
3092        len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
3093        count = min_t(unsigned int, conn->mtu, len);
3094
3095        skb = bt_skb_alloc(count, GFP_KERNEL);
3096        if (!skb)
3097                return NULL;
3098
3099        lh = skb_put(skb, L2CAP_HDR_SIZE);
3100        lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
3101
3102        if (conn->hcon->type == LE_LINK)
3103                lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
3104        else
3105                lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
3106
3107        cmd = skb_put(skb, L2CAP_CMD_HDR_SIZE);
3108        cmd->code  = code;
3109        cmd->ident = ident;
3110        cmd->len   = cpu_to_le16(dlen);
3111
3112        if (dlen) {
3113                count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
3114                skb_put_data(skb, data, count);
3115                data += count;
3116        }
3117
3118        len -= skb->len;
3119
3120        /* Continuation fragments (no L2CAP header) */
3121        frag = &skb_shinfo(skb)->frag_list;
3122        while (len) {
3123                count = min_t(unsigned int, conn->mtu, len);
3124
3125                *frag = bt_skb_alloc(count, GFP_KERNEL);
3126                if (!*frag)
3127                        goto fail;
3128
3129                skb_put_data(*frag, data, count);
3130
3131                len  -= count;
3132                data += count;
3133
3134                frag = &(*frag)->next;
3135        }
3136
3137        return skb;
3138
3139fail:
3140        kfree_skb(skb);
3141        return NULL;
3142}
3143
3144static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen,
3145                                     unsigned long *val)
3146{
3147        struct l2cap_conf_opt *opt = *ptr;
3148        int len;
3149
3150        len = L2CAP_CONF_OPT_SIZE + opt->len;
3151        *ptr += len;
3152
3153        *type = opt->type;
3154        *olen = opt->len;
3155
3156        switch (opt->len) {
3157        case 1:
3158                *val = *((u8 *) opt->val);
3159                break;
3160
3161        case 2:
3162                *val = get_unaligned_le16(opt->val);
3163                break;
3164
3165        case 4:
3166                *val = get_unaligned_le32(opt->val);
3167                break;
3168
3169        default:
3170                *val = (unsigned long) opt->val;
3171                break;
3172        }
3173
3174        BT_DBG("type 0x%2.2x len %u val 0x%lx", *type, opt->len, *val);
3175        return len;
3176}
3177
3178static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val, size_t size)
3179{
3180        struct l2cap_conf_opt *opt = *ptr;
3181
3182        BT_DBG("type 0x%2.2x len %u val 0x%lx", type, len, val);
3183
3184        if (size < L2CAP_CONF_OPT_SIZE + len)
3185                return;
3186
3187        opt->type = type;
3188        opt->len  = len;
3189
3190        switch (len) {
3191        case 1:
3192                *((u8 *) opt->val)  = val;
3193                break;
3194
3195        case 2:
3196                put_unaligned_le16(val, opt->val);
3197                break;
3198
3199        case 4:
3200                put_unaligned_le32(val, opt->val);
3201                break;
3202
3203        default:
3204                memcpy(opt->val, (void *) val, len);
3205                break;
3206        }
3207
3208        *ptr += L2CAP_CONF_OPT_SIZE + len;
3209}
3210
3211static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan, size_t size)
3212{
3213        struct l2cap_conf_efs efs;
3214
3215        switch (chan->mode) {
3216        case L2CAP_MODE_ERTM:
3217                efs.id          = chan->local_id;
3218                efs.stype       = chan->local_stype;
3219                efs.msdu        = cpu_to_le16(chan->local_msdu);
3220                efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
3221                efs.acc_lat     = cpu_to_le32(L2CAP_DEFAULT_ACC_LAT);
3222                efs.flush_to    = cpu_to_le32(L2CAP_EFS_DEFAULT_FLUSH_TO);
3223                break;
3224
3225        case L2CAP_MODE_STREAMING:
3226                efs.id          = 1;
3227                efs.stype       = L2CAP_SERV_BESTEFFORT;
3228                efs.msdu        = cpu_to_le16(chan->local_msdu);
3229                efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
3230                efs.acc_lat     = 0;
3231                efs.flush_to    = 0;
3232                break;
3233
3234        default:
3235                return;
3236        }
3237
3238        l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
3239                           (unsigned long) &efs, size);
3240}
3241
3242static void l2cap_ack_timeout(struct work_struct *work)
3243{
3244        struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
3245                                               ack_timer.work);
3246        u16 frames_to_ack;
3247
3248        BT_DBG("chan %p", chan);
3249
3250        l2cap_chan_lock(chan);
3251
3252        frames_to_ack = __seq_offset(chan, chan->buffer_seq,
3253                                     chan->last_acked_seq);
3254
3255        if (frames_to_ack)
3256                l2cap_send_rr_or_rnr(chan, 0);
3257
3258        l2cap_chan_unlock(chan);
3259        l2cap_chan_put(chan);
3260}
3261
3262int l2cap_ertm_init(struct l2cap_chan *chan)
3263{
3264        int err;
3265
3266        chan->next_tx_seq = 0;
3267        chan->expected_tx_seq = 0;
3268        chan->expected_ack_seq = 0;
3269        chan->unacked_frames = 0;
3270        chan->buffer_seq = 0;
3271        chan->frames_sent = 0;
3272        chan->last_acked_seq = 0;
3273        chan->sdu = NULL;
3274        chan->sdu_last_frag = NULL;
3275        chan->sdu_len = 0;
3276
3277        skb_queue_head_init(&chan->tx_q);
3278
3279        chan->local_amp_id = AMP_ID_BREDR;
3280        chan->move_id = AMP_ID_BREDR;
3281        chan->move_state = L2CAP_MOVE_STABLE;
3282        chan->move_role = L2CAP_MOVE_ROLE_NONE;
3283
3284        if (chan->mode != L2CAP_MODE_ERTM)
3285                return 0;
3286
3287        chan->rx_state = L2CAP_RX_STATE_RECV;
3288        chan->tx_state = L2CAP_TX_STATE_XMIT;
3289
3290        INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
3291        INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
3292        INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
3293
3294        skb_queue_head_init(&chan->srej_q);
3295
3296        err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
3297        if (err < 0)
3298                return err;
3299
3300        err = l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win);
3301        if (err < 0)
3302                l2cap_seq_list_free(&chan->srej_list);
3303
3304        return err;
3305}
3306
3307static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
3308{
3309        switch (mode) {
3310        case L2CAP_MODE_STREAMING:
3311        case L2CAP_MODE_ERTM:
3312                if (l2cap_mode_supported(mode, remote_feat_mask))
3313                        return mode;
3314                /* fall through */
3315        default:
3316                return L2CAP_MODE_BASIC;
3317        }
3318}
3319
3320static inline bool __l2cap_ews_supported(struct l2cap_conn *conn)
3321{
3322        return ((conn->local_fixed_chan & L2CAP_FC_A2MP) &&
3323                (conn->feat_mask & L2CAP_FEAT_EXT_WINDOW));
3324}
3325
3326static inline bool __l2cap_efs_supported(struct l2cap_conn *conn)
3327{
3328        return ((conn->local_fixed_chan & L2CAP_FC_A2MP) &&
3329                (conn->feat_mask & L2CAP_FEAT_EXT_FLOW));
3330}
3331
3332static void __l2cap_set_ertm_timeouts(struct l2cap_chan *chan,
3333                                      struct l2cap_conf_rfc *rfc)
3334{
3335        if (chan->local_amp_id != AMP_ID_BREDR && chan->hs_hcon) {
3336                u64 ertm_to = chan->hs_hcon->hdev->amp_be_flush_to;
3337
3338                /* Class 1 devices have must have ERTM timeouts
3339                 * exceeding the Link Supervision Timeout.  The
3340                 * default Link Supervision Timeout for AMP
3341                 * controllers is 10 seconds.
3342                 *
3343                 * Class 1 devices use 0xffffffff for their
3344                 * best-effort flush timeout, so the clamping logic
3345                 * will result in a timeout that meets the above
3346                 * requirement.  ERTM timeouts are 16-bit values, so
3347                 * the maximum timeout is 65.535 seconds.
3348                 */
3349
3350                /* Convert timeout to milliseconds and round */
3351                ertm_to = DIV_ROUND_UP_ULL(ertm_to, 1000);
3352
3353                /* This is the recommended formula for class 2 devices
3354                 * that start ERTM timers when packets are sent to the
3355                 * controller.
3356                 */
3357                ertm_to = 3 * ertm_to + 500;
3358
3359                if (ertm_to > 0xffff)
3360                        ertm_to = 0xffff;
3361
3362                rfc->retrans_timeout = cpu_to_le16((u16) ertm_to);
3363                rfc->monitor_timeout = rfc->retrans_timeout;
3364        } else {
3365                rfc->retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
3366                rfc->monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
3367        }
3368}
3369
3370static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
3371{
3372        if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
3373            __l2cap_ews_supported(chan->conn)) {
3374                /* use extended control field */
3375                set_bit(FLAG_EXT_CTRL, &chan->flags);
3376                chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3377        } else {
3378                chan->tx_win = min_t(u16, chan->tx_win,
3379                                     L2CAP_DEFAULT_TX_WINDOW);
3380                chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
3381        }
3382        chan->ack_win = chan->tx_win;
3383}
3384
3385static void l2cap_mtu_auto(struct l2cap_chan *chan)
3386{
3387        struct hci_conn *conn = chan->conn->hcon;
3388
3389        chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3390
3391        /* The 2-DH1 packet has between 2 and 56 information bytes
3392         * (including the 2-byte payload header)
3393         */
3394        if (!(conn->pkt_type & HCI_2DH1))
3395                chan->imtu = 54;
3396
3397        /* The 3-DH1 packet has between 2 and 85 information bytes
3398         * (including the 2-byte payload header)
3399         */
3400        if (!(conn->pkt_type & HCI_3DH1))
3401                chan->imtu = 83;
3402
3403        /* The 2-DH3 packet has between 2 and 369 information bytes
3404         * (including the 2-byte payload header)
3405         */
3406        if (!(conn->pkt_type & HCI_2DH3))
3407                chan->imtu = 367;
3408
3409        /* The 3-DH3 packet has between 2 and 554 information bytes
3410         * (including the 2-byte payload header)
3411         */
3412        if (!(conn->pkt_type & HCI_3DH3))
3413                chan->imtu = 552;
3414
3415        /* The 2-DH5 packet has between 2 and 681 information bytes
3416         * (including the 2-byte payload header)
3417         */
3418        if (!(conn->pkt_type & HCI_2DH5))
3419                chan->imtu = 679;
3420
3421        /* The 3-DH5 packet has between 2 and 1023 information bytes
3422         * (including the 2-byte payload header)
3423         */
3424        if (!(conn->pkt_type & HCI_3DH5))
3425                chan->imtu = 1021;
3426}
3427
3428static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
3429{
3430        struct l2cap_conf_req *req = data;
3431        struct l2cap_conf_rfc rfc = { .mode = chan->mode };
3432        void *ptr = req->data;
3433        void *endptr = data + data_size;
3434        u16 size;
3435
3436        BT_DBG("chan %p", chan);
3437
3438        if (chan->num_conf_req || chan->num_conf_rsp)
3439                goto done;
3440
3441        switch (chan->mode) {
3442        case L2CAP_MODE_STREAMING:
3443        case L2CAP_MODE_ERTM:
3444                if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
3445                        break;
3446
3447                if (__l2cap_efs_supported(chan->conn))
3448                        set_bit(FLAG_EFS_ENABLE, &chan->flags);
3449
3450                /* fall through */
3451        default:
3452                chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
3453                break;
3454        }
3455
3456done:
3457        if (chan->imtu != L2CAP_DEFAULT_MTU) {
3458                if (!chan->imtu)
3459                        l2cap_mtu_auto(chan);
3460                l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu,
3461                                   endptr - ptr);
3462        }
3463
3464        switch (chan->mode) {
3465        case L2CAP_MODE_BASIC:
3466                if (disable_ertm)
3467                        break;
3468
3469                if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
3470                    !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
3471                        break;
3472
3473                rfc.mode            = L2CAP_MODE_BASIC;
3474                rfc.txwin_size      = 0;
3475                rfc.max_transmit    = 0;
3476                rfc.retrans_timeout = 0;
3477                rfc.monitor_timeout = 0;
3478                rfc.max_pdu_size    = 0;
3479
3480                l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3481                                   (unsigned long) &rfc, endptr - ptr);
3482                break;
3483
3484        case L2CAP_MODE_ERTM:
3485                rfc.mode            = L2CAP_MODE_ERTM;
3486                rfc.max_transmit    = chan->max_tx;
3487
3488                __l2cap_set_ertm_timeouts(chan, &rfc);
3489
3490                size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3491                             L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3492                             L2CAP_FCS_SIZE);
3493                rfc.max_pdu_size = cpu_to_le16(size);
3494
3495                l2cap_txwin_setup(chan);
3496
3497                rfc.txwin_size = min_t(u16, chan->tx_win,
3498                                       L2CAP_DEFAULT_TX_WINDOW);
3499
3500                l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3501                                   (unsigned long) &rfc, endptr - ptr);
3502
3503                if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3504                        l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
3505
3506                if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3507                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3508                                           chan->tx_win, endptr - ptr);
3509
3510                if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3511                        if (chan->fcs == L2CAP_FCS_NONE ||
3512                            test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3513                                chan->fcs = L2CAP_FCS_NONE;
3514                                l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3515                                                   chan->fcs, endptr - ptr);
3516                        }
3517                break;
3518
3519        case L2CAP_MODE_STREAMING:
3520                l2cap_txwin_setup(chan);
3521                rfc.mode            = L2CAP_MODE_STREAMING;
3522                rfc.txwin_size      = 0;
3523                rfc.max_transmit    = 0;
3524                rfc.retrans_timeout = 0;
3525                rfc.monitor_timeout = 0;
3526
3527                size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3528                             L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3529                             L2CAP_FCS_SIZE);
3530                rfc.max_pdu_size = cpu_to_le16(size);
3531
3532                l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3533                                   (unsigned long) &rfc, endptr - ptr);
3534
3535                if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3536                        l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
3537
3538                if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3539                        if (chan->fcs == L2CAP_FCS_NONE ||
3540                            test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3541                                chan->fcs = L2CAP_FCS_NONE;
3542                                l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3543                                                   chan->fcs, endptr - ptr);
3544                        }
3545                break;
3546        }
3547
3548        req->dcid  = cpu_to_le16(chan->dcid);
3549        req->flags = cpu_to_le16(0);
3550
3551        return ptr - data;
3552}
3553
3554static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
3555{
3556        struct l2cap_conf_rsp *rsp = data;
3557        void *ptr = rsp->data;
3558        void *endptr = data + data_size;
3559        void *req = chan->conf_req;
3560        int len = chan->conf_len;
3561        int type, hint, olen;
3562        unsigned long val;
3563        struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3564        struct l2cap_conf_efs efs;
3565        u8 remote_efs = 0;
3566        u16 mtu = L2CAP_DEFAULT_MTU;
3567        u16 result = L2CAP_CONF_SUCCESS;
3568        u16 size;
3569
3570        BT_DBG("chan %p", chan);
3571
3572        while (len >= L2CAP_CONF_OPT_SIZE) {
3573                len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
3574                if (len < 0)
3575                        break;
3576
3577                hint  = type & L2CAP_CONF_HINT;
3578                type &= L2CAP_CONF_MASK;
3579
3580                switch (type) {
3581                case L2CAP_CONF_MTU:
3582                        if (olen != 2)
3583                                break;
3584                        mtu = val;
3585                        break;
3586
3587                case L2CAP_CONF_FLUSH_TO:
3588                        if (olen != 2)
3589                                break;
3590                        chan->flush_to = val;
3591                        break;
3592
3593                case L2CAP_CONF_QOS:
3594                        break;
3595
3596                case L2CAP_CONF_RFC:
3597                        if (olen != sizeof(rfc))
3598                                break;
3599                        memcpy(&rfc, (void *) val, olen);
3600                        break;
3601
3602                case L2CAP_CONF_FCS:
3603                        if (olen != 1)
3604                                break;
3605                        if (val == L2CAP_FCS_NONE)
3606                                set_bit(CONF_RECV_NO_FCS, &chan->conf_state);
3607                        break;
3608
3609                case L2CAP_CONF_EFS:
3610                        if (olen != sizeof(efs))
3611                                break;
3612                        remote_efs = 1;
3613                        memcpy(&efs, (void *) val, olen);
3614                        break;
3615
3616                case L2CAP_CONF_EWS:
3617                        if (olen != 2)
3618                                break;
3619                        if (!(chan->conn->local_fixed_chan & L2CAP_FC_A2MP))
3620                                return -ECONNREFUSED;
3621                        set_bit(FLAG_EXT_CTRL, &chan->flags);
3622                        set_bit(CONF_EWS_RECV, &chan->conf_state);
3623                        chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3624                        chan->remote_tx_win = val;
3625                        break;
3626
3627                default:
3628                        if (hint)
3629                                break;
3630                        result = L2CAP_CONF_UNKNOWN;
3631                        *((u8 *) ptr++) = type;
3632                        break;
3633                }
3634        }
3635
3636        if (chan->num_conf_rsp || chan->num_conf_req > 1)
3637                goto done;
3638
3639        switch (chan->mode) {
3640        case L2CAP_MODE_STREAMING:
3641        case L2CAP_MODE_ERTM:
3642                if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
3643                        chan->mode = l2cap_select_mode(rfc.mode,
3644                                                       chan->conn->feat_mask);
3645                        break;
3646                }
3647
3648                if (remote_efs) {
3649                        if (__l2cap_efs_supported(chan->conn))
3650                                set_bit(FLAG_EFS_ENABLE, &chan->flags);
3651                        else
3652                                return -ECONNREFUSED;
3653                }
3654
3655                if (chan->mode != rfc.mode)
3656                        return -ECONNREFUSED;
3657
3658                break;
3659        }
3660
3661done:
3662        if (chan->mode != rfc.mode) {
3663                result = L2CAP_CONF_UNACCEPT;
3664                rfc.mode = chan->mode;
3665
3666                if (chan->num_conf_rsp == 1)
3667                        return -ECONNREFUSED;
3668
3669                l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3670                                   (unsigned long) &rfc, endptr - ptr);
3671        }
3672
3673        if (result == L2CAP_CONF_SUCCESS) {
3674                /* Configure output options and let the other side know
3675                 * which ones we don't like. */
3676
3677                if (mtu < L2CAP_DEFAULT_MIN_MTU)
3678                        result = L2CAP_CONF_UNACCEPT;
3679                else {
3680                        chan->omtu = mtu;
3681                        set_bit(CONF_MTU_DONE, &chan->conf_state);
3682                }
3683                l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu, endptr - ptr);
3684
3685                if (remote_efs) {
3686                        if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3687                            efs.stype != L2CAP_SERV_NOTRAFIC &&
3688                            efs.stype != chan->local_stype) {
3689
3690                                result = L2CAP_CONF_UNACCEPT;
3691
3692                                if (chan->num_conf_req >= 1)
3693                                        return -ECONNREFUSED;
3694
3695                                l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3696                                                   sizeof(efs),
3697                                                   (unsigned long) &efs, endptr - ptr);
3698                        } else {
3699                                /* Send PENDING Conf Rsp */
3700                                result = L2CAP_CONF_PENDING;
3701                                set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3702                        }
3703                }
3704
3705                switch (rfc.mode) {
3706                case L2CAP_MODE_BASIC:
3707                        chan->fcs = L2CAP_FCS_NONE;
3708                        set_bit(CONF_MODE_DONE, &chan->conf_state);
3709                        break;
3710
3711                case L2CAP_MODE_ERTM:
3712                        if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
3713                                chan->remote_tx_win = rfc.txwin_size;
3714                        else
3715                                rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
3716
3717                        chan->remote_max_tx = rfc.max_transmit;
3718
3719                        size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3720                                     chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3721                                     L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3722                        rfc.max_pdu_size = cpu_to_le16(size);
3723                        chan->remote_mps = size;
3724
3725                        __l2cap_set_ertm_timeouts(chan, &rfc);
3726
3727                        set_bit(CONF_MODE_DONE, &chan->conf_state);
3728
3729                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3730                                           sizeof(rfc), (unsigned long) &rfc, endptr - ptr);
3731
3732                        if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3733                                chan->remote_id = efs.id;
3734                                chan->remote_stype = efs.stype;
3735                                chan->remote_msdu = le16_to_cpu(efs.msdu);
3736                                chan->remote_flush_to =
3737                                        le32_to_cpu(efs.flush_to);
3738                                chan->remote_acc_lat =
3739                                        le32_to_cpu(efs.acc_lat);
3740                                chan->remote_sdu_itime =
3741                                        le32_to_cpu(efs.sdu_itime);
3742                                l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3743                                                   sizeof(efs),
3744                                                   (unsigned long) &efs, endptr - ptr);
3745                        }
3746                        break;
3747
3748                case L2CAP_MODE_STREAMING:
3749                        size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3750                                     chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3751                                     L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3752                        rfc.max_pdu_size = cpu_to_le16(size);
3753                        chan->remote_mps = size;
3754
3755                        set_bit(CONF_MODE_DONE, &chan->conf_state);
3756
3757                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3758                                           (unsigned long) &rfc, endptr - ptr);
3759
3760                        break;
3761
3762                default:
3763                        result = L2CAP_CONF_UNACCEPT;
3764
3765                        memset(&rfc, 0, sizeof(rfc));
3766                        rfc.mode = chan->mode;
3767                }
3768
3769                if (result == L2CAP_CONF_SUCCESS)
3770                        set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3771        }
3772        rsp->scid   = cpu_to_le16(chan->dcid);
3773        rsp->result = cpu_to_le16(result);
3774        rsp->flags  = cpu_to_le16(0);
3775
3776        return ptr - data;
3777}
3778
3779static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
3780                                void *data, size_t size, u16 *result)
3781{
3782        struct l2cap_conf_req *req = data;
3783        void *ptr = req->data;
3784        void *endptr = data + size;
3785        int type, olen;
3786        unsigned long val;
3787        struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3788        struct l2cap_conf_efs efs;
3789
3790        BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
3791
3792        while (len >= L2CAP_CONF_OPT_SIZE) {
3793                len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3794                if (len < 0)
3795                        break;
3796
3797                switch (type) {
3798                case L2CAP_CONF_MTU:
3799                        if (olen != 2)
3800                                break;
3801                        if (val < L2CAP_DEFAULT_MIN_MTU) {
3802                                *result = L2CAP_CONF_UNACCEPT;
3803                                chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3804                        } else
3805                                chan->imtu = val;
3806                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu,
3807                                           endptr - ptr);
3808                        break;
3809
3810                case L2CAP_CONF_FLUSH_TO:
3811                        if (olen != 2)
3812                                break;
3813                        chan->flush_to = val;
3814                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2,
3815                                           chan->flush_to, endptr - ptr);
3816                        break;
3817
3818                case L2CAP_CONF_RFC:
3819                        if (olen != sizeof(rfc))
3820                                break;
3821                        memcpy(&rfc, (void *)val, olen);
3822                        if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
3823                            rfc.mode != chan->mode)
3824                                return -ECONNREFUSED;
3825                        chan->fcs = 0;
3826                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3827                                           (unsigned long) &rfc, endptr - ptr);
3828                        break;
3829
3830                case L2CAP_CONF_EWS:
3831                        if (olen != 2)
3832                                break;
3833                        chan->ack_win = min_t(u16, val, chan->ack_win);
3834                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3835                                           chan->tx_win, endptr - ptr);
3836                        break;
3837
3838                case L2CAP_CONF_EFS:
3839                        if (olen != sizeof(efs))
3840                                break;
3841                        memcpy(&efs, (void *)val, olen);
3842                        if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3843                            efs.stype != L2CAP_SERV_NOTRAFIC &&
3844                            efs.stype != chan->local_stype)
3845                                return -ECONNREFUSED;
3846                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
3847                                           (unsigned long) &efs, endptr - ptr);
3848                        break;
3849
3850                case L2CAP_CONF_FCS:
3851                        if (olen != 1)
3852                                break;
3853                        if (*result == L2CAP_CONF_PENDING)
3854                                if (val == L2CAP_FCS_NONE)
3855                                        set_bit(CONF_RECV_NO_FCS,
3856                                                &chan->conf_state);
3857                        break;
3858                }
3859        }
3860
3861        if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
3862                return -ECONNREFUSED;
3863
3864        chan->mode = rfc.mode;
3865
3866        if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
3867                switch (rfc.mode) {
3868                case L2CAP_MODE_ERTM:
3869                        chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3870                        chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3871                        chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3872                        if (!test_bit(FLAG_EXT_CTRL, &chan->flags))
3873                                chan->ack_win = min_t(u16, chan->ack_win,
3874                                                      rfc.txwin_size);
3875
3876                        if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3877                                chan->local_msdu = le16_to_cpu(efs.msdu);
3878                                chan->local_sdu_itime =
3879                                        le32_to_cpu(efs.sdu_itime);
3880                                chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
3881                                chan->local_flush_to =
3882                                        le32_to_cpu(efs.flush_to);
3883                        }
3884                        break;
3885
3886                case L2CAP_MODE_STREAMING:
3887                        chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3888                }
3889        }
3890
3891        req->dcid   = cpu_to_le16(chan->dcid);
3892        req->flags  = cpu_to_le16(0);
3893
3894        return ptr - data;
3895}
3896
3897static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data,
3898                                u16 result, u16 flags)
3899{
3900        struct l2cap_conf_rsp *rsp = data;
3901        void *ptr = rsp->data;
3902
3903        BT_DBG("chan %p", chan);
3904
3905        rsp->scid   = cpu_to_le16(chan->dcid);
3906        rsp->result = cpu_to_le16(result);
3907        rsp->flags  = cpu_to_le16(flags);
3908
3909        return ptr - data;
3910}
3911
3912void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan)
3913{
3914        struct l2cap_le_conn_rsp rsp;
3915        struct l2cap_conn *conn = chan->conn;
3916
3917        BT_DBG("chan %p", chan);
3918
3919        rsp.dcid    = cpu_to_le16(chan->scid);
3920        rsp.mtu     = cpu_to_le16(chan->imtu);
3921        rsp.mps     = cpu_to_le16(chan->mps);
3922        rsp.credits = cpu_to_le16(chan->rx_credits);
3923        rsp.result  = cpu_to_le16(L2CAP_CR_LE_SUCCESS);
3924
3925        l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
3926                       &rsp);
3927}
3928
3929void __l2cap_ecred_conn_rsp_defer(struct l2cap_chan *chan)
3930{
3931        struct {
3932                struct l2cap_ecred_conn_rsp rsp;
3933                __le16 dcid[5];
3934        } __packed pdu;
3935        struct l2cap_conn *conn = chan->conn;
3936        u16 ident = chan->ident;
3937        int i = 0;
3938
3939        if (!ident)
3940                return;
3941
3942        BT_DBG("chan %p ident %d", chan, ident);
3943
3944        pdu.rsp.mtu     = cpu_to_le16(chan->imtu);
3945        pdu.rsp.mps     = cpu_to_le16(chan->mps);
3946        pdu.rsp.credits = cpu_to_le16(chan->rx_credits);
3947        pdu.rsp.result  = cpu_to_le16(L2CAP_CR_LE_SUCCESS);
3948
3949        mutex_lock(&conn->chan_lock);
3950
3951        list_for_each_entry(chan, &conn->chan_l, list) {
3952                if (chan->ident != ident)
3953                        continue;
3954
3955                /* Reset ident so only one response is sent */
3956                chan->ident = 0;
3957
3958                /* Include all channels pending with the same ident */
3959                pdu.dcid[i++] = cpu_to_le16(chan->scid);
3960        }
3961
3962        mutex_unlock(&conn->chan_lock);
3963
3964        l2cap_send_cmd(conn, ident, L2CAP_ECRED_CONN_RSP,
3965                        sizeof(pdu.rsp) + i * sizeof(__le16), &pdu);
3966}
3967
3968void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
3969{
3970        struct l2cap_conn_rsp rsp;
3971        struct l2cap_conn *conn = chan->conn;
3972        u8 buf[128];
3973        u8 rsp_code;
3974
3975        rsp.scid   = cpu_to_le16(chan->dcid);
3976        rsp.dcid   = cpu_to_le16(chan->scid);
3977        rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
3978        rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
3979
3980        if (chan->hs_hcon)
3981                rsp_code = L2CAP_CREATE_CHAN_RSP;
3982        else
3983                rsp_code = L2CAP_CONN_RSP;
3984
3985        BT_DBG("chan %p rsp_code %u", chan, rsp_code);
3986
3987        l2cap_send_cmd(conn, chan->ident, rsp_code, sizeof(rsp), &rsp);
3988
3989        if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3990                return;
3991
3992        l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3993                       l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
3994        chan->num_conf_req++;
3995}
3996
3997static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
3998{
3999        int type, olen;
4000        unsigned long val;
4001        /* Use sane default values in case a misbehaving remote device
4002         * did not send an RFC or extended window size option.
4003         */
4004        u16 txwin_ext = chan->ack_win;
4005        struct l2cap_conf_rfc rfc = {
4006                .mode = chan->mode,
4007                .retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO),
4008                .monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO),
4009                .max_pdu_size = cpu_to_le16(chan->imtu),
4010                .txwin_size = min_t(u16, chan->ack_win, L2CAP_DEFAULT_TX_WINDOW),
4011        };
4012
4013        BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
4014
4015        if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
4016                return;
4017
4018        while (len >= L2CAP_CONF_OPT_SIZE) {
4019                len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
4020                if (len < 0)
4021                        break;
4022
4023                switch (type) {
4024                case L2CAP_CONF_RFC:
4025                        if (olen != sizeof(rfc))
4026                                break;
4027                        memcpy(&rfc, (void *)val, olen);
4028                        break;
4029                case L2CAP_CONF_EWS:
4030                        if (olen != 2)
4031                                break;
4032                        txwin_ext = val;
4033                        break;
4034                }
4035        }
4036
4037        switch (rfc.mode) {
4038        case L2CAP_MODE_ERTM:
4039                chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
4040                chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
4041                chan->mps = le16_to_cpu(rfc.max_pdu_size);
4042                if (test_bit(FLAG_EXT_CTRL, &chan->flags))
4043                        chan->ack_win = min_t(u16, chan->ack_win, txwin_ext);
4044                else
4045                        chan->ack_win = min_t(u16, chan->ack_win,
4046                                              rfc.txwin_size);
4047                break;
4048        case L2CAP_MODE_STREAMING:
4049                chan->mps    = le16_to_cpu(rfc.max_pdu_size);
4050        }
4051}
4052
4053static inline int l2cap_command_rej(struct l2cap_conn *conn,
4054                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4055                                    u8 *data)
4056{
4057        struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
4058
4059        if (cmd_len < sizeof(*rej))
4060                return -EPROTO;
4061
4062        if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
4063                return 0;
4064
4065        if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
4066            cmd->ident == conn->info_ident) {
4067                cancel_delayed_work(&conn->info_timer);
4068
4069                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4070                conn->info_ident = 0;
4071
4072                l2cap_conn_start(conn);
4073        }
4074
4075        return 0;
4076}
4077
4078static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,
4079                                        struct l2cap_cmd_hdr *cmd,
4080                                        u8 *data, u8 rsp_code, u8 amp_id)
4081{
4082        struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
4083        struct l2cap_conn_rsp rsp;
4084        struct l2cap_chan *chan = NULL, *pchan;
4085        int result, status = L2CAP_CS_NO_INFO;
4086
4087        u16 dcid = 0, scid = __le16_to_cpu(req->scid);
4088        __le16 psm = req->psm;
4089
4090        BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
4091
4092        /* Check if we have socket listening on psm */
4093        pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
4094                                         &conn->hcon->dst, ACL_LINK);
4095        if (!pchan) {
4096                result = L2CAP_CR_BAD_PSM;
4097                goto sendresp;
4098        }
4099
4100        mutex_lock(&conn->chan_lock);
4101        l2cap_chan_lock(pchan);
4102
4103        /* Check if the ACL is secure enough (if not SDP) */
4104        if (psm != cpu_to_le16(L2CAP_PSM_SDP) &&
4105            !hci_conn_check_link_mode(conn->hcon)) {
4106                conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
4107                result = L2CAP_CR_SEC_BLOCK;
4108                goto response;
4109        }
4110
4111        result = L2CAP_CR_NO_MEM;
4112
4113        /* Check for valid dynamic CID range (as per Erratum 3253) */
4114        if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_DYN_END) {
4115                result = L2CAP_CR_INVALID_SCID;
4116                goto response;
4117        }
4118
4119        /* Check if we already have channel with that dcid */
4120        if (__l2cap_get_chan_by_dcid(conn, scid)) {
4121                result = L2CAP_CR_SCID_IN_USE;
4122                goto response;
4123        }
4124
4125        chan = pchan->ops->new_connection(pchan);
4126        if (!chan)
4127                goto response;
4128
4129        /* For certain devices (ex: HID mouse), support for authentication,
4130         * pairing and bonding is optional. For such devices, inorder to avoid
4131         * the ACL alive for too long after L2CAP disconnection, reset the ACL
4132         * disc_timeout back to HCI_DISCONN_TIMEOUT during L2CAP connect.
4133         */
4134        conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
4135
4136        bacpy(&chan->src, &conn->hcon->src);
4137        bacpy(&chan->dst, &conn->hcon->dst);
4138        chan->src_type = bdaddr_src_type(conn->hcon);
4139        chan->dst_type = bdaddr_dst_type(conn->hcon);
4140        chan->psm  = psm;
4141        chan->dcid = scid;
4142        chan->local_amp_id = amp_id;
4143
4144        __l2cap_chan_add(conn, chan);
4145
4146        dcid = chan->scid;
4147
4148        __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
4149
4150        chan->ident = cmd->ident;
4151
4152        if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
4153                if (l2cap_chan_check_security(chan, false)) {
4154                        if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
4155                                l2cap_state_change(chan, BT_CONNECT2);
4156                                result = L2CAP_CR_PEND;
4157                                status = L2CAP_CS_AUTHOR_PEND;
4158                                chan->ops->defer(chan);
4159                        } else {
4160                                /* Force pending result for AMP controllers.
4161                                 * The connection will succeed after the
4162                                 * physical link is up.
4163                                 */
4164                                if (amp_id == AMP_ID_BREDR) {
4165                                        l2cap_state_change(chan, BT_CONFIG);
4166                                        result = L2CAP_CR_SUCCESS;
4167                                } else {
4168                                        l2cap_state_change(chan, BT_CONNECT2);
4169                                        result = L2CAP_CR_PEND;
4170                                }
4171                                status = L2CAP_CS_NO_INFO;
4172                        }
4173                } else {
4174                        l2cap_state_change(chan, BT_CONNECT2);
4175                        result = L2CAP_CR_PEND;
4176                        status = L2CAP_CS_AUTHEN_PEND;
4177                }
4178        } else {
4179                l2cap_state_change(chan, BT_CONNECT2);
4180                result = L2CAP_CR_PEND;
4181                status = L2CAP_CS_NO_INFO;
4182        }
4183
4184response:
4185        l2cap_chan_unlock(pchan);
4186        mutex_unlock(&conn->chan_lock);
4187        l2cap_chan_put(pchan);
4188
4189sendresp:
4190        rsp.scid   = cpu_to_le16(scid);
4191        rsp.dcid   = cpu_to_le16(dcid);
4192        rsp.result = cpu_to_le16(result);
4193        rsp.status = cpu_to_le16(status);
4194        l2cap_send_cmd(conn, cmd->ident, rsp_code, sizeof(rsp), &rsp);
4195
4196        if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
4197                struct l2cap_info_req info;
4198                info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
4199
4200                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
4201                conn->info_ident = l2cap_get_ident(conn);
4202
4203                schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
4204
4205                l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
4206                               sizeof(info), &info);
4207        }
4208
4209        if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
4210            result == L2CAP_CR_SUCCESS) {
4211                u8 buf[128];
4212                set_bit(CONF_REQ_SENT, &chan->conf_state);
4213                l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4214                               l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4215                chan->num_conf_req++;
4216        }
4217
4218        return chan;
4219}
4220
4221static int l2cap_connect_req(struct l2cap_conn *conn,
4222                             struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
4223{
4224        struct hci_dev *hdev = conn->hcon->hdev;
4225        struct hci_conn *hcon = conn->hcon;
4226
4227        if (cmd_len < sizeof(struct l2cap_conn_req))
4228                return -EPROTO;
4229
4230        hci_dev_lock(hdev);
4231        if (hci_dev_test_flag(hdev, HCI_MGMT) &&
4232            !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags))
4233                mgmt_device_connected(hdev, hcon, 0, NULL, 0);
4234        hci_dev_unlock(hdev);
4235
4236        l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0);
4237        return 0;
4238}
4239
4240static int l2cap_connect_create_rsp(struct l2cap_conn *conn,
4241                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4242                                    u8 *data)
4243{
4244        struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
4245        u16 scid, dcid, result, status;
4246        struct l2cap_chan *chan;
4247        u8 req[128];
4248        int err;
4249
4250        if (cmd_len < sizeof(*rsp))
4251                return -EPROTO;
4252
4253        scid   = __le16_to_cpu(rsp->scid);
4254        dcid   = __le16_to_cpu(rsp->dcid);
4255        result = __le16_to_cpu(rsp->result);
4256        status = __le16_to_cpu(rsp->status);
4257
4258        BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
4259               dcid, scid, result, status);
4260
4261        mutex_lock(&conn->chan_lock);
4262
4263        if (scid) {
4264                chan = __l2cap_get_chan_by_scid(conn, scid);
4265                if (!chan) {
4266                        err = -EBADSLT;
4267                        goto unlock;
4268                }
4269        } else {
4270                chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
4271                if (!chan) {
4272                        err = -EBADSLT;
4273                        goto unlock;
4274                }
4275        }
4276
4277        err = 0;
4278
4279        l2cap_chan_lock(chan);
4280
4281        switch (result) {
4282        case L2CAP_CR_SUCCESS:
4283                l2cap_state_change(chan, BT_CONFIG);
4284                chan->ident = 0;
4285                chan->dcid = dcid;
4286                clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
4287
4288                if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
4289                        break;
4290
4291                l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4292                               l2cap_build_conf_req(chan, req, sizeof(req)), req);
4293                chan->num_conf_req++;
4294                break;
4295
4296        case L2CAP_CR_PEND:
4297                set_bit(CONF_CONNECT_PEND, &chan->conf_state);
4298                break;
4299
4300        default:
4301                l2cap_chan_del(chan, ECONNREFUSED);
4302                break;
4303        }
4304
4305        l2cap_chan_unlock(chan);
4306
4307unlock:
4308        mutex_unlock(&conn->chan_lock);
4309
4310        return err;
4311}
4312
4313static inline void set_default_fcs(struct l2cap_chan *chan)
4314{
4315        /* FCS is enabled only in ERTM or streaming mode, if one or both
4316         * sides request it.
4317         */
4318        if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
4319                chan->fcs = L2CAP_FCS_NONE;
4320        else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state))
4321                chan->fcs = L2CAP_FCS_CRC16;
4322}
4323
4324static void l2cap_send_efs_conf_rsp(struct l2cap_chan *chan, void *data,
4325                                    u8 ident, u16 flags)
4326{
4327        struct l2cap_conn *conn = chan->conn;
4328
4329        BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn, chan, ident,
4330               flags);
4331
4332        clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
4333        set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
4334
4335        l2cap_send_cmd(conn, ident, L2CAP_CONF_RSP,
4336                       l2cap_build_conf_rsp(chan, data,
4337                                            L2CAP_CONF_SUCCESS, flags), data);
4338}
4339
4340static void cmd_reject_invalid_cid(struct l2cap_conn *conn, u8 ident,
4341                                   u16 scid, u16 dcid)
4342{
4343        struct l2cap_cmd_rej_cid rej;
4344
4345        rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
4346        rej.scid = __cpu_to_le16(scid);
4347        rej.dcid = __cpu_to_le16(dcid);
4348
4349        l2cap_send_cmd(conn, ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
4350}
4351
4352static inline int l2cap_config_req(struct l2cap_conn *conn,
4353                                   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4354                                   u8 *data)
4355{
4356        struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
4357        u16 dcid, flags;
4358        u8 rsp[64];
4359        struct l2cap_chan *chan;
4360        int len, err = 0;
4361
4362        if (cmd_len < sizeof(*req))
4363                return -EPROTO;
4364
4365        dcid  = __le16_to_cpu(req->dcid);
4366        flags = __le16_to_cpu(req->flags);
4367
4368        BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
4369
4370        chan = l2cap_get_chan_by_scid(conn, dcid);
4371        if (!chan) {
4372                cmd_reject_invalid_cid(conn, cmd->ident, dcid, 0);
4373                return 0;
4374        }
4375
4376        if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2 &&
4377            chan->state != BT_CONNECTED) {
4378                cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4379                                       chan->dcid);
4380                goto unlock;
4381        }
4382
4383        /* Reject if config buffer is too small. */
4384        len = cmd_len - sizeof(*req);
4385        if (chan->conf_len + len > sizeof(chan->conf_req)) {
4386                l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4387                               l2cap_build_conf_rsp(chan, rsp,
4388                               L2CAP_CONF_REJECT, flags), rsp);
4389                goto unlock;
4390        }
4391
4392        /* Store config. */
4393        memcpy(chan->conf_req + chan->conf_len, req->data, len);
4394        chan->conf_len += len;
4395
4396        if (flags & L2CAP_CONF_FLAG_CONTINUATION) {
4397                /* Incomplete config. Send empty response. */
4398                l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4399                               l2cap_build_conf_rsp(chan, rsp,
4400                               L2CAP_CONF_SUCCESS, flags), rsp);
4401                goto unlock;
4402        }
4403
4404        /* Complete config. */
4405        len = l2cap_parse_conf_req(chan, rsp, sizeof(rsp));
4406        if (len < 0) {
4407                l2cap_send_disconn_req(chan, ECONNRESET);
4408                goto unlock;
4409        }
4410
4411        chan->ident = cmd->ident;
4412        l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
4413        chan->num_conf_rsp++;
4414
4415        /* Reset config buffer. */
4416        chan->conf_len = 0;
4417
4418        if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
4419                goto unlock;
4420
4421        if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4422                set_default_fcs(chan);
4423
4424                if (chan->mode == L2CAP_MODE_ERTM ||
4425                    chan->mode == L2CAP_MODE_STREAMING)
4426                        err = l2cap_ertm_init(chan);
4427
4428                if (err < 0)
4429                        l2cap_send_disconn_req(chan, -err);
4430                else
4431                        l2cap_chan_ready(chan);
4432
4433                goto unlock;
4434        }
4435
4436        if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
4437                u8 buf[64];
4438                l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4439                               l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4440                chan->num_conf_req++;
4441        }
4442
4443        /* Got Conf Rsp PENDING from remote side and assume we sent
4444           Conf Rsp PENDING in the code above */
4445        if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
4446            test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4447
4448                /* check compatibility */
4449
4450                /* Send rsp for BR/EDR channel */
4451                if (!chan->hs_hcon)
4452                        l2cap_send_efs_conf_rsp(chan, rsp, cmd->ident, flags);
4453                else
4454                        chan->ident = cmd->ident;
4455        }
4456
4457unlock:
4458        l2cap_chan_unlock(chan);
4459        return err;
4460}
4461
4462static inline int l2cap_config_rsp(struct l2cap_conn *conn,
4463                                   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4464                                   u8 *data)
4465{
4466        struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
4467        u16 scid, flags, result;
4468        struct l2cap_chan *chan;
4469        int len = cmd_len - sizeof(*rsp);
4470        int err = 0;
4471
4472        if (cmd_len < sizeof(*rsp))
4473                return -EPROTO;
4474
4475        scid   = __le16_to_cpu(rsp->scid);
4476        flags  = __le16_to_cpu(rsp->flags);
4477        result = __le16_to_cpu(rsp->result);
4478
4479        BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
4480               result, len);
4481
4482        chan = l2cap_get_chan_by_scid(conn, scid);
4483        if (!chan)
4484                return 0;
4485
4486        switch (result) {
4487        case L2CAP_CONF_SUCCESS:
4488                l2cap_conf_rfc_get(chan, rsp->data, len);
4489                clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4490                break;
4491
4492        case L2CAP_CONF_PENDING:
4493                set_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4494
4495                if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4496                        char buf[64];
4497
4498                        len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4499                                                   buf, sizeof(buf), &result);
4500                        if (len < 0) {
4501                                l2cap_send_disconn_req(chan, ECONNRESET);
4502                                goto done;
4503                        }
4504
4505                        if (!chan->hs_hcon) {
4506                                l2cap_send_efs_conf_rsp(chan, buf, cmd->ident,
4507                                                        0);
4508                        } else {
4509                                if (l2cap_check_efs(chan)) {
4510                                        amp_create_logical_link(chan);
4511                                        chan->ident = cmd->ident;
4512                                }
4513                        }
4514                }
4515                goto done;
4516
4517        case L2CAP_CONF_UNACCEPT:
4518                if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
4519                        char req[64];
4520
4521                        if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
4522                                l2cap_send_disconn_req(chan, ECONNRESET);
4523                                goto done;
4524                        }
4525
4526                        /* throw out any old stored conf requests */
4527                        result = L2CAP_CONF_SUCCESS;
4528                        len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4529                                                   req, sizeof(req), &result);
4530                        if (len < 0) {
4531                                l2cap_send_disconn_req(chan, ECONNRESET);
4532                                goto done;
4533                        }
4534
4535                        l2cap_send_cmd(conn, l2cap_get_ident(conn),
4536                                       L2CAP_CONF_REQ, len, req);
4537                        chan->num_conf_req++;
4538                        if (result != L2CAP_CONF_SUCCESS)
4539                                goto done;
4540                        break;
4541                }
4542                /* fall through */
4543
4544        default:
4545                l2cap_chan_set_err(chan, ECONNRESET);
4546
4547                __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
4548                l2cap_send_disconn_req(chan, ECONNRESET);
4549                goto done;
4550        }
4551
4552        if (flags & L2CAP_CONF_FLAG_CONTINUATION)
4553                goto done;
4554
4555        set_bit(CONF_INPUT_DONE, &chan->conf_state);
4556
4557        if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
4558                set_default_fcs(chan);
4559
4560                if (chan->mode == L2CAP_MODE_ERTM ||
4561                    chan->mode == L2CAP_MODE_STREAMING)
4562                        err = l2cap_ertm_init(chan);
4563
4564                if (err < 0)
4565                        l2cap_send_disconn_req(chan, -err);
4566                else
4567                        l2cap_chan_ready(chan);
4568        }
4569
4570done:
4571        l2cap_chan_unlock(chan);
4572        return err;
4573}
4574
4575static inline int l2cap_disconnect_req(struct l2cap_conn *conn,
4576                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4577                                       u8 *data)
4578{
4579        struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
4580        struct l2cap_disconn_rsp rsp;
4581        u16 dcid, scid;
4582        struct l2cap_chan *chan;
4583
4584        if (cmd_len != sizeof(*req))
4585                return -EPROTO;
4586
4587        scid = __le16_to_cpu(req->scid);
4588        dcid = __le16_to_cpu(req->dcid);
4589
4590        BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
4591
4592        mutex_lock(&conn->chan_lock);
4593
4594        chan = __l2cap_get_chan_by_scid(conn, dcid);
4595        if (!chan) {
4596                mutex_unlock(&conn->chan_lock);
4597                cmd_reject_invalid_cid(conn, cmd->ident, dcid, scid);
4598                return 0;
4599        }
4600
4601        l2cap_chan_hold(chan);
4602        l2cap_chan_lock(chan);
4603
4604        rsp.dcid = cpu_to_le16(chan->scid);
4605        rsp.scid = cpu_to_le16(chan->dcid);
4606        l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
4607
4608        chan->ops->set_shutdown(chan);
4609
4610        l2cap_chan_del(chan, ECONNRESET);
4611
4612        chan->ops->close(chan);
4613
4614        l2cap_chan_unlock(chan);
4615        l2cap_chan_put(chan);
4616
4617        mutex_unlock(&conn->chan_lock);
4618
4619        return 0;
4620}
4621
4622static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn,
4623                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4624                                       u8 *data)
4625{
4626        struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
4627        u16 dcid, scid;
4628        struct l2cap_chan *chan;
4629
4630        if (cmd_len != sizeof(*rsp))
4631                return -EPROTO;
4632
4633        scid = __le16_to_cpu(rsp->scid);
4634        dcid = __le16_to_cpu(rsp->dcid);
4635
4636        BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
4637
4638        mutex_lock(&conn->chan_lock);
4639
4640        chan = __l2cap_get_chan_by_scid(conn, scid);
4641        if (!chan) {
4642                mutex_unlock(&conn->chan_lock);
4643                return 0;
4644        }
4645
4646        l2cap_chan_hold(chan);
4647        l2cap_chan_lock(chan);
4648
4649        if (chan->state != BT_DISCONN) {
4650                l2cap_chan_unlock(chan);
4651                l2cap_chan_put(chan);
4652                mutex_unlock(&conn->chan_lock);
4653                return 0;
4654        }
4655
4656        l2cap_chan_del(chan, 0);
4657
4658        chan->ops->close(chan);
4659
4660        l2cap_chan_unlock(chan);
4661        l2cap_chan_put(chan);
4662
4663        mutex_unlock(&conn->chan_lock);
4664
4665        return 0;
4666}
4667
4668static inline int l2cap_information_req(struct l2cap_conn *conn,
4669                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4670                                        u8 *data)
4671{
4672        struct l2cap_info_req *req = (struct l2cap_info_req *) data;
4673        u16 type;
4674
4675        if (cmd_len != sizeof(*req))
4676                return -EPROTO;
4677
4678        type = __le16_to_cpu(req->type);
4679
4680        BT_DBG("type 0x%4.4x", type);
4681
4682        if (type == L2CAP_IT_FEAT_MASK) {
4683                u8 buf[8];
4684                u32 feat_mask = l2cap_feat_mask;
4685                struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4686                rsp->type   = cpu_to_le16(L2CAP_IT_FEAT_MASK);
4687                rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4688                if (!disable_ertm)
4689                        feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
4690                                | L2CAP_FEAT_FCS;
4691                if (conn->local_fixed_chan & L2CAP_FC_A2MP)
4692                        feat_mask |= L2CAP_FEAT_EXT_FLOW
4693                                | L2CAP_FEAT_EXT_WINDOW;
4694
4695                put_unaligned_le32(feat_mask, rsp->data);
4696                l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4697                               buf);
4698        } else if (type == L2CAP_IT_FIXED_CHAN) {
4699                u8 buf[12];
4700                struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4701
4702                rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4703                rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4704                rsp->data[0] = conn->local_fixed_chan;
4705                memset(rsp->data + 1, 0, 7);
4706                l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4707                               buf);
4708        } else {
4709                struct l2cap_info_rsp rsp;
4710                rsp.type   = cpu_to_le16(type);
4711                rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
4712                l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp),
4713                               &rsp);
4714        }
4715
4716        return 0;
4717}
4718
4719static inline int l2cap_information_rsp(struct l2cap_conn *conn,
4720                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4721                                        u8 *data)
4722{
4723        struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
4724        u16 type, result;
4725
4726        if (cmd_len < sizeof(*rsp))
4727                return -EPROTO;
4728
4729        type   = __le16_to_cpu(rsp->type);
4730        result = __le16_to_cpu(rsp->result);
4731
4732        BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
4733
4734        /* L2CAP Info req/rsp are unbound to channels, add extra checks */
4735        if (cmd->ident != conn->info_ident ||
4736            conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
4737                return 0;
4738
4739        cancel_delayed_work(&conn->info_timer);
4740
4741        if (result != L2CAP_IR_SUCCESS) {
4742                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4743                conn->info_ident = 0;
4744
4745                l2cap_conn_start(conn);
4746
4747                return 0;
4748        }
4749
4750        switch (type) {
4751        case L2CAP_IT_FEAT_MASK:
4752                conn->feat_mask = get_unaligned_le32(rsp->data);
4753
4754                if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
4755                        struct l2cap_info_req req;
4756                        req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4757
4758                        conn->info_ident = l2cap_get_ident(conn);
4759
4760                        l2cap_send_cmd(conn, conn->info_ident,
4761                                       L2CAP_INFO_REQ, sizeof(req), &req);
4762                } else {
4763                        conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4764                        conn->info_ident = 0;
4765
4766                        l2cap_conn_start(conn);
4767                }
4768                break;
4769
4770        case L2CAP_IT_FIXED_CHAN:
4771                conn->remote_fixed_chan = rsp->data[0];
4772                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4773                conn->info_ident = 0;
4774
4775                l2cap_conn_start(conn);
4776                break;
4777        }
4778
4779        return 0;
4780}
4781
4782static int l2cap_create_channel_req(struct l2cap_conn *conn,
4783                                    struct l2cap_cmd_hdr *cmd,
4784                                    u16 cmd_len, void *data)
4785{
4786        struct l2cap_create_chan_req *req = data;
4787        struct l2cap_create_chan_rsp rsp;
4788        struct l2cap_chan *chan;
4789        struct hci_dev *hdev;
4790        u16 psm, scid;
4791
4792        if (cmd_len != sizeof(*req))
4793                return -EPROTO;
4794
4795        if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
4796                return -EINVAL;
4797
4798        psm = le16_to_cpu(req->psm);
4799        scid = le16_to_cpu(req->scid);
4800
4801        BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm, scid, req->amp_id);
4802
4803        /* For controller id 0 make BR/EDR connection */
4804        if (req->amp_id == AMP_ID_BREDR) {
4805                l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4806                              req->amp_id);
4807                return 0;
4808        }
4809
4810        /* Validate AMP controller id */
4811        hdev = hci_dev_get(req->amp_id);
4812        if (!hdev)
4813                goto error;
4814
4815        if (hdev->dev_type != HCI_AMP || !test_bit(HCI_UP, &hdev->flags)) {
4816                hci_dev_put(hdev);
4817                goto error;
4818        }
4819
4820        chan = l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4821                             req->amp_id);
4822        if (chan) {
4823                struct amp_mgr *mgr = conn->hcon->amp_mgr;
4824                struct hci_conn *hs_hcon;
4825
4826                hs_hcon = hci_conn_hash_lookup_ba(hdev, AMP_LINK,
4827                                                  &conn->hcon->dst);
4828                if (!hs_hcon) {
4829                        hci_dev_put(hdev);
4830                        cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4831                                               chan->dcid);
4832                        return 0;
4833                }
4834
4835                BT_DBG("mgr %p bredr_chan %p hs_hcon %p", mgr, chan, hs_hcon);
4836
4837                mgr->bredr_chan = chan;
4838                chan->hs_hcon = hs_hcon;
4839                chan->fcs = L2CAP_FCS_NONE;
4840                conn->mtu = hdev->block_mtu;
4841        }
4842
4843        hci_dev_put(hdev);
4844
4845        return 0;
4846
4847error:
4848        rsp.dcid = 0;
4849        rsp.scid = cpu_to_le16(scid);
4850        rsp.result = cpu_to_le16(L2CAP_CR_BAD_AMP);
4851        rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4852
4853        l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP,
4854                       sizeof(rsp), &rsp);
4855
4856        return 0;
4857}
4858
4859static void l2cap_send_move_chan_req(struct l2cap_chan *chan, u8 dest_amp_id)
4860{
4861        struct l2cap_move_chan_req req;
4862        u8 ident;
4863
4864        BT_DBG("chan %p, dest_amp_id %d", chan, dest_amp_id);
4865
4866        ident = l2cap_get_ident(chan->conn);
4867        chan->ident = ident;
4868
4869        req.icid = cpu_to_le16(chan->scid);
4870        req.dest_amp_id = dest_amp_id;
4871
4872        l2cap_send_cmd(chan->conn, ident, L2CAP_MOVE_CHAN_REQ, sizeof(req),
4873                       &req);
4874
4875        __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4876}
4877
4878static void l2cap_send_move_chan_rsp(struct l2cap_chan *chan, u16 result)
4879{
4880        struct l2cap_move_chan_rsp rsp;
4881
4882        BT_DBG("chan %p, result 0x%4.4x", chan, result);
4883
4884        rsp.icid = cpu_to_le16(chan->dcid);
4885        rsp.result = cpu_to_le16(result);
4886
4887        l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_RSP,
4888                       sizeof(rsp), &rsp);
4889}
4890
4891static void l2cap_send_move_chan_cfm(struct l2cap_chan *chan, u16 result)
4892{
4893        struct l2cap_move_chan_cfm cfm;
4894
4895        BT_DBG("chan %p, result 0x%4.4x", chan, result);
4896
4897        chan->ident = l2cap_get_ident(chan->conn);
4898
4899        cfm.icid = cpu_to_le16(chan->scid);
4900        cfm.result = cpu_to_le16(result);
4901
4902        l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_CFM,
4903                       sizeof(cfm), &cfm);
4904
4905        __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4906}
4907
4908static void l2cap_send_move_chan_cfm_icid(struct l2cap_conn *conn, u16 icid)
4909{
4910        struct l2cap_move_chan_cfm cfm;
4911
4912        BT_DBG("conn %p, icid 0x%4.4x", conn, icid);
4913
4914        cfm.icid = cpu_to_le16(icid);
4915        cfm.result = cpu_to_le16(L2CAP_MC_UNCONFIRMED);
4916
4917        l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_MOVE_CHAN_CFM,
4918                       sizeof(cfm), &cfm);
4919}
4920
4921static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
4922                                         u16 icid)
4923{
4924        struct l2cap_move_chan_cfm_rsp rsp;
4925
4926        BT_DBG("icid 0x%4.4x", icid);
4927
4928        rsp.icid = cpu_to_le16(icid);
4929        l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
4930}
4931
4932static void __release_logical_link(struct l2cap_chan *chan)
4933{
4934        chan->hs_hchan = NULL;
4935        chan->hs_hcon = NULL;
4936
4937        /* Placeholder - release the logical link */
4938}
4939
4940static void l2cap_logical_fail(struct l2cap_chan *chan)
4941{
4942        /* Logical link setup failed */
4943        if (chan->state != BT_CONNECTED) {
4944                /* Create channel failure, disconnect */
4945                l2cap_send_disconn_req(chan, ECONNRESET);
4946                return;
4947        }
4948
4949        switch (chan->move_role) {
4950        case L2CAP_MOVE_ROLE_RESPONDER:
4951                l2cap_move_done(chan);
4952                l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_SUPP);
4953                break;
4954        case L2CAP_MOVE_ROLE_INITIATOR:
4955                if (chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_COMP ||
4956                    chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_CFM) {
4957                        /* Remote has only sent pending or
4958                         * success responses, clean up
4959                         */
4960                        l2cap_move_done(chan);
4961                }
4962
4963                /* Other amp move states imply that the move
4964                 * has already aborted
4965                 */
4966                l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
4967                break;
4968        }
4969}
4970
4971static void l2cap_logical_finish_create(struct l2cap_chan *chan,
4972                                        struct hci_chan *hchan)
4973{
4974        struct l2cap_conf_rsp rsp;
4975
4976        chan->hs_hchan = hchan;
4977        chan->hs_hcon->l2cap_data = chan->conn;
4978
4979        l2cap_send_efs_conf_rsp(chan, &rsp, chan->ident, 0);
4980
4981        if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4982                int err;
4983
4984                set_default_fcs(chan);
4985
4986                err = l2cap_ertm_init(chan);
4987                if (err < 0)
4988                        l2cap_send_disconn_req(chan, -err);
4989                else
4990                        l2cap_chan_ready(chan);
4991        }
4992}
4993
4994static void l2cap_logical_finish_move(struct l2cap_chan *chan,
4995                                      struct hci_chan *hchan)
4996{
4997        chan->hs_hcon = hchan->conn;
4998        chan->hs_hcon->l2cap_data = chan->conn;
4999
5000        BT_DBG("move_state %d", chan->move_state);
5001
5002        switch (chan->move_state) {
5003        case L2CAP_MOVE_WAIT_LOGICAL_COMP:
5004                /* Move confirm will be sent after a success
5005                 * response is received
5006                 */
5007                chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5008                break;
5009        case L2CAP_MOVE_WAIT_LOGICAL_CFM:
5010                if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5011                        chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5012                } else if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5013                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
5014                        l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5015                } else if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
5016                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5017                        l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
5018                }
5019                break;
5020        default:
5021                /* Move was not in expected state, free the channel */
5022                __release_logical_link(chan);
5023
5024                chan->move_state = L2CAP_MOVE_STABLE;
5025        }
5026}
5027
5028/* Call with chan locked */
5029void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
5030                       u8 status)
5031{
5032        BT_DBG("chan %p, hchan %p, status %d", chan, hchan, status);
5033
5034        if (status) {
5035                l2cap_logical_fail(chan);
5036                __release_logical_link(chan);
5037                return;
5038        }
5039
5040        if (chan->state != BT_CONNECTED) {
5041                /* Ignore logical link if channel is on BR/EDR */
5042                if (chan->local_amp_id != AMP_ID_BREDR)
5043                        l2cap_logical_finish_create(chan, hchan);
5044        } else {
5045                l2cap_logical_finish_move(chan, hchan);
5046        }
5047}
5048
5049void l2cap_move_start(struct l2cap_chan *chan)
5050{
5051        BT_DBG("chan %p", chan);
5052
5053        if (chan->local_amp_id == AMP_ID_BREDR) {
5054                if (chan->chan_policy != BT_CHANNEL_POLICY_AMP_PREFERRED)
5055                        return;
5056                chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
5057                chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
5058                /* Placeholder - start physical link setup */
5059        } else {
5060                chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
5061                chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5062                chan->move_id = 0;
5063                l2cap_move_setup(chan);
5064                l2cap_send_move_chan_req(chan, 0);
5065        }
5066}
5067
5068static void l2cap_do_create(struct l2cap_chan *chan, int result,
5069                            u8 local_amp_id, u8 remote_amp_id)
5070{
5071        BT_DBG("chan %p state %s %u -> %u", chan, state_to_string(chan->state),
5072               local_amp_id, remote_amp_id);
5073
5074        chan->fcs = L2CAP_FCS_NONE;
5075
5076        /* Outgoing channel on AMP */
5077        if (chan->state == BT_CONNECT) {
5078                if (result == L2CAP_CR_SUCCESS) {
5079                        chan->local_amp_id = local_amp_id;
5080                        l2cap_send_create_chan_req(chan, remote_amp_id);
5081                } else {
5082                        /* Revert to BR/EDR connect */
5083                        l2cap_send_conn_req(chan);
5084                }
5085
5086                return;
5087        }
5088
5089        /* Incoming channel on AMP */
5090        if (__l2cap_no_conn_pending(chan)) {
5091                struct l2cap_conn_rsp rsp;
5092                char buf[128];
5093                rsp.scid = cpu_to_le16(chan->dcid);
5094                rsp.dcid = cpu_to_le16(chan->scid);
5095
5096                if (result == L2CAP_CR_SUCCESS) {
5097                        /* Send successful response */
5098                        rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
5099                        rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
5100                } else {
5101                        /* Send negative response */
5102                        rsp.result = cpu_to_le16(L2CAP_CR_NO_MEM);
5103                        rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
5104                }
5105
5106                l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_RSP,
5107                               sizeof(rsp), &rsp);
5108
5109                if (result == L2CAP_CR_SUCCESS) {
5110                        l2cap_state_change(chan, BT_CONFIG);
5111                        set_bit(CONF_REQ_SENT, &chan->conf_state);
5112                        l2cap_send_cmd(chan->conn, l2cap_get_ident(chan->conn),
5113                                       L2CAP_CONF_REQ,
5114                                       l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
5115                        chan->num_conf_req++;
5116                }
5117        }
5118}
5119
5120static void l2cap_do_move_initiate(struct l2cap_chan *chan, u8 local_amp_id,
5121                                   u8 remote_amp_id)
5122{
5123        l2cap_move_setup(chan);
5124        chan->move_id = local_amp_id;
5125        chan->move_state = L2CAP_MOVE_WAIT_RSP;
5126
5127        l2cap_send_move_chan_req(chan, remote_amp_id);
5128}
5129
5130static void l2cap_do_move_respond(struct l2cap_chan *chan, int result)
5131{
5132        struct hci_chan *hchan = NULL;
5133
5134        /* Placeholder - get hci_chan for logical link */
5135
5136        if (hchan) {
5137                if (hchan->state == BT_CONNECTED) {
5138                        /* Logical link is ready to go */
5139                        chan->hs_hcon = hchan->conn;
5140                        chan->hs_hcon->l2cap_data = chan->conn;
5141                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5142                        l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
5143
5144                        l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
5145                } else {
5146                        /* Wait for logical link to be ready */
5147                        chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5148                }
5149        } else {
5150                /* Logical link not available */
5151                l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_ALLOWED);
5152        }
5153}
5154
5155static void l2cap_do_move_cancel(struct l2cap_chan *chan, int result)
5156{
5157        if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
5158                u8 rsp_result;
5159                if (result == -EINVAL)
5160                        rsp_result = L2CAP_MR_BAD_ID;
5161                else
5162                        rsp_result = L2CAP_MR_NOT_ALLOWED;
5163
5164                l2cap_send_move_chan_rsp(chan, rsp_result);
5165        }
5166
5167        chan->move_role = L2CAP_MOVE_ROLE_NONE;
5168        chan->move_state = L2CAP_MOVE_STABLE;
5169
5170        /* Restart data transmission */
5171        l2cap_ertm_send(chan);
5172}
5173
5174/* Invoke with locked chan */
5175void __l2cap_physical_cfm(struct l2cap_chan *chan, int result)
5176{
5177        u8 local_amp_id = chan->local_amp_id;
5178        u8 remote_amp_id = chan->remote_amp_id;
5179
5180        BT_DBG("chan %p, result %d, local_amp_id %d, remote_amp_id %d",
5181               chan, result, local_amp_id, remote_amp_id);
5182
5183        if (chan->state == BT_DISCONN || chan->state == BT_CLOSED)
5184                return;
5185
5186        if (chan->state != BT_CONNECTED) {
5187                l2cap_do_create(chan, result, local_amp_id, remote_amp_id);
5188        } else if (result != L2CAP_MR_SUCCESS) {
5189                l2cap_do_move_cancel(chan, result);
5190        } else {
5191                switch (chan->move_role) {
5192                case L2CAP_MOVE_ROLE_INITIATOR:
5193                        l2cap_do_move_initiate(chan, local_amp_id,
5194                                               remote_amp_id);
5195                        break;
5196                case L2CAP_MOVE_ROLE_RESPONDER:
5197                        l2cap_do_move_respond(chan, result);
5198                        break;
5199                default:
5200                        l2cap_do_move_cancel(chan, result);
5201                        break;
5202                }
5203        }
5204}
5205
5206static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
5207                                         struct l2cap_cmd_hdr *cmd,
5208                                         u16 cmd_len, void *data)
5209{
5210        struct l2cap_move_chan_req *req = data;
5211        struct l2cap_move_chan_rsp rsp;
5212        struct l2cap_chan *chan;
5213        u16 icid = 0;
5214        u16 result = L2CAP_MR_NOT_ALLOWED;
5215
5216        if (cmd_len != sizeof(*req))
5217                return -EPROTO;
5218
5219        icid = le16_to_cpu(req->icid);
5220
5221        BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid, req->dest_amp_id);
5222
5223        if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
5224                return -EINVAL;
5225
5226        chan = l2cap_get_chan_by_dcid(conn, icid);
5227        if (!chan) {
5228                rsp.icid = cpu_to_le16(icid);
5229                rsp.result = cpu_to_le16(L2CAP_MR_NOT_ALLOWED);
5230                l2cap_send_cmd(conn, cmd->ident, L2CAP_MOVE_CHAN_RSP,
5231                               sizeof(rsp), &rsp);
5232                return 0;
5233        }
5234
5235        chan->ident = cmd->ident;
5236
5237        if (chan->scid < L2CAP_CID_DYN_START ||
5238            chan->chan_policy == BT_CHANNEL_POLICY_BREDR_ONLY ||
5239            (chan->mode != L2CAP_MODE_ERTM &&
5240             chan->mode != L2CAP_MODE_STREAMING)) {
5241                result = L2CAP_MR_NOT_ALLOWED;
5242                goto send_move_response;
5243        }
5244
5245        if (chan->local_amp_id == req->dest_amp_id) {
5246                result = L2CAP_MR_SAME_ID;
5247                goto send_move_response;
5248        }
5249
5250        if (req->dest_amp_id != AMP_ID_BREDR) {
5251                struct hci_dev *hdev;
5252                hdev = hci_dev_get(req->dest_amp_id);
5253                if (!hdev || hdev->dev_type != HCI_AMP ||
5254                    !test_bit(HCI_UP, &hdev->flags)) {
5255                        if (hdev)
5256                                hci_dev_put(hdev);
5257
5258                        result = L2CAP_MR_BAD_ID;
5259                        goto send_move_response;
5260                }
5261                hci_dev_put(hdev);
5262        }
5263
5264        /* Detect a move collision.  Only send a collision response
5265         * if this side has "lost", otherwise proceed with the move.
5266         * The winner has the larger bd_addr.
5267         */
5268        if ((__chan_is_moving(chan) ||
5269             chan->move_role != L2CAP_MOVE_ROLE_NONE) &&
5270            bacmp(&conn->hcon->src, &conn->hcon->dst) > 0) {
5271                result = L2CAP_MR_COLLISION;
5272                goto send_move_response;
5273        }
5274
5275        chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5276        l2cap_move_setup(chan);
5277        chan->move_id = req->dest_amp_id;
5278
5279        if (req->dest_amp_id == AMP_ID_BREDR) {
5280                /* Moving to BR/EDR */
5281                if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5282                        chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5283                        result = L2CAP_MR_PEND;
5284                } else {
5285                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5286                        result = L2CAP_MR_SUCCESS;
5287                }
5288        } else {
5289                chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
5290                /* Placeholder - uncomment when amp functions are available */
5291                /*amp_accept_physical(chan, req->dest_amp_id);*/
5292                result = L2CAP_MR_PEND;
5293        }
5294
5295send_move_response:
5296        l2cap_send_move_chan_rsp(chan, result);
5297
5298        l2cap_chan_unlock(chan);
5299
5300        return 0;
5301}
5302
5303static void l2cap_move_continue(struct l2cap_conn *conn, u16 icid, u16 result)
5304{
5305        struct l2cap_chan *chan;
5306        struct hci_chan *hchan = NULL;
5307
5308        chan = l2cap_get_chan_by_scid(conn, icid);
5309        if (!chan) {
5310                l2cap_send_move_chan_cfm_icid(conn, icid);
5311                return;
5312        }
5313
5314        __clear_chan_timer(chan);
5315        if (result == L2CAP_MR_PEND)
5316                __set_chan_timer(chan, L2CAP_MOVE_ERTX_TIMEOUT);
5317
5318        switch (chan->move_state) {
5319        case L2CAP_MOVE_WAIT_LOGICAL_COMP:
5320                /* Move confirm will be sent when logical link
5321                 * is complete.
5322                 */
5323                chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5324                break;
5325        case L2CAP_MOVE_WAIT_RSP_SUCCESS:
5326                if (result == L2CAP_MR_PEND) {
5327                        break;
5328                } else if (test_bit(CONN_LOCAL_BUSY,
5329                                    &chan->conn_state)) {
5330                        chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5331                } else {
5332                        /* Logical link is up or moving to BR/EDR,
5333                         * proceed with move
5334                         */
5335                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
5336                        l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5337                }
5338                break;
5339        case L2CAP_MOVE_WAIT_RSP:
5340                /* Moving to AMP */
5341                if (result == L2CAP_MR_SUCCESS) {
5342                        /* Remote is ready, send confirm immediately
5343                         * after logical link is ready
5344                         */
5345                        chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5346                } else {
5347                        /* Both logical link and move success
5348                         * are required to confirm
5349                         */
5350                        chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_COMP;
5351                }
5352
5353                /* Placeholder - get hci_chan for logical link */
5354                if (!hchan) {
5355                        /* Logical link not available */
5356                        l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5357                        break;
5358                }
5359
5360                /* If the logical link is not yet connected, do not
5361                 * send confirmation.
5362                 */
5363                if (hchan->state != BT_CONNECTED)
5364                        break;
5365
5366                /* Logical link is already ready to go */
5367
5368                chan->hs_hcon = hchan->conn;
5369                chan->hs_hcon->l2cap_data = chan->conn;
5370
5371                if (result == L2CAP_MR_SUCCESS) {
5372                        /* Can confirm now */
5373                        l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5374                } else {
5375                        /* Now only need move success
5376                         * to confirm
5377                         */
5378                        chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5379                }
5380
5381                l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
5382                break;
5383        default:
5384                /* Any other amp move state means the move failed. */
5385                chan->move_id = chan->local_amp_id;
5386                l2cap_move_done(chan);
5387                l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5388        }
5389
5390        l2cap_chan_unlock(chan);
5391}
5392
5393static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid,
5394                            u16 result)
5395{
5396        struct l2cap_chan *chan;
5397
5398        chan = l2cap_get_chan_by_ident(conn, ident);
5399        if (!chan) {
5400                /* Could not locate channel, icid is best guess */
5401                l2cap_send_move_chan_cfm_icid(conn, icid);
5402                return;
5403        }
5404
5405        __clear_chan_timer(chan);
5406
5407        if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5408                if (result == L2CAP_MR_COLLISION) {
5409                        chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5410                } else {
5411                        /* Cleanup - cancel move */
5412                        chan->move_id = chan->local_amp_id;
5413                        l2cap_move_done(chan);
5414                }
5415        }
5416
5417        l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5418
5419        l2cap_chan_unlock(chan);
5420}
5421
5422static int l2cap_move_channel_rsp(struct l2cap_conn *conn,
5423                                  struct l2cap_cmd_hdr *cmd,
5424                                  u16 cmd_len, void *data)
5425{
5426        struct l2cap_move_chan_rsp *rsp = data;
5427        u16 icid, result;
5428
5429        if (cmd_len != sizeof(*rsp))
5430                return -EPROTO;
5431
5432        icid = le16_to_cpu(rsp->icid);
5433        result = le16_to_cpu(rsp->result);
5434
5435        BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5436
5437        if (result == L2CAP_MR_SUCCESS || result == L2CAP_MR_PEND)
5438                l2cap_move_continue(conn, icid, result);
5439        else
5440                l2cap_move_fail(conn, cmd->ident, icid, result);
5441
5442        return 0;
5443}
5444
5445static int l2cap_move_channel_confirm(struct l2cap_conn *conn,
5446                                      struct l2cap_cmd_hdr *cmd,
5447                                      u16 cmd_len, void *data)
5448{
5449        struct l2cap_move_chan_cfm *cfm = data;
5450        struct l2cap_chan *chan;
5451        u16 icid, result;
5452
5453        if (cmd_len != sizeof(*cfm))
5454                return -EPROTO;
5455
5456        icid = le16_to_cpu(cfm->icid);
5457        result = le16_to_cpu(cfm->result);
5458
5459        BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5460
5461        chan = l2cap_get_chan_by_dcid(conn, icid);
5462        if (!chan) {
5463                /* Spec requires a response even if the icid was not found */
5464                l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5465                return 0;
5466        }
5467
5468        if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM) {
5469                if (result == L2CAP_MC_CONFIRMED) {
5470                        chan->local_amp_id = chan->move_id;
5471                        if (chan->local_amp_id == AMP_ID_BREDR)
5472                                __release_logical_link(chan);
5473                } else {
5474                        chan->move_id = chan->local_amp_id;
5475                }
5476
5477                l2cap_move_done(chan);
5478        }
5479
5480        l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5481
5482        l2cap_chan_unlock(chan);
5483
5484        return 0;
5485}
5486
5487static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
5488                                                 struct l2cap_cmd_hdr *cmd,
5489                                                 u16 cmd_len, void *data)
5490{
5491        struct l2cap_move_chan_cfm_rsp *rsp = data;
5492        struct l2cap_chan *chan;
5493        u16 icid;
5494
5495        if (cmd_len != sizeof(*rsp))
5496                return -EPROTO;
5497
5498        icid = le16_to_cpu(rsp->icid);
5499
5500        BT_DBG("icid 0x%4.4x", icid);
5501
5502        chan = l2cap_get_chan_by_scid(conn, icid);
5503        if (!chan)
5504                return 0;
5505
5506        __clear_chan_timer(chan);
5507
5508        if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM_RSP) {
5509                chan->local_amp_id = chan->move_id;
5510
5511                if (chan->local_amp_id == AMP_ID_BREDR && chan->hs_hchan)
5512                        __release_logical_link(chan);
5513
5514                l2cap_move_done(chan);
5515        }
5516
5517        l2cap_chan_unlock(chan);
5518
5519        return 0;
5520}
5521
5522static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
5523                                              struct l2cap_cmd_hdr *cmd,
5524                                              u16 cmd_len, u8 *data)
5525{
5526        struct hci_conn *hcon = conn->hcon;
5527        struct l2cap_conn_param_update_req *req;
5528        struct l2cap_conn_param_update_rsp rsp;
5529        u16 min, max, latency, to_multiplier;
5530        int err;
5531
5532        if (hcon->role != HCI_ROLE_MASTER)
5533                return -EINVAL;
5534
5535        if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
5536                return -EPROTO;
5537
5538        req = (struct l2cap_conn_param_update_req *) data;
5539        min             = __le16_to_cpu(req->min);
5540        max             = __le16_to_cpu(req->max);
5541        latency         = __le16_to_cpu(req->latency);
5542        to_multiplier   = __le16_to_cpu(req->to_multiplier);
5543
5544        BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
5545               min, max, latency, to_multiplier);
5546
5547        memset(&rsp, 0, sizeof(rsp));
5548
5549        err = hci_check_conn_params(min, max, latency, to_multiplier);
5550        if (err)
5551                rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
5552        else
5553                rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
5554
5555        l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
5556                       sizeof(rsp), &rsp);
5557
5558        if (!err) {
5559                u8 store_hint;
5560
5561                store_hint = hci_le_conn_update(hcon, min, max, latency,
5562                                                to_multiplier);
5563                mgmt_new_conn_param(hcon->hdev, &hcon->dst, hcon->dst_type,
5564                                    store_hint, min, max, latency,
5565                                    to_multiplier);
5566
5567        }
5568
5569        return 0;
5570}
5571
5572static int l2cap_le_connect_rsp(struct l2cap_conn *conn,
5573                                struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5574                                u8 *data)
5575{
5576        struct l2cap_le_conn_rsp *rsp = (struct l2cap_le_conn_rsp *) data;
5577        struct hci_conn *hcon = conn->hcon;
5578        u16 dcid, mtu, mps, credits, result;
5579        struct l2cap_chan *chan;
5580        int err, sec_level;
5581
5582        if (cmd_len < sizeof(*rsp))
5583                return -EPROTO;
5584
5585        dcid    = __le16_to_cpu(rsp->dcid);
5586        mtu     = __le16_to_cpu(rsp->mtu);
5587        mps     = __le16_to_cpu(rsp->mps);
5588        credits = __le16_to_cpu(rsp->credits);
5589        result  = __le16_to_cpu(rsp->result);
5590
5591        if (result == L2CAP_CR_LE_SUCCESS && (mtu < 23 || mps < 23 ||
5592                                           dcid < L2CAP_CID_DYN_START ||
5593                                           dcid > L2CAP_CID_LE_DYN_END))
5594                return -EPROTO;
5595
5596        BT_DBG("dcid 0x%4.4x mtu %u mps %u credits %u result 0x%2.2x",
5597               dcid, mtu, mps, credits, result);
5598
5599        mutex_lock(&conn->chan_lock);
5600
5601        chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
5602        if (!chan) {
5603                err = -EBADSLT;
5604                goto unlock;
5605        }
5606
5607        err = 0;
5608
5609        l2cap_chan_lock(chan);
5610
5611        switch (result) {
5612        case L2CAP_CR_LE_SUCCESS:
5613                if (__l2cap_get_chan_by_dcid(conn, dcid)) {
5614                        err = -EBADSLT;
5615                        break;
5616                }
5617
5618                chan->ident = 0;
5619                chan->dcid = dcid;
5620                chan->omtu = mtu;
5621                chan->remote_mps = mps;
5622                chan->tx_credits = credits;
5623                l2cap_chan_ready(chan);
5624                break;
5625
5626        case L2CAP_CR_LE_AUTHENTICATION:
5627        case L2CAP_CR_LE_ENCRYPTION:
5628                /* If we already have MITM protection we can't do
5629                 * anything.
5630                 */
5631                if (hcon->sec_level > BT_SECURITY_MEDIUM) {
5632                        l2cap_chan_del(chan, ECONNREFUSED);
5633                        break;
5634                }
5635
5636                sec_level = hcon->sec_level + 1;
5637                if (chan->sec_level < sec_level)
5638                        chan->sec_level = sec_level;
5639
5640                /* We'll need to send a new Connect Request */
5641                clear_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags);
5642
5643                smp_conn_security(hcon, chan->sec_level);
5644                break;
5645
5646        default:
5647                l2cap_chan_del(chan, ECONNREFUSED);
5648                break;
5649        }
5650
5651        l2cap_chan_unlock(chan);
5652
5653unlock:
5654        mutex_unlock(&conn->chan_lock);
5655
5656        return err;
5657}
5658
5659static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
5660                                      struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5661                                      u8 *data)
5662{
5663        int err = 0;
5664
5665        switch (cmd->code) {
5666        case L2CAP_COMMAND_REJ:
5667                l2cap_command_rej(conn, cmd, cmd_len, data);
5668                break;
5669
5670        case L2CAP_CONN_REQ:
5671                err = l2cap_connect_req(conn, cmd, cmd_len, data);
5672                break;
5673
5674        case L2CAP_CONN_RSP:
5675        case L2CAP_CREATE_CHAN_RSP:
5676                l2cap_connect_create_rsp(conn, cmd, cmd_len, data);
5677                break;
5678
5679        case L2CAP_CONF_REQ:
5680                err = l2cap_config_req(conn, cmd, cmd_len, data);
5681                break;
5682
5683        case L2CAP_CONF_RSP:
5684                l2cap_config_rsp(conn, cmd, cmd_len, data);
5685                break;
5686
5687        case L2CAP_DISCONN_REQ:
5688                err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
5689                break;
5690
5691        case L2CAP_DISCONN_RSP:
5692                l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
5693                break;
5694
5695        case L2CAP_ECHO_REQ:
5696                l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
5697                break;
5698
5699        case L2CAP_ECHO_RSP:
5700                break;
5701
5702        case L2CAP_INFO_REQ:
5703                err = l2cap_information_req(conn, cmd, cmd_len, data);
5704                break;
5705
5706        case L2CAP_INFO_RSP:
5707                l2cap_information_rsp(conn, cmd, cmd_len, data);
5708                break;
5709
5710        case L2CAP_CREATE_CHAN_REQ:
5711                err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
5712                break;
5713
5714        case L2CAP_MOVE_CHAN_REQ:
5715                err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
5716                break;
5717
5718        case L2CAP_MOVE_CHAN_RSP:
5719                l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
5720                break;
5721
5722        case L2CAP_MOVE_CHAN_CFM:
5723                err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
5724                break;
5725
5726        case L2CAP_MOVE_CHAN_CFM_RSP:
5727                l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
5728                break;
5729
5730        default:
5731                BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
5732                err = -EINVAL;
5733                break;
5734        }
5735
5736        return err;
5737}
5738
5739static int l2cap_le_connect_req(struct l2cap_conn *conn,
5740                                struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5741                                u8 *data)
5742{
5743        struct l2cap_le_conn_req *req = (struct l2cap_le_conn_req *) data;
5744        struct l2cap_le_conn_rsp rsp;
5745        struct l2cap_chan *chan, *pchan;
5746        u16 dcid, scid, credits, mtu, mps;
5747        __le16 psm;
5748        u8 result;
5749
5750        if (cmd_len != sizeof(*req))
5751                return -EPROTO;
5752
5753        scid = __le16_to_cpu(req->scid);
5754        mtu  = __le16_to_cpu(req->mtu);
5755        mps  = __le16_to_cpu(req->mps);
5756        psm  = req->psm;
5757        dcid = 0;
5758        credits = 0;
5759
5760        if (mtu < 23 || mps < 23)
5761                return -EPROTO;
5762
5763        BT_DBG("psm 0x%2.2x scid 0x%4.4x mtu %u mps %u", __le16_to_cpu(psm),
5764               scid, mtu, mps);
5765
5766        /* Check if we have socket listening on psm */
5767        pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
5768                                         &conn->hcon->dst, LE_LINK);
5769        if (!pchan) {
5770                result = L2CAP_CR_LE_BAD_PSM;
5771                chan = NULL;
5772                goto response;
5773        }
5774
5775        mutex_lock(&conn->chan_lock);
5776        l2cap_chan_lock(pchan);
5777
5778        if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
5779                                     SMP_ALLOW_STK)) {
5780                result = L2CAP_CR_LE_AUTHENTICATION;
5781                chan = NULL;
5782                goto response_unlock;
5783        }
5784
5785        /* Check for valid dynamic CID range */
5786        if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END) {
5787                result = L2CAP_CR_LE_INVALID_SCID;
5788                chan = NULL;
5789                goto response_unlock;
5790        }
5791
5792        /* Check if we already have channel with that dcid */
5793        if (__l2cap_get_chan_by_dcid(conn, scid)) {
5794                result = L2CAP_CR_LE_SCID_IN_USE;
5795                chan = NULL;
5796                goto response_unlock;
5797        }
5798
5799        chan = pchan->ops->new_connection(pchan);
5800        if (!chan) {
5801                result = L2CAP_CR_LE_NO_MEM;
5802                goto response_unlock;
5803        }
5804
5805        bacpy(&chan->src, &conn->hcon->src);
5806        bacpy(&chan->dst, &conn->hcon->dst);
5807        chan->src_type = bdaddr_src_type(conn->hcon);
5808        chan->dst_type = bdaddr_dst_type(conn->hcon);
5809        chan->psm  = psm;
5810        chan->dcid = scid;
5811        chan->omtu = mtu;
5812        chan->remote_mps = mps;
5813
5814        __l2cap_chan_add(conn, chan);
5815
5816        l2cap_le_flowctl_init(chan, __le16_to_cpu(req->credits));
5817
5818        dcid = chan->scid;
5819        credits = chan->rx_credits;
5820
5821        __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
5822
5823        chan->ident = cmd->ident;
5824
5825        if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
5826                l2cap_state_change(chan, BT_CONNECT2);
5827                /* The following result value is actually not defined
5828                 * for LE CoC but we use it to let the function know
5829                 * that it should bail out after doing its cleanup
5830                 * instead of sending a response.
5831                 */
5832                result = L2CAP_CR_PEND;
5833                chan->ops->defer(chan);
5834        } else {
5835                l2cap_chan_ready(chan);
5836                result = L2CAP_CR_LE_SUCCESS;
5837        }
5838
5839response_unlock:
5840        l2cap_chan_unlock(pchan);
5841        mutex_unlock(&conn->chan_lock);
5842        l2cap_chan_put(pchan);
5843
5844        if (result == L2CAP_CR_PEND)
5845                return 0;
5846
5847response:
5848        if (chan) {
5849                rsp.mtu = cpu_to_le16(chan->imtu);
5850                rsp.mps = cpu_to_le16(chan->mps);
5851        } else {
5852                rsp.mtu = 0;
5853                rsp.mps = 0;
5854        }
5855
5856        rsp.dcid    = cpu_to_le16(dcid);
5857        rsp.credits = cpu_to_le16(credits);
5858        rsp.result  = cpu_to_le16(result);
5859
5860        l2cap_send_cmd(conn, cmd->ident, L2CAP_LE_CONN_RSP, sizeof(rsp), &rsp);
5861
5862        return 0;
5863}
5864
5865static inline int l2cap_le_credits(struct l2cap_conn *conn,
5866                                   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5867                                   u8 *data)
5868{
5869        struct l2cap_le_credits *pkt;
5870        struct l2cap_chan *chan;
5871        u16 cid, credits, max_credits;
5872
5873        if (cmd_len != sizeof(*pkt))
5874                return -EPROTO;
5875
5876        pkt = (struct l2cap_le_credits *) data;
5877        cid     = __le16_to_cpu(pkt->cid);
5878        credits = __le16_to_cpu(pkt->credits);
5879
5880        BT_DBG("cid 0x%4.4x credits 0x%4.4x", cid, credits);
5881
5882        chan = l2cap_get_chan_by_dcid(conn, cid);
5883        if (!chan)
5884                return -EBADSLT;
5885
5886        max_credits = LE_FLOWCTL_MAX_CREDITS - chan->tx_credits;
5887        if (credits > max_credits) {
5888                BT_ERR("LE credits overflow");
5889                l2cap_send_disconn_req(chan, ECONNRESET);
5890                l2cap_chan_unlock(chan);
5891
5892                /* Return 0 so that we don't trigger an unnecessary
5893                 * command reject packet.
5894                 */
5895                return 0;
5896        }
5897
5898        chan->tx_credits += credits;
5899
5900        /* Resume sending */
5901        l2cap_le_flowctl_send(chan);
5902
5903        if (chan->tx_credits)
5904                chan->ops->resume(chan);
5905
5906        l2cap_chan_unlock(chan);
5907
5908        return 0;
5909}
5910
5911static inline int l2cap_ecred_conn_req(struct l2cap_conn *conn,
5912                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5913                                       u8 *data)
5914{
5915        struct l2cap_ecred_conn_req *req = (void *) data;
5916        struct {
5917                struct l2cap_ecred_conn_rsp rsp;
5918                __le16 dcid[5];
5919        } __packed pdu;
5920        struct l2cap_chan *chan, *pchan;
5921        u16 mtu, mps;
5922        __le16 psm;
5923        u8 result, len = 0;
5924        int i, num_scid;
5925        bool defer = false;
5926
5927        if (!enable_ecred)
5928                return -EINVAL;
5929
5930        if (cmd_len < sizeof(*req) || (cmd_len - sizeof(*req)) % sizeof(u16)) {
5931                result = L2CAP_CR_LE_INVALID_PARAMS;
5932                goto response;
5933        }
5934
5935        mtu  = __le16_to_cpu(req->mtu);
5936        mps  = __le16_to_cpu(req->mps);
5937
5938        if (mtu < L2CAP_ECRED_MIN_MTU || mps < L2CAP_ECRED_MIN_MPS) {
5939                result = L2CAP_CR_LE_UNACCEPT_PARAMS;
5940                goto response;
5941        }
5942
5943        psm  = req->psm;
5944
5945        BT_DBG("psm 0x%2.2x mtu %u mps %u", __le16_to_cpu(psm), mtu, mps);
5946
5947        memset(&pdu, 0, sizeof(pdu));
5948
5949        /* Check if we have socket listening on psm */
5950        pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
5951                                         &conn->hcon->dst, LE_LINK);
5952        if (!pchan) {
5953                result = L2CAP_CR_LE_BAD_PSM;
5954                goto response;
5955        }
5956
5957        mutex_lock(&conn->chan_lock);
5958        l2cap_chan_lock(pchan);
5959
5960        if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
5961                                     SMP_ALLOW_STK)) {
5962                result = L2CAP_CR_LE_AUTHENTICATION;
5963                goto unlock;
5964        }
5965
5966        result = L2CAP_CR_LE_SUCCESS;
5967        cmd_len -= sizeof(*req);
5968        num_scid = cmd_len / sizeof(u16);
5969
5970        for (i = 0; i < num_scid; i++) {
5971                u16 scid = __le16_to_cpu(req->scid[i]);
5972
5973                BT_DBG("scid[%d] 0x%4.4x", i, scid);
5974
5975                pdu.dcid[i] = 0x0000;
5976                len += sizeof(*pdu.dcid);
5977
5978                /* Check for valid dynamic CID range */
5979                if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END) {
5980                        result = L2CAP_CR_LE_INVALID_SCID;
5981                        continue;
5982                }
5983
5984                /* Check if we already have channel with that dcid */
5985                if (__l2cap_get_chan_by_dcid(conn, scid)) {
5986                        result = L2CAP_CR_LE_SCID_IN_USE;
5987                        continue;
5988                }
5989
5990                chan = pchan->ops->new_connection(pchan);
5991                if (!chan) {
5992                        result = L2CAP_CR_LE_NO_MEM;
5993                        continue;
5994                }
5995
5996                bacpy(&chan->src, &conn->hcon->src);
5997                bacpy(&chan->dst, &conn->hcon->dst);
5998                chan->src_type = bdaddr_src_type(conn->hcon);
5999                chan->dst_type = bdaddr_dst_type(conn->hcon);
6000                chan->psm  = psm;
6001                chan->dcid = scid;
6002                chan->omtu = mtu;
6003                chan->remote_mps = mps;
6004
6005                __l2cap_chan_add(conn, chan);
6006
6007                l2cap_ecred_init(chan, __le16_to_cpu(req->credits));
6008
6009                /* Init response */
6010                if (!pdu.rsp.credits) {
6011                        pdu.rsp.mtu = cpu_to_le16(chan->imtu);
6012                        pdu.rsp.mps = cpu_to_le16(chan->mps);
6013                        pdu.rsp.credits = cpu_to_le16(chan->rx_credits);
6014                }
6015
6016                pdu.dcid[i] = cpu_to_le16(chan->scid);
6017
6018                __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
6019
6020                chan->ident = cmd->ident;
6021
6022                if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
6023                        l2cap_state_change(chan, BT_CONNECT2);
6024                        defer = true;
6025                        chan->ops->defer(chan);
6026                } else {
6027                        l2cap_chan_ready(chan);
6028                }
6029        }
6030
6031unlock:
6032        l2cap_chan_unlock(pchan);
6033        mutex_unlock(&conn->chan_lock);
6034        l2cap_chan_put(pchan);
6035
6036response:
6037        pdu.rsp.result = cpu_to_le16(result);
6038
6039        if (defer)
6040                return 0;
6041
6042        l2cap_send_cmd(conn, cmd->ident, L2CAP_ECRED_CONN_RSP,
6043                       sizeof(pdu.rsp) + len, &pdu);
6044
6045        return 0;
6046}
6047
6048static inline int l2cap_ecred_conn_rsp(struct l2cap_conn *conn,
6049                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6050                                       u8 *data)
6051{
6052        struct l2cap_ecred_conn_rsp *rsp = (void *) data;
6053        struct hci_conn *hcon = conn->hcon;
6054        u16 mtu, mps, credits, result;
6055        struct l2cap_chan *chan;
6056        int err = 0, sec_level;
6057        int i = 0;
6058
6059        if (cmd_len < sizeof(*rsp))
6060                return -EPROTO;
6061
6062        mtu     = __le16_to_cpu(rsp->mtu);
6063        mps     = __le16_to_cpu(rsp->mps);
6064        credits = __le16_to_cpu(rsp->credits);
6065        result  = __le16_to_cpu(rsp->result);
6066
6067        BT_DBG("mtu %u mps %u credits %u result 0x%4.4x", mtu, mps, credits,
6068               result);
6069
6070        mutex_lock(&conn->chan_lock);
6071
6072        cmd_len -= sizeof(*rsp);
6073
6074        list_for_each_entry(chan, &conn->chan_l, list) {
6075                u16 dcid;
6076
6077                if (chan->ident != cmd->ident ||
6078                    chan->mode != L2CAP_MODE_EXT_FLOWCTL ||
6079                    chan->state == BT_CONNECTED)
6080                        continue;
6081
6082                l2cap_chan_lock(chan);
6083
6084                /* Check that there is a dcid for each pending channel */
6085                if (cmd_len < sizeof(dcid)) {
6086                        l2cap_chan_del(chan, ECONNREFUSED);
6087                        l2cap_chan_unlock(chan);
6088                        continue;
6089                }
6090
6091                dcid = __le16_to_cpu(rsp->dcid[i++]);
6092                cmd_len -= sizeof(u16);
6093
6094                BT_DBG("dcid[%d] 0x%4.4x", i, dcid);
6095
6096                /* Check if dcid is already in use */
6097                if (dcid && __l2cap_get_chan_by_dcid(conn, dcid)) {
6098                        /* If a device receives a
6099                         * L2CAP_CREDIT_BASED_CONNECTION_RSP packet with an
6100                         * already-assigned Destination CID, then both the
6101                         * original channel and the new channel shall be
6102                         * immediately discarded and not used.
6103                         */
6104                        l2cap_chan_del(chan, ECONNREFUSED);
6105                        l2cap_chan_unlock(chan);
6106                        chan = __l2cap_get_chan_by_dcid(conn, dcid);
6107                        l2cap_chan_lock(chan);
6108                        l2cap_chan_del(chan, ECONNRESET);
6109                        l2cap_chan_unlock(chan);
6110                        continue;
6111                }
6112
6113                switch (result) {
6114                case L2CAP_CR_LE_AUTHENTICATION:
6115                case L2CAP_CR_LE_ENCRYPTION:
6116                        /* If we already have MITM protection we can't do
6117                         * anything.
6118                         */
6119                        if (hcon->sec_level > BT_SECURITY_MEDIUM) {
6120                                l2cap_chan_del(chan, ECONNREFUSED);
6121                                break;
6122                        }
6123
6124                        sec_level = hcon->sec_level + 1;
6125                        if (chan->sec_level < sec_level)
6126                                chan->sec_level = sec_level;
6127
6128                        /* We'll need to send a new Connect Request */
6129                        clear_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags);
6130
6131                        smp_conn_security(hcon, chan->sec_level);
6132                        break;
6133
6134                case L2CAP_CR_LE_BAD_PSM:
6135                        l2cap_chan_del(chan, ECONNREFUSED);
6136                        break;
6137
6138                default:
6139                        /* If dcid was not set it means channels was refused */
6140                        if (!dcid) {
6141                                l2cap_chan_del(chan, ECONNREFUSED);
6142                                break;
6143                        }
6144
6145                        chan->ident = 0;
6146                        chan->dcid = dcid;
6147                        chan->omtu = mtu;
6148                        chan->remote_mps = mps;
6149                        chan->tx_credits = credits;
6150                        l2cap_chan_ready(chan);
6151                        break;
6152                }
6153
6154                l2cap_chan_unlock(chan);
6155        }
6156
6157        mutex_unlock(&conn->chan_lock);
6158
6159        return err;
6160}
6161
6162static inline int l2cap_ecred_reconf_req(struct l2cap_conn *conn,
6163                                         struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6164                                         u8 *data)
6165{
6166        struct l2cap_ecred_reconf_req *req = (void *) data;
6167        struct l2cap_ecred_reconf_rsp rsp;
6168        u16 mtu, mps, result;
6169        struct l2cap_chan *chan;
6170        int i, num_scid;
6171
6172        if (!enable_ecred)
6173                return -EINVAL;
6174
6175        if (cmd_len < sizeof(*req) || cmd_len - sizeof(*req) % sizeof(u16)) {
6176                result = L2CAP_CR_LE_INVALID_PARAMS;
6177                goto respond;
6178        }
6179
6180        mtu = __le16_to_cpu(req->mtu);
6181        mps = __le16_to_cpu(req->mps);
6182
6183        BT_DBG("mtu %u mps %u", mtu, mps);
6184
6185        if (mtu < L2CAP_ECRED_MIN_MTU) {
6186                result = L2CAP_RECONF_INVALID_MTU;
6187                goto respond;
6188        }
6189
6190        if (mps < L2CAP_ECRED_MIN_MPS) {
6191                result = L2CAP_RECONF_INVALID_MPS;
6192                goto respond;
6193        }
6194
6195        cmd_len -= sizeof(*req);
6196        num_scid = cmd_len / sizeof(u16);
6197        result = L2CAP_RECONF_SUCCESS;
6198
6199        for (i = 0; i < num_scid; i++) {
6200                u16 scid;
6201
6202                scid = __le16_to_cpu(req->scid[i]);
6203                if (!scid)
6204                        return -EPROTO;
6205
6206                chan = __l2cap_get_chan_by_dcid(conn, scid);
6207                if (!chan)
6208                        continue;
6209
6210                /* If the MTU value is decreased for any of the included
6211                 * channels, then the receiver shall disconnect all
6212                 * included channels.
6213                 */
6214                if (chan->omtu > mtu) {
6215                        BT_ERR("chan %p decreased MTU %u -> %u", chan,
6216                               chan->omtu, mtu);
6217                        result = L2CAP_RECONF_INVALID_MTU;
6218                }
6219
6220                chan->omtu = mtu;
6221                chan->remote_mps = mps;
6222        }
6223
6224respond:
6225        rsp.result = cpu_to_le16(result);
6226
6227        l2cap_send_cmd(conn, cmd->ident, L2CAP_ECRED_RECONF_RSP, sizeof(rsp),
6228                       &rsp);
6229
6230        return 0;
6231}
6232
6233static inline int l2cap_ecred_reconf_rsp(struct l2cap_conn *conn,
6234                                         struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6235                                         u8 *data)
6236{
6237        struct l2cap_chan *chan;
6238        struct l2cap_ecred_conn_rsp *rsp = (void *) data;
6239        u16 result;
6240
6241        if (cmd_len < sizeof(*rsp))
6242                return -EPROTO;
6243
6244        result = __le16_to_cpu(rsp->result);
6245
6246        BT_DBG("result 0x%4.4x", rsp->result);
6247
6248        if (!result)
6249                return 0;
6250
6251        list_for_each_entry(chan, &conn->chan_l, list) {
6252                if (chan->ident != cmd->ident)
6253                        continue;
6254
6255                l2cap_chan_del(chan, ECONNRESET);
6256        }
6257
6258        return 0;
6259}
6260
6261static inline int l2cap_le_command_rej(struct l2cap_conn *conn,
6262                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6263                                       u8 *data)
6264{
6265        struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
6266        struct l2cap_chan *chan;
6267
6268        if (cmd_len < sizeof(*rej))
6269                return -EPROTO;
6270
6271        mutex_lock(&conn->chan_lock);
6272
6273        chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
6274        if (!chan)
6275                goto done;
6276
6277        l2cap_chan_lock(chan);
6278        l2cap_chan_del(chan, ECONNREFUSED);
6279        l2cap_chan_unlock(chan);
6280
6281done:
6282        mutex_unlock(&conn->chan_lock);
6283        return 0;
6284}
6285
6286static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
6287                                   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6288                                   u8 *data)
6289{
6290        int err = 0;
6291
6292        switch (cmd->code) {
6293        case L2CAP_COMMAND_REJ:
6294                l2cap_le_command_rej(conn, cmd, cmd_len, data);
6295                break;
6296
6297        case L2CAP_CONN_PARAM_UPDATE_REQ:
6298                err = l2cap_conn_param_update_req(conn, cmd, cmd_len, data);
6299                break;
6300
6301        case L2CAP_CONN_PARAM_UPDATE_RSP:
6302                break;
6303
6304        case L2CAP_LE_CONN_RSP:
6305                l2cap_le_connect_rsp(conn, cmd, cmd_len, data);
6306                break;
6307
6308        case L2CAP_LE_CONN_REQ:
6309                err = l2cap_le_connect_req(conn, cmd, cmd_len, data);
6310                break;
6311
6312        case L2CAP_LE_CREDITS:
6313                err = l2cap_le_credits(conn, cmd, cmd_len, data);
6314                break;
6315
6316        case L2CAP_ECRED_CONN_REQ:
6317                err = l2cap_ecred_conn_req(conn, cmd, cmd_len, data);
6318                break;
6319
6320        case L2CAP_ECRED_CONN_RSP:
6321                err = l2cap_ecred_conn_rsp(conn, cmd, cmd_len, data);
6322                break;
6323
6324        case L2CAP_ECRED_RECONF_REQ:
6325                err = l2cap_ecred_reconf_req(conn, cmd, cmd_len, data);
6326                break;
6327
6328        case L2CAP_ECRED_RECONF_RSP:
6329                err = l2cap_ecred_reconf_rsp(conn, cmd, cmd_len, data);
6330                break;
6331
6332        case L2CAP_DISCONN_REQ:
6333                err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
6334                break;
6335
6336        case L2CAP_DISCONN_RSP:
6337                l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
6338                break;
6339
6340        default:
6341                BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
6342                err = -EINVAL;
6343                break;
6344        }
6345
6346        return err;
6347}
6348
6349static inline void l2cap_le_sig_channel(struct l2cap_conn *conn,
6350                                        struct sk_buff *skb)
6351{
6352        struct hci_conn *hcon = conn->hcon;
6353        struct l2cap_cmd_hdr *cmd;
6354        u16 len;
6355        int err;
6356
6357        if (hcon->type != LE_LINK)
6358                goto drop;
6359
6360        if (skb->len < L2CAP_CMD_HDR_SIZE)
6361                goto drop;
6362
6363        cmd = (void *) skb->data;
6364        skb_pull(skb, L2CAP_CMD_HDR_SIZE);
6365
6366        len = le16_to_cpu(cmd->len);
6367
6368        BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len, cmd->ident);
6369
6370        if (len != skb->len || !cmd->ident) {
6371                BT_DBG("corrupted command");
6372                goto drop;
6373        }
6374
6375        err = l2cap_le_sig_cmd(conn, cmd, len, skb->data);
6376        if (err) {
6377                struct l2cap_cmd_rej_unk rej;
6378
6379                BT_ERR("Wrong link type (%d)", err);
6380
6381                rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
6382                l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
6383                               sizeof(rej), &rej);
6384        }
6385
6386drop:
6387        kfree_skb(skb);
6388}
6389
6390static inline void l2cap_sig_channel(struct l2cap_conn *conn,
6391                                     struct sk_buff *skb)
6392{
6393        struct hci_conn *hcon = conn->hcon;
6394        struct l2cap_cmd_hdr *cmd;
6395        int err;
6396
6397        l2cap_raw_recv(conn, skb);
6398
6399        if (hcon->type != ACL_LINK)
6400                goto drop;
6401
6402        while (skb->len >= L2CAP_CMD_HDR_SIZE) {
6403                u16 len;
6404
6405                cmd = (void *) skb->data;
6406                skb_pull(skb, L2CAP_CMD_HDR_SIZE);
6407
6408                len = le16_to_cpu(cmd->len);
6409
6410                BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len,
6411                       cmd->ident);
6412
6413                if (len > skb->len || !cmd->ident) {
6414                        BT_DBG("corrupted command");
6415                        break;
6416                }
6417
6418                err = l2cap_bredr_sig_cmd(conn, cmd, len, skb->data);
6419                if (err) {
6420                        struct l2cap_cmd_rej_unk rej;
6421
6422                        BT_ERR("Wrong link type (%d)", err);
6423
6424                        rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
6425                        l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
6426                                       sizeof(rej), &rej);
6427                }
6428
6429                skb_pull(skb, len);
6430        }
6431
6432drop:
6433        kfree_skb(skb);
6434}
6435
6436static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
6437{
6438        u16 our_fcs, rcv_fcs;
6439        int hdr_size;
6440
6441        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
6442                hdr_size = L2CAP_EXT_HDR_SIZE;
6443        else
6444                hdr_size = L2CAP_ENH_HDR_SIZE;
6445
6446        if (chan->fcs == L2CAP_FCS_CRC16) {
6447                skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
6448                rcv_fcs = get_unaligned_le16(skb->data + skb->len);
6449                our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
6450
6451                if (our_fcs != rcv_fcs)
6452                        return -EBADMSG;
6453        }
6454        return 0;
6455}
6456
6457static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
6458{
6459        struct l2cap_ctrl control;
6460
6461        BT_DBG("chan %p", chan);
6462
6463        memset(&control, 0, sizeof(control));
6464        control.sframe = 1;
6465        control.final = 1;
6466        control.reqseq = chan->buffer_seq;
6467        set_bit(CONN_SEND_FBIT, &chan->conn_state);
6468
6469        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6470                control.super = L2CAP_SUPER_RNR;
6471                l2cap_send_sframe(chan, &control);
6472        }
6473
6474        if (test_and_clear_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
6475            chan->unacked_frames > 0)
6476                __set_retrans_timer(chan);
6477
6478        /* Send pending iframes */
6479        l2cap_ertm_send(chan);
6480
6481        if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
6482            test_bit(CONN_SEND_FBIT, &chan->conn_state)) {
6483                /* F-bit wasn't sent in an s-frame or i-frame yet, so
6484                 * send it now.
6485                 */
6486                control.super = L2CAP_SUPER_RR;
6487                l2cap_send_sframe(chan, &control);
6488        }
6489}
6490
6491static void append_skb_frag(struct sk_buff *skb, struct sk_buff *new_frag,
6492                            struct sk_buff **last_frag)
6493{
6494        /* skb->len reflects data in skb as well as all fragments
6495         * skb->data_len reflects only data in fragments
6496         */
6497        if (!skb_has_frag_list(skb))
6498                skb_shinfo(skb)->frag_list = new_frag;
6499
6500        new_frag->next = NULL;
6501
6502        (*last_frag)->next = new_frag;
6503        *last_frag = new_frag;
6504
6505        skb->len += new_frag->len;
6506        skb->data_len += new_frag->len;
6507        skb->truesize += new_frag->truesize;
6508}
6509
6510static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb,
6511                                struct l2cap_ctrl *control)
6512{
6513        int err = -EINVAL;
6514
6515        switch (control->sar) {
6516        case L2CAP_SAR_UNSEGMENTED:
6517                if (chan->sdu)
6518                        break;
6519
6520                err = chan->ops->recv(chan, skb);
6521                break;
6522
6523        case L2CAP_SAR_START:
6524                if (chan->sdu)
6525                        break;
6526
6527                if (!pskb_may_pull(skb, L2CAP_SDULEN_SIZE))
6528                        break;
6529
6530                chan->sdu_len = get_unaligned_le16(skb->data);
6531                skb_pull(skb, L2CAP_SDULEN_SIZE);
6532
6533                if (chan->sdu_len > chan->imtu) {
6534                        err = -EMSGSIZE;
6535                        break;
6536                }
6537
6538                if (skb->len >= chan->sdu_len)
6539                        break;
6540
6541                chan->sdu = skb;
6542                chan->sdu_last_frag = skb;
6543
6544                skb = NULL;
6545                err = 0;
6546                break;
6547
6548        case L2CAP_SAR_CONTINUE:
6549                if (!chan->sdu)
6550                        break;
6551
6552                append_skb_frag(chan->sdu, skb,
6553                                &chan->sdu_last_frag);
6554                skb = NULL;
6555
6556                if (chan->sdu->len >= chan->sdu_len)
6557                        break;
6558
6559                err = 0;
6560                break;
6561
6562        case L2CAP_SAR_END:
6563                if (!chan->sdu)
6564                        break;
6565
6566                append_skb_frag(chan->sdu, skb,
6567                                &chan->sdu_last_frag);
6568                skb = NULL;
6569
6570                if (chan->sdu->len != chan->sdu_len)
6571                        break;
6572
6573                err = chan->ops->recv(chan, chan->sdu);
6574
6575                if (!err) {
6576                        /* Reassembly complete */
6577                        chan->sdu = NULL;
6578                        chan->sdu_last_frag = NULL;
6579                        chan->sdu_len = 0;
6580                }
6581                break;
6582        }
6583
6584        if (err) {
6585                kfree_skb(skb);
6586                kfree_skb(chan->sdu);
6587                chan->sdu = NULL;
6588                chan->sdu_last_frag = NULL;
6589                chan->sdu_len = 0;
6590        }
6591
6592        return err;
6593}
6594
6595static int l2cap_resegment(struct l2cap_chan *chan)
6596{
6597        /* Placeholder */
6598        return 0;
6599}
6600
6601void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
6602{
6603        u8 event;
6604
6605        if (chan->mode != L2CAP_MODE_ERTM)
6606                return;
6607
6608        event = busy ? L2CAP_EV_LOCAL_BUSY_DETECTED : L2CAP_EV_LOCAL_BUSY_CLEAR;
6609        l2cap_tx(chan, NULL, NULL, event);
6610}
6611
6612static int l2cap_rx_queued_iframes(struct l2cap_chan *chan)
6613{
6614        int err = 0;
6615        /* Pass sequential frames to l2cap_reassemble_sdu()
6616         * until a gap is encountered.
6617         */
6618
6619        BT_DBG("chan %p", chan);
6620
6621        while (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6622                struct sk_buff *skb;
6623                BT_DBG("Searching for skb with txseq %d (queue len %d)",
6624                       chan->buffer_seq, skb_queue_len(&chan->srej_q));
6625
6626                skb = l2cap_ertm_seq_in_queue(&chan->srej_q, chan->buffer_seq);
6627
6628                if (!skb)
6629                        break;
6630
6631                skb_unlink(skb, &chan->srej_q);
6632                chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
6633                err = l2cap_reassemble_sdu(chan, skb, &bt_cb(skb)->l2cap);
6634                if (err)
6635                        break;
6636        }
6637
6638        if (skb_queue_empty(&chan->srej_q)) {
6639                chan->rx_state = L2CAP_RX_STATE_RECV;
6640                l2cap_send_ack(chan);
6641        }
6642
6643        return err;
6644}
6645
6646static void l2cap_handle_srej(struct l2cap_chan *chan,
6647                              struct l2cap_ctrl *control)
6648{
6649        struct sk_buff *skb;
6650
6651        BT_DBG("chan %p, control %p", chan, control);
6652
6653        if (control->reqseq == chan->next_tx_seq) {
6654                BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6655                l2cap_send_disconn_req(chan, ECONNRESET);
6656                return;
6657        }
6658
6659        skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6660
6661        if (skb == NULL) {
6662                BT_DBG("Seq %d not available for retransmission",
6663                       control->reqseq);
6664                return;
6665        }
6666
6667        if (chan->max_tx != 0 && bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6668                BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6669                l2cap_send_disconn_req(chan, ECONNRESET);
6670                return;
6671        }
6672
6673        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6674
6675        if (control->poll) {
6676                l2cap_pass_to_tx(chan, control);
6677
6678                set_bit(CONN_SEND_FBIT, &chan->conn_state);
6679                l2cap_retransmit(chan, control);
6680                l2cap_ertm_send(chan);
6681
6682                if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6683                        set_bit(CONN_SREJ_ACT, &chan->conn_state);
6684                        chan->srej_save_reqseq = control->reqseq;
6685                }
6686        } else {
6687                l2cap_pass_to_tx_fbit(chan, control);
6688
6689                if (control->final) {
6690                        if (chan->srej_save_reqseq != control->reqseq ||
6691                            !test_and_clear_bit(CONN_SREJ_ACT,
6692                                                &chan->conn_state))
6693                                l2cap_retransmit(chan, control);
6694                } else {
6695                        l2cap_retransmit(chan, control);
6696                        if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6697                                set_bit(CONN_SREJ_ACT, &chan->conn_state);
6698                                chan->srej_save_reqseq = control->reqseq;
6699                        }
6700                }
6701        }
6702}
6703
6704static void l2cap_handle_rej(struct l2cap_chan *chan,
6705                             struct l2cap_ctrl *control)
6706{
6707        struct sk_buff *skb;
6708
6709        BT_DBG("chan %p, control %p", chan, control);
6710
6711        if (control->reqseq == chan->next_tx_seq) {
6712                BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6713                l2cap_send_disconn_req(chan, ECONNRESET);
6714                return;
6715        }
6716
6717        skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6718
6719        if (chan->max_tx && skb &&
6720            bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6721                BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6722                l2cap_send_disconn_req(chan, ECONNRESET);
6723                return;
6724        }
6725
6726        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6727
6728        l2cap_pass_to_tx(chan, control);
6729
6730        if (control->final) {
6731                if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
6732                        l2cap_retransmit_all(chan, control);
6733        } else {
6734                l2cap_retransmit_all(chan, control);
6735                l2cap_ertm_send(chan);
6736                if (chan->tx_state == L2CAP_TX_STATE_WAIT_F)
6737                        set_bit(CONN_REJ_ACT, &chan->conn_state);
6738        }
6739}
6740
6741static u8 l2cap_classify_txseq(struct l2cap_chan *chan, u16 txseq)
6742{
6743        BT_DBG("chan %p, txseq %d", chan, txseq);
6744
6745        BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan->last_acked_seq,
6746               chan->expected_tx_seq);
6747
6748        if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
6749                if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6750                    chan->tx_win) {
6751                        /* See notes below regarding "double poll" and
6752                         * invalid packets.
6753                         */
6754                        if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6755                                BT_DBG("Invalid/Ignore - after SREJ");
6756                                return L2CAP_TXSEQ_INVALID_IGNORE;
6757                        } else {
6758                                BT_DBG("Invalid - in window after SREJ sent");
6759                                return L2CAP_TXSEQ_INVALID;
6760                        }
6761                }
6762
6763                if (chan->srej_list.head == txseq) {
6764                        BT_DBG("Expected SREJ");
6765                        return L2CAP_TXSEQ_EXPECTED_SREJ;
6766                }
6767
6768                if (l2cap_ertm_seq_in_queue(&chan->srej_q, txseq)) {
6769                        BT_DBG("Duplicate SREJ - txseq already stored");
6770                        return L2CAP_TXSEQ_DUPLICATE_SREJ;
6771                }
6772
6773                if (l2cap_seq_list_contains(&chan->srej_list, txseq)) {
6774                        BT_DBG("Unexpected SREJ - not requested");
6775                        return L2CAP_TXSEQ_UNEXPECTED_SREJ;
6776                }
6777        }
6778
6779        if (chan->expected_tx_seq == txseq) {
6780                if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6781                    chan->tx_win) {
6782                        BT_DBG("Invalid - txseq outside tx window");
6783                        return L2CAP_TXSEQ_INVALID;
6784                } else {
6785                        BT_DBG("Expected");
6786                        return L2CAP_TXSEQ_EXPECTED;
6787                }
6788        }
6789
6790        if (__seq_offset(chan, txseq, chan->last_acked_seq) <
6791            __seq_offset(chan, chan->expected_tx_seq, chan->last_acked_seq)) {
6792                BT_DBG("Duplicate - expected_tx_seq later than txseq");
6793                return L2CAP_TXSEQ_DUPLICATE;
6794        }
6795
6796        if (__seq_offset(chan, txseq, chan->last_acked_seq) >= chan->tx_win) {
6797                /* A source of invalid packets is a "double poll" condition,
6798                 * where delays cause us to send multiple poll packets.  If
6799                 * the remote stack receives and processes both polls,
6800                 * sequence numbers can wrap around in such a way that a
6801                 * resent frame has a sequence number that looks like new data
6802                 * with a sequence gap.  This would trigger an erroneous SREJ
6803                 * request.
6804                 *
6805                 * Fortunately, this is impossible with a tx window that's
6806                 * less than half of the maximum sequence number, which allows
6807                 * invalid frames to be safely ignored.
6808                 *
6809                 * With tx window sizes greater than half of the tx window
6810                 * maximum, the frame is invalid and cannot be ignored.  This
6811                 * causes a disconnect.
6812                 */
6813
6814                if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6815                        BT_DBG("Invalid/Ignore - txseq outside tx window");
6816                        return L2CAP_TXSEQ_INVALID_IGNORE;
6817                } else {
6818                        BT_DBG("Invalid - txseq outside tx window");
6819                        return L2CAP_TXSEQ_INVALID;
6820                }
6821        } else {
6822                BT_DBG("Unexpected - txseq indicates missing frames");
6823                return L2CAP_TXSEQ_UNEXPECTED;
6824        }
6825}
6826
6827static int l2cap_rx_state_recv(struct l2cap_chan *chan,
6828                               struct l2cap_ctrl *control,
6829                               struct sk_buff *skb, u8 event)
6830{
6831        int err = 0;
6832        bool skb_in_use = false;
6833
6834        BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6835               event);
6836
6837        switch (event) {
6838        case L2CAP_EV_RECV_IFRAME:
6839                switch (l2cap_classify_txseq(chan, control->txseq)) {
6840                case L2CAP_TXSEQ_EXPECTED:
6841                        l2cap_pass_to_tx(chan, control);
6842
6843                        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6844                                BT_DBG("Busy, discarding expected seq %d",
6845                                       control->txseq);
6846                                break;
6847                        }
6848
6849                        chan->expected_tx_seq = __next_seq(chan,
6850                                                           control->txseq);
6851
6852                        chan->buffer_seq = chan->expected_tx_seq;
6853                        skb_in_use = true;
6854
6855                        err = l2cap_reassemble_sdu(chan, skb, control);
6856                        if (err)
6857                                break;
6858
6859                        if (control->final) {
6860                                if (!test_and_clear_bit(CONN_REJ_ACT,
6861                                                        &chan->conn_state)) {
6862                                        control->final = 0;
6863                                        l2cap_retransmit_all(chan, control);
6864                                        l2cap_ertm_send(chan);
6865                                }
6866                        }
6867
6868                        if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
6869                                l2cap_send_ack(chan);
6870                        break;
6871                case L2CAP_TXSEQ_UNEXPECTED:
6872                        l2cap_pass_to_tx(chan, control);
6873
6874                        /* Can't issue SREJ frames in the local busy state.
6875                         * Drop this frame, it will be seen as missing
6876                         * when local busy is exited.
6877                         */
6878                        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6879                                BT_DBG("Busy, discarding unexpected seq %d",
6880                                       control->txseq);
6881                                break;
6882                        }
6883
6884                        /* There was a gap in the sequence, so an SREJ
6885                         * must be sent for each missing frame.  The
6886                         * current frame is stored for later use.
6887                         */
6888                        skb_queue_tail(&chan->srej_q, skb);
6889                        skb_in_use = true;
6890                        BT_DBG("Queued %p (queue len %d)", skb,
6891                               skb_queue_len(&chan->srej_q));
6892
6893                        clear_bit(CONN_SREJ_ACT, &chan->conn_state);
6894                        l2cap_seq_list_clear(&chan->srej_list);
6895                        l2cap_send_srej(chan, control->txseq);
6896
6897                        chan->rx_state = L2CAP_RX_STATE_SREJ_SENT;
6898                        break;
6899                case L2CAP_TXSEQ_DUPLICATE:
6900                        l2cap_pass_to_tx(chan, control);
6901                        break;
6902                case L2CAP_TXSEQ_INVALID_IGNORE:
6903                        break;
6904                case L2CAP_TXSEQ_INVALID:
6905                default:
6906                        l2cap_send_disconn_req(chan, ECONNRESET);
6907                        break;
6908                }
6909                break;
6910        case L2CAP_EV_RECV_RR:
6911                l2cap_pass_to_tx(chan, control);
6912                if (control->final) {
6913                        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6914
6915                        if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state) &&
6916                            !__chan_is_moving(chan)) {
6917                                control->final = 0;
6918                                l2cap_retransmit_all(chan, control);
6919                        }
6920
6921                        l2cap_ertm_send(chan);
6922                } else if (control->poll) {
6923                        l2cap_send_i_or_rr_or_rnr(chan);
6924                } else {
6925                        if (test_and_clear_bit(CONN_REMOTE_BUSY,
6926                                               &chan->conn_state) &&
6927                            chan->unacked_frames)
6928                                __set_retrans_timer(chan);
6929
6930                        l2cap_ertm_send(chan);
6931                }
6932                break;
6933        case L2CAP_EV_RECV_RNR:
6934                set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6935                l2cap_pass_to_tx(chan, control);
6936                if (control && control->poll) {
6937                        set_bit(CONN_SEND_FBIT, &chan->conn_state);
6938                        l2cap_send_rr_or_rnr(chan, 0);
6939                }
6940                __clear_retrans_timer(chan);
6941                l2cap_seq_list_clear(&chan->retrans_list);
6942                break;
6943        case L2CAP_EV_RECV_REJ:
6944                l2cap_handle_rej(chan, control);
6945                break;
6946        case L2CAP_EV_RECV_SREJ:
6947                l2cap_handle_srej(chan, control);
6948                break;
6949        default:
6950                break;
6951        }
6952
6953        if (skb && !skb_in_use) {
6954                BT_DBG("Freeing %p", skb);
6955                kfree_skb(skb);
6956        }
6957
6958        return err;
6959}
6960
6961static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan,
6962                                    struct l2cap_ctrl *control,
6963                                    struct sk_buff *skb, u8 event)
6964{
6965        int err = 0;
6966        u16 txseq = control->txseq;
6967        bool skb_in_use = false;
6968
6969        BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6970               event);
6971
6972        switch (event) {
6973        case L2CAP_EV_RECV_IFRAME:
6974                switch (l2cap_classify_txseq(chan, txseq)) {
6975                case L2CAP_TXSEQ_EXPECTED:
6976                        /* Keep frame for reassembly later */
6977                        l2cap_pass_to_tx(chan, control);
6978                        skb_queue_tail(&chan->srej_q, skb);
6979                        skb_in_use = true;
6980                        BT_DBG("Queued %p (queue len %d)", skb,
6981                               skb_queue_len(&chan->srej_q));
6982
6983                        chan->expected_tx_seq = __next_seq(chan, txseq);
6984                        break;
6985                case L2CAP_TXSEQ_EXPECTED_SREJ:
6986                        l2cap_seq_list_pop(&chan->srej_list);
6987
6988                        l2cap_pass_to_tx(chan, control);
6989                        skb_queue_tail(&chan->srej_q, skb);
6990                        skb_in_use = true;
6991                        BT_DBG("Queued %p (queue len %d)", skb,
6992                               skb_queue_len(&chan->srej_q));
6993
6994                        err = l2cap_rx_queued_iframes(chan);
6995                        if (err)
6996                                break;
6997
6998                        break;
6999                case L2CAP_TXSEQ_UNEXPECTED:
7000                        /* Got a frame that can't be reassembled yet.
7001                         * Save it for later, and send SREJs to cover
7002                         * the missing frames.
7003                         */
7004                        skb_queue_tail(&chan->srej_q, skb);
7005                        skb_in_use = true;
7006                        BT_DBG("Queued %p (queue len %d)", skb,
7007                               skb_queue_len(&chan->srej_q));
7008
7009                        l2cap_pass_to_tx(chan, control);
7010                        l2cap_send_srej(chan, control->txseq);
7011                        break;
7012                case L2CAP_TXSEQ_UNEXPECTED_SREJ:
7013                        /* This frame was requested with an SREJ, but
7014                         * some expected retransmitted frames are
7015                         * missing.  Request retransmission of missing
7016                         * SREJ'd frames.
7017                         */
7018                        skb_queue_tail(&chan->srej_q, skb);
7019                        skb_in_use = true;
7020                        BT_DBG("Queued %p (queue len %d)", skb,
7021                               skb_queue_len(&chan->srej_q));
7022
7023                        l2cap_pass_to_tx(chan, control);
7024                        l2cap_send_srej_list(chan, control->txseq);
7025                        break;
7026                case L2CAP_TXSEQ_DUPLICATE_SREJ:
7027                        /* We've already queued this frame.  Drop this copy. */
7028                        l2cap_pass_to_tx(chan, control);
7029                        break;
7030                case L2CAP_TXSEQ_DUPLICATE:
7031                        /* Expecting a later sequence number, so this frame
7032                         * was already received.  Ignore it completely.
7033                         */
7034                        break;
7035                case L2CAP_TXSEQ_INVALID_IGNORE:
7036                        break;
7037                case L2CAP_TXSEQ_INVALID:
7038                default:
7039                        l2cap_send_disconn_req(chan, ECONNRESET);
7040                        break;
7041                }
7042                break;
7043        case L2CAP_EV_RECV_RR:
7044                l2cap_pass_to_tx(chan, control);
7045                if (control->final) {
7046                        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7047
7048                        if (!test_and_clear_bit(CONN_REJ_ACT,
7049                                                &chan->conn_state)) {
7050                                control->final = 0;
7051                                l2cap_retransmit_all(chan, control);
7052                        }
7053
7054                        l2cap_ertm_send(chan);
7055                } else if (control->poll) {
7056                        if (test_and_clear_bit(CONN_REMOTE_BUSY,
7057                                               &chan->conn_state) &&
7058                            chan->unacked_frames) {
7059                                __set_retrans_timer(chan);
7060                        }
7061
7062                        set_bit(CONN_SEND_FBIT, &chan->conn_state);
7063                        l2cap_send_srej_tail(chan);
7064                } else {
7065                        if (test_and_clear_bit(CONN_REMOTE_BUSY,
7066                                               &chan->conn_state) &&
7067                            chan->unacked_frames)
7068                                __set_retrans_timer(chan);
7069
7070                        l2cap_send_ack(chan);
7071                }
7072                break;
7073        case L2CAP_EV_RECV_RNR:
7074                set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7075                l2cap_pass_to_tx(chan, control);
7076                if (control->poll) {
7077                        l2cap_send_srej_tail(chan);
7078                } else {
7079                        struct l2cap_ctrl rr_control;
7080                        memset(&rr_control, 0, sizeof(rr_control));
7081                        rr_control.sframe = 1;
7082                        rr_control.super = L2CAP_SUPER_RR;
7083                        rr_control.reqseq = chan->buffer_seq;
7084                        l2cap_send_sframe(chan, &rr_control);
7085                }
7086
7087                break;
7088        case L2CAP_EV_RECV_REJ:
7089                l2cap_handle_rej(chan, control);
7090                break;
7091        case L2CAP_EV_RECV_SREJ:
7092                l2cap_handle_srej(chan, control);
7093                break;
7094        }
7095
7096        if (skb && !skb_in_use) {
7097                BT_DBG("Freeing %p", skb);
7098                kfree_skb(skb);
7099        }
7100
7101        return err;
7102}
7103
7104static int l2cap_finish_move(struct l2cap_chan *chan)
7105{
7106        BT_DBG("chan %p", chan);
7107
7108        chan->rx_state = L2CAP_RX_STATE_RECV;
7109
7110        if (chan->hs_hcon)
7111                chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
7112        else
7113                chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
7114
7115        return l2cap_resegment(chan);
7116}
7117
7118static int l2cap_rx_state_wait_p(struct l2cap_chan *chan,
7119                                 struct l2cap_ctrl *control,
7120                                 struct sk_buff *skb, u8 event)
7121{
7122        int err;
7123
7124        BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
7125               event);
7126
7127        if (!control->poll)
7128                return -EPROTO;
7129
7130        l2cap_process_reqseq(chan, control->reqseq);
7131
7132        if (!skb_queue_empty(&chan->tx_q))
7133                chan->tx_send_head = skb_peek(&chan->tx_q);
7134        else
7135                chan->tx_send_head = NULL;
7136
7137        /* Rewind next_tx_seq to the point expected
7138         * by the receiver.
7139         */
7140        chan->next_tx_seq = control->reqseq;
7141        chan->unacked_frames = 0;
7142
7143        err = l2cap_finish_move(chan);
7144        if (err)
7145                return err;
7146
7147        set_bit(CONN_SEND_FBIT, &chan->conn_state);
7148        l2cap_send_i_or_rr_or_rnr(chan);
7149
7150        if (event == L2CAP_EV_RECV_IFRAME)
7151                return -EPROTO;
7152
7153        return l2cap_rx_state_recv(chan, control, NULL, event);
7154}
7155
7156static int l2cap_rx_state_wait_f(struct l2cap_chan *chan,
7157                                 struct l2cap_ctrl *control,
7158                                 struct sk_buff *skb, u8 event)
7159{
7160        int err;
7161
7162        if (!control->final)
7163                return -EPROTO;
7164
7165        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7166
7167        chan->rx_state = L2CAP_RX_STATE_RECV;
7168        l2cap_process_reqseq(chan, control->reqseq);
7169
7170        if (!skb_queue_empty(&chan->tx_q))
7171                chan->tx_send_head = skb_peek(&chan->tx_q);
7172        else
7173                chan->tx_send_head = NULL;
7174
7175        /* Rewind next_tx_seq to the point expected
7176         * by the receiver.
7177         */
7178        chan->next_tx_seq = control->reqseq;
7179        chan->unacked_frames = 0;
7180
7181        if (chan->hs_hcon)
7182                chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
7183        else
7184                chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
7185
7186        err = l2cap_resegment(chan);
7187
7188        if (!err)
7189                err = l2cap_rx_state_recv(chan, control, skb, event);
7190
7191        return err;
7192}
7193
7194static bool __valid_reqseq(struct l2cap_chan *chan, u16 reqseq)
7195{
7196        /* Make sure reqseq is for a packet that has been sent but not acked */
7197        u16 unacked;
7198
7199        unacked = __seq_offset(chan, chan->next_tx_seq, chan->expected_ack_seq);
7200        return __seq_offset(chan, chan->next_tx_seq, reqseq) <= unacked;
7201}
7202
7203static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
7204                    struct sk_buff *skb, u8 event)
7205{
7206        int err = 0;
7207
7208        BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan,
7209               control, skb, event, chan->rx_state);
7210
7211        if (__valid_reqseq(chan, control->reqseq)) {
7212                switch (chan->rx_state) {
7213                case L2CAP_RX_STATE_RECV:
7214                        err = l2cap_rx_state_recv(chan, control, skb, event);
7215                        break;
7216                case L2CAP_RX_STATE_SREJ_SENT:
7217                        err = l2cap_rx_state_srej_sent(chan, control, skb,
7218                                                       event);
7219                        break;
7220                case L2CAP_RX_STATE_WAIT_P:
7221                        err = l2cap_rx_state_wait_p(chan, control, skb, event);
7222                        break;
7223                case L2CAP_RX_STATE_WAIT_F:
7224                        err = l2cap_rx_state_wait_f(chan, control, skb, event);
7225                        break;
7226                default:
7227                        /* shut it down */
7228                        break;
7229                }
7230        } else {
7231                BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
7232                       control->reqseq, chan->next_tx_seq,
7233                       chan->expected_ack_seq);
7234                l2cap_send_disconn_req(chan, ECONNRESET);
7235        }
7236
7237        return err;
7238}
7239
7240static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
7241                           struct sk_buff *skb)
7242{
7243        BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb,
7244               chan->rx_state);
7245
7246        if (l2cap_classify_txseq(chan, control->txseq) ==
7247            L2CAP_TXSEQ_EXPECTED) {
7248                l2cap_pass_to_tx(chan, control);
7249
7250                BT_DBG("buffer_seq %d->%d", chan->buffer_seq,
7251                       __next_seq(chan, chan->buffer_seq));
7252
7253                chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
7254
7255                l2cap_reassemble_sdu(chan, skb, control);
7256        } else {
7257                if (chan->sdu) {
7258                        kfree_skb(chan->sdu);
7259                        chan->sdu = NULL;
7260                }
7261                chan->sdu_last_frag = NULL;
7262                chan->sdu_len = 0;
7263
7264                if (skb) {
7265                        BT_DBG("Freeing %p", skb);
7266                        kfree_skb(skb);
7267                }
7268        }
7269
7270        chan->last_acked_seq = control->txseq;
7271        chan->expected_tx_seq = __next_seq(chan, control->txseq);
7272
7273        return 0;
7274}
7275
7276static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
7277{
7278        struct l2cap_ctrl *control = &bt_cb(skb)->l2cap;
7279        u16 len;
7280        u8 event;
7281
7282        __unpack_control(chan, skb);
7283
7284        len = skb->len;
7285
7286        /*
7287         * We can just drop the corrupted I-frame here.
7288         * Receiver will miss it and start proper recovery
7289         * procedures and ask for retransmission.
7290         */
7291        if (l2cap_check_fcs(chan, skb))
7292                goto drop;
7293
7294        if (!control->sframe && control->sar == L2CAP_SAR_START)
7295                len -= L2CAP_SDULEN_SIZE;
7296
7297        if (chan->fcs == L2CAP_FCS_CRC16)
7298                len -= L2CAP_FCS_SIZE;
7299
7300        if (len > chan->mps) {
7301                l2cap_send_disconn_req(chan, ECONNRESET);
7302                goto drop;
7303        }
7304
7305        if ((chan->mode == L2CAP_MODE_ERTM ||
7306             chan->mode == L2CAP_MODE_STREAMING) && sk_filter(chan->data, skb))
7307                goto drop;
7308
7309        if (!control->sframe) {
7310                int err;
7311
7312                BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
7313                       control->sar, control->reqseq, control->final,
7314                       control->txseq);
7315
7316                /* Validate F-bit - F=0 always valid, F=1 only
7317                 * valid in TX WAIT_F
7318                 */
7319                if (control->final && chan->tx_state != L2CAP_TX_STATE_WAIT_F)
7320                        goto drop;
7321
7322                if (chan->mode != L2CAP_MODE_STREAMING) {
7323                        event = L2CAP_EV_RECV_IFRAME;
7324                        err = l2cap_rx(chan, control, skb, event);
7325                } else {
7326                        err = l2cap_stream_rx(chan, control, skb);
7327                }
7328
7329                if (err)
7330                        l2cap_send_disconn_req(chan, ECONNRESET);
7331        } else {
7332                const u8 rx_func_to_event[4] = {
7333                        L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ,
7334                        L2CAP_EV_RECV_RNR, L2CAP_EV_RECV_SREJ
7335                };
7336
7337                /* Only I-frames are expected in streaming mode */
7338                if (chan->mode == L2CAP_MODE_STREAMING)
7339                        goto drop;
7340
7341                BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
7342                       control->reqseq, control->final, control->poll,
7343                       control->super);
7344
7345                if (len != 0) {
7346                        BT_ERR("Trailing bytes: %d in sframe", len);
7347                        l2cap_send_disconn_req(chan, ECONNRESET);
7348                        goto drop;
7349                }
7350
7351                /* Validate F and P bits */
7352                if (control->final && (control->poll ||
7353                                       chan->tx_state != L2CAP_TX_STATE_WAIT_F))
7354                        goto drop;
7355
7356                event = rx_func_to_event[control->super];
7357                if (l2cap_rx(chan, control, skb, event))
7358                        l2cap_send_disconn_req(chan, ECONNRESET);
7359        }
7360
7361        return 0;
7362
7363drop:
7364        kfree_skb(skb);
7365        return 0;
7366}
7367
7368static void l2cap_chan_le_send_credits(struct l2cap_chan *chan)
7369{
7370        struct l2cap_conn *conn = chan->conn;
7371        struct l2cap_le_credits pkt;
7372        u16 return_credits;
7373
7374        return_credits = (chan->imtu / chan->mps) + 1;
7375
7376        if (chan->rx_credits >= return_credits)
7377                return;
7378
7379        return_credits -= chan->rx_credits;
7380
7381        BT_DBG("chan %p returning %u credits to sender", chan, return_credits);
7382
7383        chan->rx_credits += return_credits;
7384
7385        pkt.cid     = cpu_to_le16(chan->scid);
7386        pkt.credits = cpu_to_le16(return_credits);
7387
7388        chan->ident = l2cap_get_ident(conn);
7389
7390        l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CREDITS, sizeof(pkt), &pkt);
7391}
7392
7393static int l2cap_ecred_recv(struct l2cap_chan *chan, struct sk_buff *skb)
7394{
7395        int err;
7396
7397        BT_DBG("SDU reassemble complete: chan %p skb->len %u", chan, skb->len);
7398
7399        /* Wait recv to confirm reception before updating the credits */
7400        err = chan->ops->recv(chan, skb);
7401
7402        /* Update credits whenever an SDU is received */
7403        l2cap_chan_le_send_credits(chan);
7404
7405        return err;
7406}
7407
7408static int l2cap_ecred_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
7409{
7410        int err;
7411
7412        if (!chan->rx_credits) {
7413                BT_ERR("No credits to receive LE L2CAP data");
7414                l2cap_send_disconn_req(chan, ECONNRESET);
7415                return -ENOBUFS;
7416        }
7417
7418        if (chan->imtu < skb->len) {
7419                BT_ERR("Too big LE L2CAP PDU");
7420                return -ENOBUFS;
7421        }
7422
7423        chan->rx_credits--;
7424        BT_DBG("rx_credits %u -> %u", chan->rx_credits + 1, chan->rx_credits);
7425
7426        /* Update if remote had run out of credits, this should only happens
7427         * if the remote is not using the entire MPS.
7428         */
7429        if (!chan->rx_credits)
7430                l2cap_chan_le_send_credits(chan);
7431
7432        err = 0;
7433
7434        if (!chan->sdu) {
7435                u16 sdu_len;
7436
7437                sdu_len = get_unaligned_le16(skb->data);
7438                skb_pull(skb, L2CAP_SDULEN_SIZE);
7439
7440                BT_DBG("Start of new SDU. sdu_len %u skb->len %u imtu %u",
7441                       sdu_len, skb->len, chan->imtu);
7442
7443                if (sdu_len > chan->imtu) {
7444                        BT_ERR("Too big LE L2CAP SDU length received");
7445                        err = -EMSGSIZE;
7446                        goto failed;
7447                }
7448
7449                if (skb->len > sdu_len) {
7450                        BT_ERR("Too much LE L2CAP data received");
7451                        err = -EINVAL;
7452                        goto failed;
7453                }
7454
7455                if (skb->len == sdu_len)
7456                        return l2cap_ecred_recv(chan, skb);
7457
7458                chan->sdu = skb;
7459                chan->sdu_len = sdu_len;
7460                chan->sdu_last_frag = skb;
7461
7462                /* Detect if remote is not able to use the selected MPS */
7463                if (skb->len + L2CAP_SDULEN_SIZE < chan->mps) {
7464                        u16 mps_len = skb->len + L2CAP_SDULEN_SIZE;
7465
7466                        /* Adjust the number of credits */
7467                        BT_DBG("chan->mps %u -> %u", chan->mps, mps_len);
7468                        chan->mps = mps_len;
7469                        l2cap_chan_le_send_credits(chan);
7470                }
7471
7472                return 0;
7473        }
7474
7475        BT_DBG("SDU fragment. chan->sdu->len %u skb->len %u chan->sdu_len %u",
7476               chan->sdu->len, skb->len, chan->sdu_len);
7477
7478        if (chan->sdu->len + skb->len > chan->sdu_len) {
7479                BT_ERR("Too much LE L2CAP data received");
7480                err = -EINVAL;
7481                goto failed;
7482        }
7483
7484        append_skb_frag(chan->sdu, skb, &chan->sdu_last_frag);
7485        skb = NULL;
7486
7487        if (chan->sdu->len == chan->sdu_len) {
7488                err = l2cap_ecred_recv(chan, chan->sdu);
7489                if (!err) {
7490                        chan->sdu = NULL;
7491                        chan->sdu_last_frag = NULL;
7492                        chan->sdu_len = 0;
7493                }
7494        }
7495
7496failed:
7497        if (err) {
7498                kfree_skb(skb);
7499                kfree_skb(chan->sdu);
7500                chan->sdu = NULL;
7501                chan->sdu_last_frag = NULL;
7502                chan->sdu_len = 0;
7503        }
7504
7505        /* We can't return an error here since we took care of the skb
7506         * freeing internally. An error return would cause the caller to
7507         * do a double-free of the skb.
7508         */
7509        return 0;
7510}
7511
7512static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
7513                               struct sk_buff *skb)
7514{
7515        struct l2cap_chan *chan;
7516
7517        chan = l2cap_get_chan_by_scid(conn, cid);
7518        if (!chan) {
7519                if (cid == L2CAP_CID_A2MP) {
7520                        chan = a2mp_channel_create(conn, skb);
7521                        if (!chan) {
7522                                kfree_skb(skb);
7523                                return;
7524                        }
7525
7526                        l2cap_chan_lock(chan);
7527                } else {
7528                        BT_DBG("unknown cid 0x%4.4x", cid);
7529                        /* Drop packet and return */
7530                        kfree_skb(skb);
7531                        return;
7532                }
7533        }
7534
7535        BT_DBG("chan %p, len %d", chan, skb->len);
7536
7537        /* If we receive data on a fixed channel before the info req/rsp
7538         * procdure is done simply assume that the channel is supported
7539         * and mark it as ready.
7540         */
7541        if (chan->chan_type == L2CAP_CHAN_FIXED)
7542                l2cap_chan_ready(chan);
7543
7544        if (chan->state != BT_CONNECTED)
7545                goto drop;
7546
7547        switch (chan->mode) {
7548        case L2CAP_MODE_LE_FLOWCTL:
7549        case L2CAP_MODE_EXT_FLOWCTL:
7550                if (l2cap_ecred_data_rcv(chan, skb) < 0)
7551                        goto drop;
7552
7553                goto done;
7554
7555        case L2CAP_MODE_BASIC:
7556                /* If socket recv buffers overflows we drop data here
7557                 * which is *bad* because L2CAP has to be reliable.
7558                 * But we don't have any other choice. L2CAP doesn't
7559                 * provide flow control mechanism. */
7560
7561                if (chan->imtu < skb->len) {
7562                        BT_ERR("Dropping L2CAP data: receive buffer overflow");
7563                        goto drop;
7564                }
7565
7566                if (!chan->ops->recv(chan, skb))
7567                        goto done;
7568                break;
7569
7570        case L2CAP_MODE_ERTM:
7571        case L2CAP_MODE_STREAMING:
7572                l2cap_data_rcv(chan, skb);
7573                goto done;
7574
7575        default:
7576                BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
7577                break;
7578        }
7579
7580drop:
7581        kfree_skb(skb);
7582
7583done:
7584        l2cap_chan_unlock(chan);
7585}
7586
7587static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
7588                                  struct sk_buff *skb)
7589{
7590        struct hci_conn *hcon = conn->hcon;
7591        struct l2cap_chan *chan;
7592
7593        if (hcon->type != ACL_LINK)
7594                goto free_skb;
7595
7596        chan = l2cap_global_chan_by_psm(0, psm, &hcon->src, &hcon->dst,
7597                                        ACL_LINK);
7598        if (!chan)
7599                goto free_skb;
7600
7601        BT_DBG("chan %p, len %d", chan, skb->len);
7602
7603        if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
7604                goto drop;
7605
7606        if (chan->imtu < skb->len)
7607                goto drop;
7608
7609        /* Store remote BD_ADDR and PSM for msg_name */
7610        bacpy(&bt_cb(skb)->l2cap.bdaddr, &hcon->dst);
7611        bt_cb(skb)->l2cap.psm = psm;
7612
7613        if (!chan->ops->recv(chan, skb)) {
7614                l2cap_chan_put(chan);
7615                return;
7616        }
7617
7618drop:
7619        l2cap_chan_put(chan);
7620free_skb:
7621        kfree_skb(skb);
7622}
7623
7624static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
7625{
7626        struct l2cap_hdr *lh = (void *) skb->data;
7627        struct hci_conn *hcon = conn->hcon;
7628        u16 cid, len;
7629        __le16 psm;
7630
7631        if (hcon->state != BT_CONNECTED) {
7632                BT_DBG("queueing pending rx skb");
7633                skb_queue_tail(&conn->pending_rx, skb);
7634                return;
7635        }
7636
7637        skb_pull(skb, L2CAP_HDR_SIZE);
7638        cid = __le16_to_cpu(lh->cid);
7639        len = __le16_to_cpu(lh->len);
7640
7641        if (len != skb->len) {
7642                kfree_skb(skb);
7643                return;
7644        }
7645
7646        /* Since we can't actively block incoming LE connections we must
7647         * at least ensure that we ignore incoming data from them.
7648         */
7649        if (hcon->type == LE_LINK &&
7650            hci_bdaddr_list_lookup(&hcon->hdev->blacklist, &hcon->dst,
7651                                   bdaddr_dst_type(hcon))) {
7652                kfree_skb(skb);
7653                return;
7654        }
7655
7656        BT_DBG("len %d, cid 0x%4.4x", len, cid);
7657
7658        switch (cid) {
7659        case L2CAP_CID_SIGNALING:
7660                l2cap_sig_channel(conn, skb);
7661                break;
7662
7663        case L2CAP_CID_CONN_LESS:
7664                psm = get_unaligned((__le16 *) skb->data);
7665                skb_pull(skb, L2CAP_PSMLEN_SIZE);
7666                l2cap_conless_channel(conn, psm, skb);
7667                break;
7668
7669        case L2CAP_CID_LE_SIGNALING:
7670                l2cap_le_sig_channel(conn, skb);
7671                break;
7672
7673        default:
7674                l2cap_data_channel(conn, cid, skb);
7675                break;
7676        }
7677}
7678
7679static void process_pending_rx(struct work_struct *work)
7680{
7681        struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
7682                                               pending_rx_work);
7683        struct sk_buff *skb;
7684
7685        BT_DBG("");
7686
7687        while ((skb = skb_dequeue(&conn->pending_rx)))
7688                l2cap_recv_frame(conn, skb);
7689}
7690
7691static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
7692{
7693        struct l2cap_conn *conn = hcon->l2cap_data;
7694        struct hci_chan *hchan;
7695
7696        if (conn)
7697                return conn;
7698
7699        hchan = hci_chan_create(hcon);
7700        if (!hchan)
7701                return NULL;
7702
7703        conn = kzalloc(sizeof(*conn), GFP_KERNEL);
7704        if (!conn) {
7705                hci_chan_del(hchan);
7706                return NULL;
7707        }
7708
7709        kref_init(&conn->ref);
7710        hcon->l2cap_data = conn;
7711        conn->hcon = hci_conn_get(hcon);
7712        conn->hchan = hchan;
7713
7714        BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
7715
7716        switch (hcon->type) {
7717        case LE_LINK:
7718                if (hcon->hdev->le_mtu) {
7719                        conn->mtu = hcon->hdev->le_mtu;
7720                        break;
7721                }
7722                /* fall through */
7723        default:
7724                conn->mtu = hcon->hdev->acl_mtu;
7725                break;
7726        }
7727
7728        conn->feat_mask = 0;
7729
7730        conn->local_fixed_chan = L2CAP_FC_SIG_BREDR | L2CAP_FC_CONNLESS;
7731
7732        if (hcon->type == ACL_LINK &&
7733            hci_dev_test_flag(hcon->hdev, HCI_HS_ENABLED))
7734                conn->local_fixed_chan |= L2CAP_FC_A2MP;
7735
7736        if (hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED) &&
7737            (bredr_sc_enabled(hcon->hdev) ||
7738             hci_dev_test_flag(hcon->hdev, HCI_FORCE_BREDR_SMP)))
7739                conn->local_fixed_chan |= L2CAP_FC_SMP_BREDR;
7740
7741        mutex_init(&conn->ident_lock);
7742        mutex_init(&conn->chan_lock);
7743
7744        INIT_LIST_HEAD(&conn->chan_l);
7745        INIT_LIST_HEAD(&conn->users);
7746
7747        INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
7748
7749        skb_queue_head_init(&conn->pending_rx);
7750        INIT_WORK(&conn->pending_rx_work, process_pending_rx);
7751        INIT_WORK(&conn->id_addr_update_work, l2cap_conn_update_id_addr);
7752
7753        conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
7754
7755        return conn;
7756}
7757
7758static bool is_valid_psm(u16 psm, u8 dst_type) {
7759        if (!psm)
7760                return false;
7761
7762        if (bdaddr_type_is_le(dst_type))
7763                return (psm <= 0x00ff);
7764
7765        /* PSM must be odd and lsb of upper byte must be 0 */
7766        return ((psm & 0x0101) == 0x0001);
7767}
7768
7769struct l2cap_chan_data {
7770        struct l2cap_chan *chan;
7771        struct pid *pid;
7772        int count;
7773};
7774
7775static void l2cap_chan_by_pid(struct l2cap_chan *chan, void *data)
7776{
7777        struct l2cap_chan_data *d = data;
7778        struct pid *pid;
7779
7780        if (chan == d->chan)
7781                return;
7782
7783        if (!test_bit(FLAG_DEFER_SETUP, &chan->flags))
7784                return;
7785
7786        pid = chan->ops->get_peer_pid(chan);
7787
7788        /* Only count deferred channels with the same PID/PSM */
7789        if (d->pid != pid || chan->psm != d->chan->psm || chan->ident ||
7790            chan->mode != L2CAP_MODE_EXT_FLOWCTL || chan->state != BT_CONNECT)
7791                return;
7792
7793        d->count++;
7794}
7795
7796int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
7797                       bdaddr_t *dst, u8 dst_type)
7798{
7799        struct l2cap_conn *conn;
7800        struct hci_conn *hcon;
7801        struct hci_dev *hdev;
7802        int err;
7803
7804        BT_DBG("%pMR -> %pMR (type %u) psm 0x%4.4x mode 0x%2.2x", &chan->src,
7805               dst, dst_type, __le16_to_cpu(psm), chan->mode);
7806
7807        hdev = hci_get_route(dst, &chan->src, chan->src_type);
7808        if (!hdev)
7809                return -EHOSTUNREACH;
7810
7811        hci_dev_lock(hdev);
7812
7813        if (!is_valid_psm(__le16_to_cpu(psm), dst_type) && !cid &&
7814            chan->chan_type != L2CAP_CHAN_RAW) {
7815                err = -EINVAL;
7816                goto done;
7817        }
7818
7819        if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !psm) {
7820                err = -EINVAL;
7821                goto done;
7822        }
7823
7824        if (chan->chan_type == L2CAP_CHAN_FIXED && !cid) {
7825                err = -EINVAL;
7826                goto done;
7827        }
7828
7829        switch (chan->mode) {
7830        case L2CAP_MODE_BASIC:
7831                break;
7832        case L2CAP_MODE_LE_FLOWCTL:
7833                break;
7834        case L2CAP_MODE_EXT_FLOWCTL:
7835                if (!enable_ecred) {
7836                        err = -EOPNOTSUPP;
7837                        goto done;
7838                }
7839                break;
7840        case L2CAP_MODE_ERTM:
7841        case L2CAP_MODE_STREAMING:
7842                if (!disable_ertm)
7843                        break;
7844                /* fall through */
7845        default:
7846                err = -EOPNOTSUPP;
7847                goto done;
7848        }
7849
7850        switch (chan->state) {
7851        case BT_CONNECT:
7852        case BT_CONNECT2:
7853        case BT_CONFIG:
7854                /* Already connecting */
7855                err = 0;
7856                goto done;
7857
7858        case BT_CONNECTED:
7859                /* Already connected */
7860                err = -EISCONN;
7861                goto done;
7862
7863        case BT_OPEN:
7864        case BT_BOUND:
7865                /* Can connect */
7866                break;
7867
7868        default:
7869                err = -EBADFD;
7870                goto done;
7871        }
7872
7873        /* Set destination address and psm */
7874        bacpy(&chan->dst, dst);
7875        chan->dst_type = dst_type;
7876
7877        chan->psm = psm;
7878        chan->dcid = cid;
7879
7880        if (bdaddr_type_is_le(dst_type)) {
7881                /* Convert from L2CAP channel address type to HCI address type
7882                 */
7883                if (dst_type == BDADDR_LE_PUBLIC)
7884                        dst_type = ADDR_LE_DEV_PUBLIC;
7885                else
7886                        dst_type = ADDR_LE_DEV_RANDOM;
7887
7888                if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
7889                        hcon = hci_connect_le(hdev, dst, dst_type,
7890                                              chan->sec_level,
7891                                              HCI_LE_CONN_TIMEOUT,
7892                                              HCI_ROLE_SLAVE, NULL);
7893                else
7894                        hcon = hci_connect_le_scan(hdev, dst, dst_type,
7895                                                   chan->sec_level,
7896                                                   HCI_LE_CONN_TIMEOUT);
7897
7898        } else {
7899                u8 auth_type = l2cap_get_auth_type(chan);
7900                hcon = hci_connect_acl(hdev, dst, chan->sec_level, auth_type);
7901        }
7902
7903        if (IS_ERR(hcon)) {
7904                err = PTR_ERR(hcon);
7905                goto done;
7906        }
7907
7908        conn = l2cap_conn_add(hcon);
7909        if (!conn) {
7910                hci_conn_drop(hcon);
7911                err = -ENOMEM;
7912                goto done;
7913        }
7914
7915        if (chan->mode == L2CAP_MODE_EXT_FLOWCTL) {
7916                struct l2cap_chan_data data;
7917
7918                data.chan = chan;
7919                data.pid = chan->ops->get_peer_pid(chan);
7920                data.count = 1;
7921
7922                l2cap_chan_list(conn, l2cap_chan_by_pid, &data);
7923
7924                /* Check if there isn't too many channels being connected */
7925                if (data.count > L2CAP_ECRED_CONN_SCID_MAX) {
7926                        hci_conn_drop(hcon);
7927                        err = -EPROTO;
7928                        goto done;
7929                }
7930        }
7931
7932        mutex_lock(&conn->chan_lock);
7933        l2cap_chan_lock(chan);
7934
7935        if (cid && __l2cap_get_chan_by_dcid(conn, cid)) {
7936                hci_conn_drop(hcon);
7937                err = -EBUSY;
7938                goto chan_unlock;
7939        }
7940
7941        /* Update source addr of the socket */
7942        bacpy(&chan->src, &hcon->src);
7943        chan->src_type = bdaddr_src_type(hcon);
7944
7945        __l2cap_chan_add(conn, chan);
7946
7947        /* l2cap_chan_add takes its own ref so we can drop this one */
7948        hci_conn_drop(hcon);
7949
7950        l2cap_state_change(chan, BT_CONNECT);
7951        __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
7952
7953        /* Release chan->sport so that it can be reused by other
7954         * sockets (as it's only used for listening sockets).
7955         */
7956        write_lock(&chan_list_lock);
7957        chan->sport = 0;
7958        write_unlock(&chan_list_lock);
7959
7960        if (hcon->state == BT_CONNECTED) {
7961                if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
7962                        __clear_chan_timer(chan);
7963                        if (l2cap_chan_check_security(chan, true))
7964                                l2cap_state_change(chan, BT_CONNECTED);
7965                } else
7966                        l2cap_do_start(chan);
7967        }
7968
7969        err = 0;
7970
7971chan_unlock:
7972        l2cap_chan_unlock(chan);
7973        mutex_unlock(&conn->chan_lock);
7974done:
7975        hci_dev_unlock(hdev);
7976        hci_dev_put(hdev);
7977        return err;
7978}
7979EXPORT_SYMBOL_GPL(l2cap_chan_connect);
7980
7981static void l2cap_ecred_reconfigure(struct l2cap_chan *chan)
7982{
7983        struct l2cap_conn *conn = chan->conn;
7984        struct {
7985                struct l2cap_ecred_reconf_req req;
7986                __le16 scid;
7987        } pdu;
7988
7989        pdu.req.mtu = cpu_to_le16(chan->imtu);
7990        pdu.req.mps = cpu_to_le16(chan->mps);
7991        pdu.scid    = cpu_to_le16(chan->scid);
7992
7993        chan->ident = l2cap_get_ident(conn);
7994
7995        l2cap_send_cmd(conn, chan->ident, L2CAP_ECRED_RECONF_REQ,
7996                       sizeof(pdu), &pdu);
7997}
7998
7999int l2cap_chan_reconfigure(struct l2cap_chan *chan, __u16 mtu)
8000{
8001        if (chan->imtu > mtu)
8002                return -EINVAL;
8003
8004        BT_DBG("chan %p mtu 0x%4.4x", chan, mtu);
8005
8006        chan->imtu = mtu;
8007
8008        l2cap_ecred_reconfigure(chan);
8009
8010        return 0;
8011}
8012
8013/* ---- L2CAP interface with lower layer (HCI) ---- */
8014
8015int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
8016{
8017        int exact = 0, lm1 = 0, lm2 = 0;
8018        struct l2cap_chan *c;
8019
8020        BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
8021
8022        /* Find listening sockets and check their link_mode */
8023        read_lock(&chan_list_lock);
8024        list_for_each_entry(c, &chan_list, global_l) {
8025                if (c->state != BT_LISTEN)
8026                        continue;
8027
8028                if (!bacmp(&c->src, &hdev->bdaddr)) {
8029                        lm1 |= HCI_LM_ACCEPT;
8030                        if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
8031                                lm1 |= HCI_LM_MASTER;
8032                        exact++;
8033                } else if (!bacmp(&c->src, BDADDR_ANY)) {
8034                        lm2 |= HCI_LM_ACCEPT;
8035                        if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
8036                                lm2 |= HCI_LM_MASTER;
8037                }
8038        }
8039        read_unlock(&chan_list_lock);
8040
8041        return exact ? lm1 : lm2;
8042}
8043
8044/* Find the next fixed channel in BT_LISTEN state, continue iteration
8045 * from an existing channel in the list or from the beginning of the
8046 * global list (by passing NULL as first parameter).
8047 */
8048static struct l2cap_chan *l2cap_global_fixed_chan(struct l2cap_chan *c,
8049                                                  struct hci_conn *hcon)
8050{
8051        u8 src_type = bdaddr_src_type(hcon);
8052
8053        read_lock(&chan_list_lock);
8054
8055        if (c)
8056                c = list_next_entry(c, global_l);
8057        else
8058                c = list_entry(chan_list.next, typeof(*c), global_l);
8059
8060        list_for_each_entry_from(c, &chan_list, global_l) {
8061                if (c->chan_type != L2CAP_CHAN_FIXED)
8062                        continue;
8063                if (c->state != BT_LISTEN)
8064                        continue;
8065                if (bacmp(&c->src, &hcon->src) && bacmp(&c->src, BDADDR_ANY))
8066                        continue;
8067                if (src_type != c->src_type)
8068                        continue;
8069
8070                l2cap_chan_hold(c);
8071                read_unlock(&chan_list_lock);
8072                return c;
8073        }
8074
8075        read_unlock(&chan_list_lock);
8076
8077        return NULL;
8078}
8079
8080static void l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
8081{
8082        struct hci_dev *hdev = hcon->hdev;
8083        struct l2cap_conn *conn;
8084        struct l2cap_chan *pchan;
8085        u8 dst_type;
8086
8087        if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
8088                return;
8089
8090        BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
8091
8092        if (status) {
8093                l2cap_conn_del(hcon, bt_to_errno(status));
8094                return;
8095        }
8096
8097        conn = l2cap_conn_add(hcon);
8098        if (!conn)
8099                return;
8100
8101        dst_type = bdaddr_dst_type(hcon);
8102
8103        /* If device is blocked, do not create channels for it */
8104        if (hci_bdaddr_list_lookup(&hdev->blacklist, &hcon->dst, dst_type))
8105                return;
8106
8107        /* Find fixed channels and notify them of the new connection. We
8108         * use multiple individual lookups, continuing each time where
8109         * we left off, because the list lock would prevent calling the
8110         * potentially sleeping l2cap_chan_lock() function.
8111         */
8112        pchan = l2cap_global_fixed_chan(NULL, hcon);
8113        while (pchan) {
8114                struct l2cap_chan *chan, *next;
8115
8116                /* Client fixed channels should override server ones */
8117                if (__l2cap_get_chan_by_dcid(conn, pchan->scid))
8118                        goto next;
8119
8120                l2cap_chan_lock(pchan);
8121                chan = pchan->ops->new_connection(pchan);
8122                if (chan) {
8123                        bacpy(&chan->src, &hcon->src);
8124                        bacpy(&chan->dst, &hcon->dst);
8125                        chan->src_type = bdaddr_src_type(hcon);
8126                        chan->dst_type = dst_type;
8127
8128                        __l2cap_chan_add(conn, chan);
8129                }
8130
8131                l2cap_chan_unlock(pchan);
8132next:
8133                next = l2cap_global_fixed_chan(pchan, hcon);
8134                l2cap_chan_put(pchan);
8135                pchan = next;
8136        }
8137
8138        l2cap_conn_ready(conn);
8139}
8140
8141int l2cap_disconn_ind(struct hci_conn *hcon)
8142{
8143        struct l2cap_conn *conn = hcon->l2cap_data;
8144
8145        BT_DBG("hcon %p", hcon);
8146
8147        if (!conn)
8148                return HCI_ERROR_REMOTE_USER_TERM;
8149        return conn->disc_reason;
8150}
8151
8152static void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
8153{
8154        if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
8155                return;
8156
8157        BT_DBG("hcon %p reason %d", hcon, reason);
8158
8159        l2cap_conn_del(hcon, bt_to_errno(reason));
8160}
8161
8162static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
8163{
8164        if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
8165                return;
8166
8167        if (encrypt == 0x00) {
8168                if (chan->sec_level == BT_SECURITY_MEDIUM) {
8169                        __set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
8170                } else if (chan->sec_level == BT_SECURITY_HIGH ||
8171                           chan->sec_level == BT_SECURITY_FIPS)
8172                        l2cap_chan_close(chan, ECONNREFUSED);
8173        } else {
8174                if (chan->sec_level == BT_SECURITY_MEDIUM)
8175                        __clear_chan_timer(chan);
8176        }
8177}
8178
8179static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
8180{
8181        struct l2cap_conn *conn = hcon->l2cap_data;
8182        struct l2cap_chan *chan;
8183
8184        if (!conn)
8185                return;
8186
8187        BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt);
8188
8189        mutex_lock(&conn->chan_lock);
8190
8191        list_for_each_entry(chan, &conn->chan_l, list) {
8192                l2cap_chan_lock(chan);
8193
8194                BT_DBG("chan %p scid 0x%4.4x state %s", chan, chan->scid,
8195                       state_to_string(chan->state));
8196
8197                if (chan->scid == L2CAP_CID_A2MP) {
8198                        l2cap_chan_unlock(chan);
8199                        continue;
8200                }
8201
8202                if (!status && encrypt)
8203                        chan->sec_level = hcon->sec_level;
8204
8205                if (!__l2cap_no_conn_pending(chan)) {
8206                        l2cap_chan_unlock(chan);
8207                        continue;
8208                }
8209
8210                if (!status && (chan->state == BT_CONNECTED ||
8211                                chan->state == BT_CONFIG)) {
8212                        chan->ops->resume(chan);
8213                        l2cap_check_encryption(chan, encrypt);
8214                        l2cap_chan_unlock(chan);
8215                        continue;
8216                }
8217
8218                if (chan->state == BT_CONNECT) {
8219                        if (!status && l2cap_check_enc_key_size(hcon))
8220                                l2cap_start_connection(chan);
8221                        else
8222                                __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
8223                } else if (chan->state == BT_CONNECT2 &&
8224                           !(chan->mode == L2CAP_MODE_EXT_FLOWCTL ||
8225                             chan->mode == L2CAP_MODE_LE_FLOWCTL)) {
8226                        struct l2cap_conn_rsp rsp;
8227                        __u16 res, stat;
8228
8229                        if (!status && l2cap_check_enc_key_size(hcon)) {
8230                                if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
8231                                        res = L2CAP_CR_PEND;
8232                                        stat = L2CAP_CS_AUTHOR_PEND;
8233                                        chan->ops->defer(chan);
8234                                } else {
8235                                        l2cap_state_change(chan, BT_CONFIG);
8236                                        res = L2CAP_CR_SUCCESS;
8237                                        stat = L2CAP_CS_NO_INFO;
8238                                }
8239                        } else {
8240                                l2cap_state_change(chan, BT_DISCONN);
8241                                __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
8242                                res = L2CAP_CR_SEC_BLOCK;
8243                                stat = L2CAP_CS_NO_INFO;
8244                        }
8245
8246                        rsp.scid   = cpu_to_le16(chan->dcid);
8247                        rsp.dcid   = cpu_to_le16(chan->scid);
8248                        rsp.result = cpu_to_le16(res);
8249                        rsp.status = cpu_to_le16(stat);
8250                        l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
8251                                       sizeof(rsp), &rsp);
8252
8253                        if (!test_bit(CONF_REQ_SENT, &chan->conf_state) &&
8254                            res == L2CAP_CR_SUCCESS) {
8255                                char buf[128];
8256                                set_bit(CONF_REQ_SENT, &chan->conf_state);
8257                                l2cap_send_cmd(conn, l2cap_get_ident(conn),
8258                                               L2CAP_CONF_REQ,
8259                                               l2cap_build_conf_req(chan, buf, sizeof(buf)),
8260                                               buf);
8261                                chan->num_conf_req++;
8262                        }
8263                }
8264
8265                l2cap_chan_unlock(chan);
8266        }
8267
8268        mutex_unlock(&conn->chan_lock);
8269}
8270
8271void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
8272{
8273        struct l2cap_conn *conn = hcon->l2cap_data;
8274        struct l2cap_hdr *hdr;
8275        int len;
8276
8277        /* For AMP controller do not create l2cap conn */
8278        if (!conn && hcon->hdev->dev_type != HCI_PRIMARY)
8279                goto drop;
8280
8281        if (!conn)
8282                conn = l2cap_conn_add(hcon);
8283
8284        if (!conn)
8285                goto drop;
8286
8287        BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
8288
8289        switch (flags) {
8290        case ACL_START:
8291        case ACL_START_NO_FLUSH:
8292        case ACL_COMPLETE:
8293                if (conn->rx_len) {
8294                        BT_ERR("Unexpected start frame (len %d)", skb->len);
8295                        kfree_skb(conn->rx_skb);
8296                        conn->rx_skb = NULL;
8297                        conn->rx_len = 0;
8298                        l2cap_conn_unreliable(conn, ECOMM);
8299                }
8300
8301                /* Start fragment always begin with Basic L2CAP header */
8302                if (skb->len < L2CAP_HDR_SIZE) {
8303                        BT_ERR("Frame is too short (len %d)", skb->len);
8304                        l2cap_conn_unreliable(conn, ECOMM);
8305                        goto drop;
8306                }
8307
8308                hdr = (struct l2cap_hdr *) skb->data;
8309                len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
8310
8311                if (len == skb->len) {
8312                        /* Complete frame received */
8313                        l2cap_recv_frame(conn, skb);
8314                        return;
8315                }
8316
8317                BT_DBG("Start: total len %d, frag len %d", len, skb->len);
8318
8319                if (skb->len > len) {
8320                        BT_ERR("Frame is too long (len %d, expected len %d)",
8321                               skb->len, len);
8322                        l2cap_conn_unreliable(conn, ECOMM);
8323                        goto drop;
8324                }
8325
8326                /* Allocate skb for the complete frame (with header) */
8327                conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL);
8328                if (!conn->rx_skb)
8329                        goto drop;
8330
8331                skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
8332                                          skb->len);
8333                conn->rx_len = len - skb->len;
8334                break;
8335
8336        case ACL_CONT:
8337                BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
8338
8339                if (!conn->rx_len) {
8340                        BT_ERR("Unexpected continuation frame (len %d)", skb->len);
8341                        l2cap_conn_unreliable(conn, ECOMM);
8342                        goto drop;
8343                }
8344
8345                if (skb->len > conn->rx_len) {
8346                        BT_ERR("Fragment is too long (len %d, expected %d)",
8347                               skb->len, conn->rx_len);
8348                        kfree_skb(conn->rx_skb);
8349                        conn->rx_skb = NULL;
8350                        conn->rx_len = 0;
8351                        l2cap_conn_unreliable(conn, ECOMM);
8352                        goto drop;
8353                }
8354
8355                skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
8356                                          skb->len);
8357                conn->rx_len -= skb->len;
8358
8359                if (!conn->rx_len) {
8360                        /* Complete frame received. l2cap_recv_frame
8361                         * takes ownership of the skb so set the global
8362                         * rx_skb pointer to NULL first.
8363                         */
8364                        struct sk_buff *rx_skb = conn->rx_skb;
8365                        conn->rx_skb = NULL;
8366                        l2cap_recv_frame(conn, rx_skb);
8367                }
8368                break;
8369        }
8370
8371drop:
8372        kfree_skb(skb);
8373}
8374
8375static struct hci_cb l2cap_cb = {
8376        .name           = "L2CAP",
8377        .connect_cfm    = l2cap_connect_cfm,
8378        .disconn_cfm    = l2cap_disconn_cfm,
8379        .security_cfm   = l2cap_security_cfm,
8380};
8381
8382static int l2cap_debugfs_show(struct seq_file *f, void *p)
8383{
8384        struct l2cap_chan *c;
8385
8386        read_lock(&chan_list_lock);
8387
8388        list_for_each_entry(c, &chan_list, global_l) {
8389                seq_printf(f, "%pMR (%u) %pMR (%u) %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
8390                           &c->src, c->src_type, &c->dst, c->dst_type,
8391                           c->state, __le16_to_cpu(c->psm),
8392                           c->scid, c->dcid, c->imtu, c->omtu,
8393                           c->sec_level, c->mode);
8394        }
8395
8396        read_unlock(&chan_list_lock);
8397
8398        return 0;
8399}
8400
8401DEFINE_SHOW_ATTRIBUTE(l2cap_debugfs);
8402
8403static struct dentry *l2cap_debugfs;
8404
8405int __init l2cap_init(void)
8406{
8407        int err;
8408
8409        err = l2cap_init_sockets();
8410        if (err < 0)
8411                return err;
8412
8413        hci_register_cb(&l2cap_cb);
8414
8415        if (IS_ERR_OR_NULL(bt_debugfs))
8416                return 0;
8417
8418        l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs,
8419                                            NULL, &l2cap_debugfs_fops);
8420
8421        return 0;
8422}
8423
8424void l2cap_exit(void)
8425{
8426        debugfs_remove(l2cap_debugfs);
8427        hci_unregister_cb(&l2cap_cb);
8428        l2cap_cleanup_sockets();
8429}
8430
8431module_param(disable_ertm, bool, 0644);
8432MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
8433
8434module_param(enable_ecred, bool, 0644);
8435MODULE_PARM_DESC(enable_ecred, "Enable enhanced credit flow control mode");
8436