linux/net/bluetooth/hci_conn.c
<<
>>
Prefs
   1/*
   2   BlueZ - Bluetooth protocol stack for Linux
   3   Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
   4
   5   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
   6
   7   This program is free software; you can redistribute it and/or modify
   8   it under the terms of the GNU General Public License version 2 as
   9   published by the Free Software Foundation;
  10
  11   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  12   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  13   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
  14   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
  15   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
  16   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  17   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  18   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19
  20   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
  21   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
  22   SOFTWARE IS DISCLAIMED.
  23*/
  24
  25/* Bluetooth HCI connection handling. */
  26
  27#include <linux/export.h>
  28#include <linux/debugfs.h>
  29
  30#include <net/bluetooth/bluetooth.h>
  31#include <net/bluetooth/hci_core.h>
  32#include <net/bluetooth/l2cap.h>
  33
  34#include "hci_request.h"
  35#include "smp.h"
  36#include "a2mp.h"
  37
  38struct sco_param {
  39        u16 pkt_type;
  40        u16 max_latency;
  41        u8  retrans_effort;
  42};
  43
  44static const struct sco_param esco_param_cvsd[] = {
  45        { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a,   0x01 }, /* S3 */
  46        { EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007,   0x01 }, /* S2 */
  47        { EDR_ESCO_MASK | ESCO_EV3,   0x0007,   0x01 }, /* S1 */
  48        { EDR_ESCO_MASK | ESCO_HV3,   0xffff,   0x01 }, /* D1 */
  49        { EDR_ESCO_MASK | ESCO_HV1,   0xffff,   0x01 }, /* D0 */
  50};
  51
  52static const struct sco_param sco_param_cvsd[] = {
  53        { EDR_ESCO_MASK | ESCO_HV3,   0xffff,   0xff }, /* D1 */
  54        { EDR_ESCO_MASK | ESCO_HV1,   0xffff,   0xff }, /* D0 */
  55};
  56
  57static const struct sco_param esco_param_msbc[] = {
  58        { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d,   0x02 }, /* T2 */
  59        { EDR_ESCO_MASK | ESCO_EV3,   0x0008,   0x02 }, /* T1 */
  60};
  61
  62static void hci_le_create_connection_cancel(struct hci_conn *conn)
  63{
  64        hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
  65}
  66
  67static void hci_acl_create_connection(struct hci_conn *conn)
  68{
  69        struct hci_dev *hdev = conn->hdev;
  70        struct inquiry_entry *ie;
  71        struct hci_cp_create_conn cp;
  72
  73        BT_DBG("hcon %p", conn);
  74
  75        conn->state = BT_CONNECT;
  76        conn->out = true;
  77        conn->role = HCI_ROLE_MASTER;
  78
  79        conn->attempt++;
  80
  81        conn->link_policy = hdev->link_policy;
  82
  83        memset(&cp, 0, sizeof(cp));
  84        bacpy(&cp.bdaddr, &conn->dst);
  85        cp.pscan_rep_mode = 0x02;
  86
  87        ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
  88        if (ie) {
  89                if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
  90                        cp.pscan_rep_mode = ie->data.pscan_rep_mode;
  91                        cp.pscan_mode     = ie->data.pscan_mode;
  92                        cp.clock_offset   = ie->data.clock_offset |
  93                                            cpu_to_le16(0x8000);
  94                }
  95
  96                memcpy(conn->dev_class, ie->data.dev_class, 3);
  97                if (ie->data.ssp_mode > 0)
  98                        set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
  99        }
 100
 101        cp.pkt_type = cpu_to_le16(conn->pkt_type);
 102        if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
 103                cp.role_switch = 0x01;
 104        else
 105                cp.role_switch = 0x00;
 106
 107        hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
 108}
 109
 110static void hci_acl_create_connection_cancel(struct hci_conn *conn)
 111{
 112        struct hci_cp_create_conn_cancel cp;
 113
 114        BT_DBG("hcon %p", conn);
 115
 116        if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
 117                return;
 118
 119        bacpy(&cp.bdaddr, &conn->dst);
 120        hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
 121}
 122
 123static void hci_reject_sco(struct hci_conn *conn)
 124{
 125        struct hci_cp_reject_sync_conn_req cp;
 126
 127        cp.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
 128        bacpy(&cp.bdaddr, &conn->dst);
 129
 130        hci_send_cmd(conn->hdev, HCI_OP_REJECT_SYNC_CONN_REQ, sizeof(cp), &cp);
 131}
 132
 133int hci_disconnect(struct hci_conn *conn, __u8 reason)
 134{
 135        struct hci_cp_disconnect cp;
 136
 137        BT_DBG("hcon %p", conn);
 138
 139        /* When we are master of an established connection and it enters
 140         * the disconnect timeout, then go ahead and try to read the
 141         * current clock offset.  Processing of the result is done
 142         * within the event handling and hci_clock_offset_evt function.
 143         */
 144        if (conn->type == ACL_LINK && conn->role == HCI_ROLE_MASTER) {
 145                struct hci_dev *hdev = conn->hdev;
 146                struct hci_cp_read_clock_offset clkoff_cp;
 147
 148                clkoff_cp.handle = cpu_to_le16(conn->handle);
 149                hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, sizeof(clkoff_cp),
 150                             &clkoff_cp);
 151        }
 152
 153        conn->state = BT_DISCONN;
 154
 155        cp.handle = cpu_to_le16(conn->handle);
 156        cp.reason = reason;
 157        return hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
 158}
 159
 160static void hci_amp_disconn(struct hci_conn *conn)
 161{
 162        struct hci_cp_disconn_phy_link cp;
 163
 164        BT_DBG("hcon %p", conn);
 165
 166        conn->state = BT_DISCONN;
 167
 168        cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
 169        cp.reason = hci_proto_disconn_ind(conn);
 170        hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
 171                     sizeof(cp), &cp);
 172}
 173
 174static void hci_add_sco(struct hci_conn *conn, __u16 handle)
 175{
 176        struct hci_dev *hdev = conn->hdev;
 177        struct hci_cp_add_sco cp;
 178
 179        BT_DBG("hcon %p", conn);
 180
 181        conn->state = BT_CONNECT;
 182        conn->out = true;
 183
 184        conn->attempt++;
 185
 186        cp.handle   = cpu_to_le16(handle);
 187        cp.pkt_type = cpu_to_le16(conn->pkt_type);
 188
 189        hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
 190}
 191
 192bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
 193{
 194        struct hci_dev *hdev = conn->hdev;
 195        struct hci_cp_setup_sync_conn cp;
 196        const struct sco_param *param;
 197
 198        BT_DBG("hcon %p", conn);
 199
 200        conn->state = BT_CONNECT;
 201        conn->out = true;
 202
 203        conn->attempt++;
 204
 205        cp.handle   = cpu_to_le16(handle);
 206
 207        cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
 208        cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
 209        cp.voice_setting  = cpu_to_le16(conn->setting);
 210
 211        switch (conn->setting & SCO_AIRMODE_MASK) {
 212        case SCO_AIRMODE_TRANSP:
 213                if (conn->attempt > ARRAY_SIZE(esco_param_msbc))
 214                        return false;
 215                param = &esco_param_msbc[conn->attempt - 1];
 216                break;
 217        case SCO_AIRMODE_CVSD:
 218                if (lmp_esco_capable(conn->link)) {
 219                        if (conn->attempt > ARRAY_SIZE(esco_param_cvsd))
 220                                return false;
 221                        param = &esco_param_cvsd[conn->attempt - 1];
 222                } else {
 223                        if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
 224                                return false;
 225                        param = &sco_param_cvsd[conn->attempt - 1];
 226                }
 227                break;
 228        default:
 229                return false;
 230        }
 231
 232        cp.retrans_effort = param->retrans_effort;
 233        cp.pkt_type = __cpu_to_le16(param->pkt_type);
 234        cp.max_latency = __cpu_to_le16(param->max_latency);
 235
 236        if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
 237                return false;
 238
 239        return true;
 240}
 241
 242u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
 243                      u16 to_multiplier)
 244{
 245        struct hci_dev *hdev = conn->hdev;
 246        struct hci_conn_params *params;
 247        struct hci_cp_le_conn_update cp;
 248
 249        hci_dev_lock(hdev);
 250
 251        params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
 252        if (params) {
 253                params->conn_min_interval = min;
 254                params->conn_max_interval = max;
 255                params->conn_latency = latency;
 256                params->supervision_timeout = to_multiplier;
 257        }
 258
 259        hci_dev_unlock(hdev);
 260
 261        memset(&cp, 0, sizeof(cp));
 262        cp.handle               = cpu_to_le16(conn->handle);
 263        cp.conn_interval_min    = cpu_to_le16(min);
 264        cp.conn_interval_max    = cpu_to_le16(max);
 265        cp.conn_latency         = cpu_to_le16(latency);
 266        cp.supervision_timeout  = cpu_to_le16(to_multiplier);
 267        cp.min_ce_len           = cpu_to_le16(0x0000);
 268        cp.max_ce_len           = cpu_to_le16(0x0000);
 269
 270        hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
 271
 272        if (params)
 273                return 0x01;
 274
 275        return 0x00;
 276}
 277
 278void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
 279                      __u8 ltk[16])
 280{
 281        struct hci_dev *hdev = conn->hdev;
 282        struct hci_cp_le_start_enc cp;
 283
 284        BT_DBG("hcon %p", conn);
 285
 286        memset(&cp, 0, sizeof(cp));
 287
 288        cp.handle = cpu_to_le16(conn->handle);
 289        cp.rand = rand;
 290        cp.ediv = ediv;
 291        memcpy(cp.ltk, ltk, sizeof(cp.ltk));
 292
 293        hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
 294}
 295
 296/* Device _must_ be locked */
 297void hci_sco_setup(struct hci_conn *conn, __u8 status)
 298{
 299        struct hci_conn *sco = conn->link;
 300
 301        if (!sco)
 302                return;
 303
 304        BT_DBG("hcon %p", conn);
 305
 306        if (!status) {
 307                if (lmp_esco_capable(conn->hdev))
 308                        hci_setup_sync(sco, conn->handle);
 309                else
 310                        hci_add_sco(sco, conn->handle);
 311        } else {
 312                hci_connect_cfm(sco, status);
 313                hci_conn_del(sco);
 314        }
 315}
 316
 317static void hci_conn_timeout(struct work_struct *work)
 318{
 319        struct hci_conn *conn = container_of(work, struct hci_conn,
 320                                             disc_work.work);
 321        int refcnt = atomic_read(&conn->refcnt);
 322
 323        BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
 324
 325        WARN_ON(refcnt < 0);
 326
 327        /* FIXME: It was observed that in pairing failed scenario, refcnt
 328         * drops below 0. Probably this is because l2cap_conn_del calls
 329         * l2cap_chan_del for each channel, and inside l2cap_chan_del conn is
 330         * dropped. After that loop hci_chan_del is called which also drops
 331         * conn. For now make sure that ACL is alive if refcnt is higher then 0,
 332         * otherwise drop it.
 333         */
 334        if (refcnt > 0)
 335                return;
 336
 337        switch (conn->state) {
 338        case BT_CONNECT:
 339        case BT_CONNECT2:
 340                if (conn->out) {
 341                        if (conn->type == ACL_LINK)
 342                                hci_acl_create_connection_cancel(conn);
 343                        else if (conn->type == LE_LINK)
 344                                hci_le_create_connection_cancel(conn);
 345                } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
 346                        hci_reject_sco(conn);
 347                }
 348                break;
 349        case BT_CONFIG:
 350        case BT_CONNECTED:
 351                if (conn->type == AMP_LINK) {
 352                        hci_amp_disconn(conn);
 353                } else {
 354                        __u8 reason = hci_proto_disconn_ind(conn);
 355                        hci_disconnect(conn, reason);
 356                }
 357                break;
 358        default:
 359                conn->state = BT_CLOSED;
 360                break;
 361        }
 362}
 363
 364/* Enter sniff mode */
 365static void hci_conn_idle(struct work_struct *work)
 366{
 367        struct hci_conn *conn = container_of(work, struct hci_conn,
 368                                             idle_work.work);
 369        struct hci_dev *hdev = conn->hdev;
 370
 371        BT_DBG("hcon %p mode %d", conn, conn->mode);
 372
 373        if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
 374                return;
 375
 376        if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
 377                return;
 378
 379        if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
 380                struct hci_cp_sniff_subrate cp;
 381                cp.handle             = cpu_to_le16(conn->handle);
 382                cp.max_latency        = cpu_to_le16(0);
 383                cp.min_remote_timeout = cpu_to_le16(0);
 384                cp.min_local_timeout  = cpu_to_le16(0);
 385                hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
 386        }
 387
 388        if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
 389                struct hci_cp_sniff_mode cp;
 390                cp.handle       = cpu_to_le16(conn->handle);
 391                cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
 392                cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
 393                cp.attempt      = cpu_to_le16(4);
 394                cp.timeout      = cpu_to_le16(1);
 395                hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
 396        }
 397}
 398
 399static void hci_conn_auto_accept(struct work_struct *work)
 400{
 401        struct hci_conn *conn = container_of(work, struct hci_conn,
 402                                             auto_accept_work.work);
 403
 404        hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
 405                     &conn->dst);
 406}
 407
 408static void le_conn_timeout(struct work_struct *work)
 409{
 410        struct hci_conn *conn = container_of(work, struct hci_conn,
 411                                             le_conn_timeout.work);
 412        struct hci_dev *hdev = conn->hdev;
 413
 414        BT_DBG("");
 415
 416        /* We could end up here due to having done directed advertising,
 417         * so clean up the state if necessary. This should however only
 418         * happen with broken hardware or if low duty cycle was used
 419         * (which doesn't have a timeout of its own).
 420         */
 421        if (conn->role == HCI_ROLE_SLAVE) {
 422                u8 enable = 0x00;
 423                hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
 424                             &enable);
 425                hci_le_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT);
 426                return;
 427        }
 428
 429        hci_le_create_connection_cancel(conn);
 430}
 431
 432struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
 433                              u8 role)
 434{
 435        struct hci_conn *conn;
 436
 437        BT_DBG("%s dst %pMR", hdev->name, dst);
 438
 439        conn = kzalloc(sizeof(*conn), GFP_KERNEL);
 440        if (!conn)
 441                return NULL;
 442
 443        bacpy(&conn->dst, dst);
 444        bacpy(&conn->src, &hdev->bdaddr);
 445        conn->hdev  = hdev;
 446        conn->type  = type;
 447        conn->role  = role;
 448        conn->mode  = HCI_CM_ACTIVE;
 449        conn->state = BT_OPEN;
 450        conn->auth_type = HCI_AT_GENERAL_BONDING;
 451        conn->io_capability = hdev->io_capability;
 452        conn->remote_auth = 0xff;
 453        conn->key_type = 0xff;
 454        conn->rssi = HCI_RSSI_INVALID;
 455        conn->tx_power = HCI_TX_POWER_INVALID;
 456        conn->max_tx_power = HCI_TX_POWER_INVALID;
 457
 458        set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
 459        conn->disc_timeout = HCI_DISCONN_TIMEOUT;
 460
 461        if (conn->role == HCI_ROLE_MASTER)
 462                conn->out = true;
 463
 464        switch (type) {
 465        case ACL_LINK:
 466                conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
 467                break;
 468        case LE_LINK:
 469                /* conn->src should reflect the local identity address */
 470                hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
 471                break;
 472        case SCO_LINK:
 473                if (lmp_esco_capable(hdev))
 474                        conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
 475                                        (hdev->esco_type & EDR_ESCO_MASK);
 476                else
 477                        conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
 478                break;
 479        case ESCO_LINK:
 480                conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
 481                break;
 482        }
 483
 484        skb_queue_head_init(&conn->data_q);
 485
 486        INIT_LIST_HEAD(&conn->chan_list);
 487
 488        INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
 489        INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
 490        INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
 491        INIT_DELAYED_WORK(&conn->le_conn_timeout, le_conn_timeout);
 492
 493        atomic_set(&conn->refcnt, 0);
 494
 495        hci_dev_hold(hdev);
 496
 497        hci_conn_hash_add(hdev, conn);
 498        if (hdev->notify)
 499                hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
 500
 501        hci_conn_init_sysfs(conn);
 502
 503        return conn;
 504}
 505
 506int hci_conn_del(struct hci_conn *conn)
 507{
 508        struct hci_dev *hdev = conn->hdev;
 509
 510        BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
 511
 512        cancel_delayed_work_sync(&conn->disc_work);
 513        cancel_delayed_work_sync(&conn->auto_accept_work);
 514        cancel_delayed_work_sync(&conn->idle_work);
 515
 516        if (conn->type == ACL_LINK) {
 517                struct hci_conn *sco = conn->link;
 518                if (sco)
 519                        sco->link = NULL;
 520
 521                /* Unacked frames */
 522                hdev->acl_cnt += conn->sent;
 523        } else if (conn->type == LE_LINK) {
 524                cancel_delayed_work(&conn->le_conn_timeout);
 525
 526                if (hdev->le_pkts)
 527                        hdev->le_cnt += conn->sent;
 528                else
 529                        hdev->acl_cnt += conn->sent;
 530        } else {
 531                struct hci_conn *acl = conn->link;
 532                if (acl) {
 533                        acl->link = NULL;
 534                        hci_conn_drop(acl);
 535                }
 536        }
 537
 538        hci_chan_list_flush(conn);
 539
 540        if (conn->amp_mgr)
 541                amp_mgr_put(conn->amp_mgr);
 542
 543        hci_conn_hash_del(hdev, conn);
 544        if (hdev->notify)
 545                hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
 546
 547        skb_queue_purge(&conn->data_q);
 548
 549        hci_conn_del_sysfs(conn);
 550
 551        debugfs_remove_recursive(conn->debugfs);
 552
 553        if (test_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags))
 554                hci_conn_params_del(conn->hdev, &conn->dst, conn->dst_type);
 555
 556        hci_dev_put(hdev);
 557
 558        hci_conn_put(conn);
 559
 560        return 0;
 561}
 562
 563struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
 564{
 565        int use_src = bacmp(src, BDADDR_ANY);
 566        struct hci_dev *hdev = NULL, *d;
 567
 568        BT_DBG("%pMR -> %pMR", src, dst);
 569
 570        read_lock(&hci_dev_list_lock);
 571
 572        list_for_each_entry(d, &hci_dev_list, list) {
 573                if (!test_bit(HCI_UP, &d->flags) ||
 574                    hci_dev_test_flag(d, HCI_USER_CHANNEL) ||
 575                    d->dev_type != HCI_BREDR)
 576                        continue;
 577
 578                /* Simple routing:
 579                 *   No source address - find interface with bdaddr != dst
 580                 *   Source address    - find interface with bdaddr == src
 581                 */
 582
 583                if (use_src) {
 584                        if (!bacmp(&d->bdaddr, src)) {
 585                                hdev = d; break;
 586                        }
 587                } else {
 588                        if (bacmp(&d->bdaddr, dst)) {
 589                                hdev = d; break;
 590                        }
 591                }
 592        }
 593
 594        if (hdev)
 595                hdev = hci_dev_hold(hdev);
 596
 597        read_unlock(&hci_dev_list_lock);
 598        return hdev;
 599}
 600EXPORT_SYMBOL(hci_get_route);
 601
 602/* This function requires the caller holds hdev->lock */
 603void hci_le_conn_failed(struct hci_conn *conn, u8 status)
 604{
 605        struct hci_dev *hdev = conn->hdev;
 606        struct hci_conn_params *params;
 607
 608        params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
 609                                           conn->dst_type);
 610        if (params && params->conn) {
 611                hci_conn_drop(params->conn);
 612                hci_conn_put(params->conn);
 613                params->conn = NULL;
 614        }
 615
 616        conn->state = BT_CLOSED;
 617
 618        mgmt_connect_failed(hdev, &conn->dst, conn->type, conn->dst_type,
 619                            status);
 620
 621        hci_connect_cfm(conn, status);
 622
 623        hci_conn_del(conn);
 624
 625        /* Since we may have temporarily stopped the background scanning in
 626         * favor of connection establishment, we should restart it.
 627         */
 628        hci_update_background_scan(hdev);
 629
 630        /* Re-enable advertising in case this was a failed connection
 631         * attempt as a peripheral.
 632         */
 633        mgmt_reenable_advertising(hdev);
 634}
 635
 636static void create_le_conn_complete(struct hci_dev *hdev, u8 status, u16 opcode)
 637{
 638        struct hci_conn *conn;
 639
 640        if (status == 0)
 641                return;
 642
 643        BT_ERR("HCI request failed to create LE connection: status 0x%2.2x",
 644               status);
 645
 646        hci_dev_lock(hdev);
 647
 648        conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
 649        if (!conn)
 650                goto done;
 651
 652        hci_le_conn_failed(conn, status);
 653
 654done:
 655        hci_dev_unlock(hdev);
 656}
 657
 658static void hci_req_add_le_create_conn(struct hci_request *req,
 659                                       struct hci_conn *conn)
 660{
 661        struct hci_cp_le_create_conn cp;
 662        struct hci_dev *hdev = conn->hdev;
 663        u8 own_addr_type;
 664
 665        memset(&cp, 0, sizeof(cp));
 666
 667        /* Update random address, but set require_privacy to false so
 668         * that we never connect with an non-resolvable address.
 669         */
 670        if (hci_update_random_address(req, false, &own_addr_type))
 671                return;
 672
 673        cp.scan_interval = cpu_to_le16(hdev->le_scan_interval);
 674        cp.scan_window = cpu_to_le16(hdev->le_scan_window);
 675        bacpy(&cp.peer_addr, &conn->dst);
 676        cp.peer_addr_type = conn->dst_type;
 677        cp.own_address_type = own_addr_type;
 678        cp.conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
 679        cp.conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
 680        cp.conn_latency = cpu_to_le16(conn->le_conn_latency);
 681        cp.supervision_timeout = cpu_to_le16(conn->le_supv_timeout);
 682        cp.min_ce_len = cpu_to_le16(0x0000);
 683        cp.max_ce_len = cpu_to_le16(0x0000);
 684
 685        hci_req_add(req, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
 686
 687        conn->state = BT_CONNECT;
 688}
 689
 690static void hci_req_directed_advertising(struct hci_request *req,
 691                                         struct hci_conn *conn)
 692{
 693        struct hci_dev *hdev = req->hdev;
 694        struct hci_cp_le_set_adv_param cp;
 695        u8 own_addr_type;
 696        u8 enable;
 697
 698        /* Clear the HCI_LE_ADV bit temporarily so that the
 699         * hci_update_random_address knows that it's safe to go ahead
 700         * and write a new random address. The flag will be set back on
 701         * as soon as the SET_ADV_ENABLE HCI command completes.
 702         */
 703        hci_dev_clear_flag(hdev, HCI_LE_ADV);
 704
 705        /* Set require_privacy to false so that the remote device has a
 706         * chance of identifying us.
 707         */
 708        if (hci_update_random_address(req, false, &own_addr_type) < 0)
 709                return;
 710
 711        memset(&cp, 0, sizeof(cp));
 712        cp.type = LE_ADV_DIRECT_IND;
 713        cp.own_address_type = own_addr_type;
 714        cp.direct_addr_type = conn->dst_type;
 715        bacpy(&cp.direct_addr, &conn->dst);
 716        cp.channel_map = hdev->le_adv_channel_map;
 717
 718        hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp);
 719
 720        enable = 0x01;
 721        hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
 722
 723        conn->state = BT_CONNECT;
 724}
 725
 726struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
 727                                u8 dst_type, u8 sec_level, u16 conn_timeout,
 728                                u8 role)
 729{
 730        struct hci_conn_params *params;
 731        struct hci_conn *conn;
 732        struct smp_irk *irk;
 733        struct hci_request req;
 734        int err;
 735
 736        /* Let's make sure that le is enabled.*/
 737        if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
 738                if (lmp_le_capable(hdev))
 739                        return ERR_PTR(-ECONNREFUSED);
 740
 741                return ERR_PTR(-EOPNOTSUPP);
 742        }
 743
 744        /* Some devices send ATT messages as soon as the physical link is
 745         * established. To be able to handle these ATT messages, the user-
 746         * space first establishes the connection and then starts the pairing
 747         * process.
 748         *
 749         * So if a hci_conn object already exists for the following connection
 750         * attempt, we simply update pending_sec_level and auth_type fields
 751         * and return the object found.
 752         */
 753        conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
 754        if (conn) {
 755                conn->pending_sec_level = sec_level;
 756                goto done;
 757        }
 758
 759        /* Since the controller supports only one LE connection attempt at a
 760         * time, we return -EBUSY if there is any connection attempt running.
 761         */
 762        conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
 763        if (conn)
 764                return ERR_PTR(-EBUSY);
 765
 766        /* When given an identity address with existing identity
 767         * resolving key, the connection needs to be established
 768         * to a resolvable random address.
 769         *
 770         * This uses the cached random resolvable address from
 771         * a previous scan. When no cached address is available,
 772         * try connecting to the identity address instead.
 773         *
 774         * Storing the resolvable random address is required here
 775         * to handle connection failures. The address will later
 776         * be resolved back into the original identity address
 777         * from the connect request.
 778         */
 779        irk = hci_find_irk_by_addr(hdev, dst, dst_type);
 780        if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
 781                dst = &irk->rpa;
 782                dst_type = ADDR_LE_DEV_RANDOM;
 783        }
 784
 785        conn = hci_conn_add(hdev, LE_LINK, dst, role);
 786        if (!conn)
 787                return ERR_PTR(-ENOMEM);
 788
 789        conn->dst_type = dst_type;
 790        conn->sec_level = BT_SECURITY_LOW;
 791        conn->pending_sec_level = sec_level;
 792        conn->conn_timeout = conn_timeout;
 793
 794        hci_req_init(&req, hdev);
 795
 796        /* Disable advertising if we're active. For master role
 797         * connections most controllers will refuse to connect if
 798         * advertising is enabled, and for slave role connections we
 799         * anyway have to disable it in order to start directed
 800         * advertising.
 801         */
 802        if (hci_dev_test_flag(hdev, HCI_LE_ADV)) {
 803                u8 enable = 0x00;
 804                hci_req_add(&req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
 805                            &enable);
 806        }
 807
 808        /* If requested to connect as slave use directed advertising */
 809        if (conn->role == HCI_ROLE_SLAVE) {
 810                /* If we're active scanning most controllers are unable
 811                 * to initiate advertising. Simply reject the attempt.
 812                 */
 813                if (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
 814                    hdev->le_scan_type == LE_SCAN_ACTIVE) {
 815                        skb_queue_purge(&req.cmd_q);
 816                        hci_conn_del(conn);
 817                        return ERR_PTR(-EBUSY);
 818                }
 819
 820                hci_req_directed_advertising(&req, conn);
 821                goto create_conn;
 822        }
 823
 824        params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
 825        if (params) {
 826                conn->le_conn_min_interval = params->conn_min_interval;
 827                conn->le_conn_max_interval = params->conn_max_interval;
 828                conn->le_conn_latency = params->conn_latency;
 829                conn->le_supv_timeout = params->supervision_timeout;
 830        } else {
 831                conn->le_conn_min_interval = hdev->le_conn_min_interval;
 832                conn->le_conn_max_interval = hdev->le_conn_max_interval;
 833                conn->le_conn_latency = hdev->le_conn_latency;
 834                conn->le_supv_timeout = hdev->le_supv_timeout;
 835        }
 836
 837        /* If controller is scanning, we stop it since some controllers are
 838         * not able to scan and connect at the same time. Also set the
 839         * HCI_LE_SCAN_INTERRUPTED flag so that the command complete
 840         * handler for scan disabling knows to set the correct discovery
 841         * state.
 842         */
 843        if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
 844                hci_req_add_le_scan_disable(&req);
 845                hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED);
 846        }
 847
 848        hci_req_add_le_create_conn(&req, conn);
 849
 850create_conn:
 851        err = hci_req_run(&req, create_le_conn_complete);
 852        if (err) {
 853                hci_conn_del(conn);
 854                return ERR_PTR(err);
 855        }
 856
 857done:
 858        hci_conn_hold(conn);
 859        return conn;
 860}
 861
 862struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
 863                                 u8 sec_level, u8 auth_type)
 864{
 865        struct hci_conn *acl;
 866
 867        if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
 868                if (lmp_bredr_capable(hdev))
 869                        return ERR_PTR(-ECONNREFUSED);
 870
 871                return ERR_PTR(-EOPNOTSUPP);
 872        }
 873
 874        acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
 875        if (!acl) {
 876                acl = hci_conn_add(hdev, ACL_LINK, dst, HCI_ROLE_MASTER);
 877                if (!acl)
 878                        return ERR_PTR(-ENOMEM);
 879        }
 880
 881        hci_conn_hold(acl);
 882
 883        if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
 884                acl->sec_level = BT_SECURITY_LOW;
 885                acl->pending_sec_level = sec_level;
 886                acl->auth_type = auth_type;
 887                hci_acl_create_connection(acl);
 888        }
 889
 890        return acl;
 891}
 892
 893struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
 894                                 __u16 setting)
 895{
 896        struct hci_conn *acl;
 897        struct hci_conn *sco;
 898
 899        acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
 900        if (IS_ERR(acl))
 901                return acl;
 902
 903        sco = hci_conn_hash_lookup_ba(hdev, type, dst);
 904        if (!sco) {
 905                sco = hci_conn_add(hdev, type, dst, HCI_ROLE_MASTER);
 906                if (!sco) {
 907                        hci_conn_drop(acl);
 908                        return ERR_PTR(-ENOMEM);
 909                }
 910        }
 911
 912        acl->link = sco;
 913        sco->link = acl;
 914
 915        hci_conn_hold(sco);
 916
 917        sco->setting = setting;
 918
 919        if (acl->state == BT_CONNECTED &&
 920            (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
 921                set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
 922                hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
 923
 924                if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
 925                        /* defer SCO setup until mode change completed */
 926                        set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
 927                        return sco;
 928                }
 929
 930                hci_sco_setup(acl, 0x00);
 931        }
 932
 933        return sco;
 934}
 935
 936/* Check link security requirement */
 937int hci_conn_check_link_mode(struct hci_conn *conn)
 938{
 939        BT_DBG("hcon %p", conn);
 940
 941        /* In Secure Connections Only mode, it is required that Secure
 942         * Connections is used and the link is encrypted with AES-CCM
 943         * using a P-256 authenticated combination key.
 944         */
 945        if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) {
 946                if (!hci_conn_sc_enabled(conn) ||
 947                    !test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
 948                    conn->key_type != HCI_LK_AUTH_COMBINATION_P256)
 949                        return 0;
 950        }
 951
 952        if (hci_conn_ssp_enabled(conn) &&
 953            !test_bit(HCI_CONN_ENCRYPT, &conn->flags))
 954                return 0;
 955
 956        return 1;
 957}
 958
 959/* Authenticate remote device */
 960static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
 961{
 962        BT_DBG("hcon %p", conn);
 963
 964        if (conn->pending_sec_level > sec_level)
 965                sec_level = conn->pending_sec_level;
 966
 967        if (sec_level > conn->sec_level)
 968                conn->pending_sec_level = sec_level;
 969        else if (test_bit(HCI_CONN_AUTH, &conn->flags))
 970                return 1;
 971
 972        /* Make sure we preserve an existing MITM requirement*/
 973        auth_type |= (conn->auth_type & 0x01);
 974
 975        conn->auth_type = auth_type;
 976
 977        if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
 978                struct hci_cp_auth_requested cp;
 979
 980                cp.handle = cpu_to_le16(conn->handle);
 981                hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
 982                             sizeof(cp), &cp);
 983
 984                /* If we're already encrypted set the REAUTH_PEND flag,
 985                 * otherwise set the ENCRYPT_PEND.
 986                 */
 987                if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
 988                        set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
 989                else
 990                        set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
 991        }
 992
 993        return 0;
 994}
 995
 996/* Encrypt the the link */
 997static void hci_conn_encrypt(struct hci_conn *conn)
 998{
 999        BT_DBG("hcon %p", conn);
1000
1001        if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
1002                struct hci_cp_set_conn_encrypt cp;
1003                cp.handle  = cpu_to_le16(conn->handle);
1004                cp.encrypt = 0x01;
1005                hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
1006                             &cp);
1007        }
1008}
1009
1010/* Enable security */
1011int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
1012                      bool initiator)
1013{
1014        BT_DBG("hcon %p", conn);
1015
1016        if (conn->type == LE_LINK)
1017                return smp_conn_security(conn, sec_level);
1018
1019        /* For sdp we don't need the link key. */
1020        if (sec_level == BT_SECURITY_SDP)
1021                return 1;
1022
1023        /* For non 2.1 devices and low security level we don't need the link
1024           key. */
1025        if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
1026                return 1;
1027
1028        /* For other security levels we need the link key. */
1029        if (!test_bit(HCI_CONN_AUTH, &conn->flags))
1030                goto auth;
1031
1032        /* An authenticated FIPS approved combination key has sufficient
1033         * security for security level 4. */
1034        if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
1035            sec_level == BT_SECURITY_FIPS)
1036                goto encrypt;
1037
1038        /* An authenticated combination key has sufficient security for
1039           security level 3. */
1040        if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
1041             conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
1042            sec_level == BT_SECURITY_HIGH)
1043                goto encrypt;
1044
1045        /* An unauthenticated combination key has sufficient security for
1046           security level 1 and 2. */
1047        if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
1048             conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
1049            (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
1050                goto encrypt;
1051
1052        /* A combination key has always sufficient security for the security
1053           levels 1 or 2. High security level requires the combination key
1054           is generated using maximum PIN code length (16).
1055           For pre 2.1 units. */
1056        if (conn->key_type == HCI_LK_COMBINATION &&
1057            (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
1058             conn->pin_length == 16))
1059                goto encrypt;
1060
1061auth:
1062        if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1063                return 0;
1064
1065        if (initiator)
1066                set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
1067
1068        if (!hci_conn_auth(conn, sec_level, auth_type))
1069                return 0;
1070
1071encrypt:
1072        if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1073                return 1;
1074
1075        hci_conn_encrypt(conn);
1076        return 0;
1077}
1078EXPORT_SYMBOL(hci_conn_security);
1079
1080/* Check secure link requirement */
1081int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
1082{
1083        BT_DBG("hcon %p", conn);
1084
1085        /* Accept if non-secure or higher security level is required */
1086        if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
1087                return 1;
1088
1089        /* Accept if secure or higher security level is already present */
1090        if (conn->sec_level == BT_SECURITY_HIGH ||
1091            conn->sec_level == BT_SECURITY_FIPS)
1092                return 1;
1093
1094        /* Reject not secure link */
1095        return 0;
1096}
1097EXPORT_SYMBOL(hci_conn_check_secure);
1098
1099/* Switch role */
1100int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
1101{
1102        BT_DBG("hcon %p", conn);
1103
1104        if (role == conn->role)
1105                return 1;
1106
1107        if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
1108                struct hci_cp_switch_role cp;
1109                bacpy(&cp.bdaddr, &conn->dst);
1110                cp.role = role;
1111                hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
1112        }
1113
1114        return 0;
1115}
1116EXPORT_SYMBOL(hci_conn_switch_role);
1117
1118/* Enter active mode */
1119void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
1120{
1121        struct hci_dev *hdev = conn->hdev;
1122
1123        BT_DBG("hcon %p mode %d", conn, conn->mode);
1124
1125        if (conn->mode != HCI_CM_SNIFF)
1126                goto timer;
1127
1128        if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
1129                goto timer;
1130
1131        if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
1132                struct hci_cp_exit_sniff_mode cp;
1133                cp.handle = cpu_to_le16(conn->handle);
1134                hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
1135        }
1136
1137timer:
1138        if (hdev->idle_timeout > 0)
1139                queue_delayed_work(hdev->workqueue, &conn->idle_work,
1140                                   msecs_to_jiffies(hdev->idle_timeout));
1141}
1142
1143/* Drop all connection on the device */
1144void hci_conn_hash_flush(struct hci_dev *hdev)
1145{
1146        struct hci_conn_hash *h = &hdev->conn_hash;
1147        struct hci_conn *c, *n;
1148
1149        BT_DBG("hdev %s", hdev->name);
1150
1151        list_for_each_entry_safe(c, n, &h->list, list) {
1152                c->state = BT_CLOSED;
1153
1154                hci_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
1155                hci_conn_del(c);
1156        }
1157}
1158
1159/* Check pending connect attempts */
1160void hci_conn_check_pending(struct hci_dev *hdev)
1161{
1162        struct hci_conn *conn;
1163
1164        BT_DBG("hdev %s", hdev->name);
1165
1166        hci_dev_lock(hdev);
1167
1168        conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
1169        if (conn)
1170                hci_acl_create_connection(conn);
1171
1172        hci_dev_unlock(hdev);
1173}
1174
1175static u32 get_link_mode(struct hci_conn *conn)
1176{
1177        u32 link_mode = 0;
1178
1179        if (conn->role == HCI_ROLE_MASTER)
1180                link_mode |= HCI_LM_MASTER;
1181
1182        if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1183                link_mode |= HCI_LM_ENCRYPT;
1184
1185        if (test_bit(HCI_CONN_AUTH, &conn->flags))
1186                link_mode |= HCI_LM_AUTH;
1187
1188        if (test_bit(HCI_CONN_SECURE, &conn->flags))
1189                link_mode |= HCI_LM_SECURE;
1190
1191        if (test_bit(HCI_CONN_FIPS, &conn->flags))
1192                link_mode |= HCI_LM_FIPS;
1193
1194        return link_mode;
1195}
1196
1197int hci_get_conn_list(void __user *arg)
1198{
1199        struct hci_conn *c;
1200        struct hci_conn_list_req req, *cl;
1201        struct hci_conn_info *ci;
1202        struct hci_dev *hdev;
1203        int n = 0, size, err;
1204
1205        if (copy_from_user(&req, arg, sizeof(req)))
1206                return -EFAULT;
1207
1208        if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
1209                return -EINVAL;
1210
1211        size = sizeof(req) + req.conn_num * sizeof(*ci);
1212
1213        cl = kmalloc(size, GFP_KERNEL);
1214        if (!cl)
1215                return -ENOMEM;
1216
1217        hdev = hci_dev_get(req.dev_id);
1218        if (!hdev) {
1219                kfree(cl);
1220                return -ENODEV;
1221        }
1222
1223        ci = cl->conn_info;
1224
1225        hci_dev_lock(hdev);
1226        list_for_each_entry(c, &hdev->conn_hash.list, list) {
1227                bacpy(&(ci + n)->bdaddr, &c->dst);
1228                (ci + n)->handle = c->handle;
1229                (ci + n)->type  = c->type;
1230                (ci + n)->out   = c->out;
1231                (ci + n)->state = c->state;
1232                (ci + n)->link_mode = get_link_mode(c);
1233                if (++n >= req.conn_num)
1234                        break;
1235        }
1236        hci_dev_unlock(hdev);
1237
1238        cl->dev_id = hdev->id;
1239        cl->conn_num = n;
1240        size = sizeof(req) + n * sizeof(*ci);
1241
1242        hci_dev_put(hdev);
1243
1244        err = copy_to_user(arg, cl, size);
1245        kfree(cl);
1246
1247        return err ? -EFAULT : 0;
1248}
1249
1250int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
1251{
1252        struct hci_conn_info_req req;
1253        struct hci_conn_info ci;
1254        struct hci_conn *conn;
1255        char __user *ptr = arg + sizeof(req);
1256
1257        if (copy_from_user(&req, arg, sizeof(req)))
1258                return -EFAULT;
1259
1260        hci_dev_lock(hdev);
1261        conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
1262        if (conn) {
1263                bacpy(&ci.bdaddr, &conn->dst);
1264                ci.handle = conn->handle;
1265                ci.type  = conn->type;
1266                ci.out   = conn->out;
1267                ci.state = conn->state;
1268                ci.link_mode = get_link_mode(conn);
1269        }
1270        hci_dev_unlock(hdev);
1271
1272        if (!conn)
1273                return -ENOENT;
1274
1275        return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
1276}
1277
1278int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
1279{
1280        struct hci_auth_info_req req;
1281        struct hci_conn *conn;
1282
1283        if (copy_from_user(&req, arg, sizeof(req)))
1284                return -EFAULT;
1285
1286        hci_dev_lock(hdev);
1287        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
1288        if (conn)
1289                req.type = conn->auth_type;
1290        hci_dev_unlock(hdev);
1291
1292        if (!conn)
1293                return -ENOENT;
1294
1295        return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
1296}
1297
1298struct hci_chan *hci_chan_create(struct hci_conn *conn)
1299{
1300        struct hci_dev *hdev = conn->hdev;
1301        struct hci_chan *chan;
1302
1303        BT_DBG("%s hcon %p", hdev->name, conn);
1304
1305        if (test_bit(HCI_CONN_DROP, &conn->flags)) {
1306                BT_DBG("Refusing to create new hci_chan");
1307                return NULL;
1308        }
1309
1310        chan = kzalloc(sizeof(*chan), GFP_KERNEL);
1311        if (!chan)
1312                return NULL;
1313
1314        chan->conn = hci_conn_get(conn);
1315        skb_queue_head_init(&chan->data_q);
1316        chan->state = BT_CONNECTED;
1317
1318        list_add_rcu(&chan->list, &conn->chan_list);
1319
1320        return chan;
1321}
1322
1323void hci_chan_del(struct hci_chan *chan)
1324{
1325        struct hci_conn *conn = chan->conn;
1326        struct hci_dev *hdev = conn->hdev;
1327
1328        BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
1329
1330        list_del_rcu(&chan->list);
1331
1332        synchronize_rcu();
1333
1334        /* Prevent new hci_chan's to be created for this hci_conn */
1335        set_bit(HCI_CONN_DROP, &conn->flags);
1336
1337        hci_conn_put(conn);
1338
1339        skb_queue_purge(&chan->data_q);
1340        kfree(chan);
1341}
1342
1343void hci_chan_list_flush(struct hci_conn *conn)
1344{
1345        struct hci_chan *chan, *n;
1346
1347        BT_DBG("hcon %p", conn);
1348
1349        list_for_each_entry_safe(chan, n, &conn->chan_list, list)
1350                hci_chan_del(chan);
1351}
1352
1353static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
1354                                                 __u16 handle)
1355{
1356        struct hci_chan *hchan;
1357
1358        list_for_each_entry(hchan, &hcon->chan_list, list) {
1359                if (hchan->handle == handle)
1360                        return hchan;
1361        }
1362
1363        return NULL;
1364}
1365
1366struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1367{
1368        struct hci_conn_hash *h = &hdev->conn_hash;
1369        struct hci_conn *hcon;
1370        struct hci_chan *hchan = NULL;
1371
1372        rcu_read_lock();
1373
1374        list_for_each_entry_rcu(hcon, &h->list, list) {
1375                hchan = __hci_chan_lookup_handle(hcon, handle);
1376                if (hchan)
1377                        break;
1378        }
1379
1380        rcu_read_unlock();
1381
1382        return hchan;
1383}
1384