Bluetooth: RFCOMM - Fix info leak via getsockname()
[pandora-kernel.git] / net / bluetooth / hci_conn.c
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
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/a2mp.h>
32
33 static void hci_le_connect(struct hci_conn *conn)
34 {
35         struct hci_dev *hdev = conn->hdev;
36         struct hci_cp_le_create_conn cp;
37
38         conn->state = BT_CONNECT;
39         conn->out = true;
40         conn->link_mode |= HCI_LM_MASTER;
41         conn->sec_level = BT_SECURITY_LOW;
42
43         memset(&cp, 0, sizeof(cp));
44         cp.scan_interval = __constant_cpu_to_le16(0x0060);
45         cp.scan_window = __constant_cpu_to_le16(0x0030);
46         bacpy(&cp.peer_addr, &conn->dst);
47         cp.peer_addr_type = conn->dst_type;
48         cp.conn_interval_min = __constant_cpu_to_le16(0x0028);
49         cp.conn_interval_max = __constant_cpu_to_le16(0x0038);
50         cp.supervision_timeout = __constant_cpu_to_le16(0x002a);
51         cp.min_ce_len = __constant_cpu_to_le16(0x0000);
52         cp.max_ce_len = __constant_cpu_to_le16(0x0000);
53
54         hci_send_cmd(hdev, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
55 }
56
57 static void hci_le_connect_cancel(struct hci_conn *conn)
58 {
59         hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
60 }
61
62 void hci_acl_connect(struct hci_conn *conn)
63 {
64         struct hci_dev *hdev = conn->hdev;
65         struct inquiry_entry *ie;
66         struct hci_cp_create_conn cp;
67
68         BT_DBG("hcon %p", conn);
69
70         conn->state = BT_CONNECT;
71         conn->out = true;
72
73         conn->link_mode = HCI_LM_MASTER;
74
75         conn->attempt++;
76
77         conn->link_policy = hdev->link_policy;
78
79         memset(&cp, 0, sizeof(cp));
80         bacpy(&cp.bdaddr, &conn->dst);
81         cp.pscan_rep_mode = 0x02;
82
83         ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
84         if (ie) {
85                 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
86                         cp.pscan_rep_mode = ie->data.pscan_rep_mode;
87                         cp.pscan_mode     = ie->data.pscan_mode;
88                         cp.clock_offset   = ie->data.clock_offset |
89                                             __constant_cpu_to_le16(0x8000);
90                 }
91
92                 memcpy(conn->dev_class, ie->data.dev_class, 3);
93                 if (ie->data.ssp_mode > 0)
94                         set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
95         }
96
97         cp.pkt_type = cpu_to_le16(conn->pkt_type);
98         if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
99                 cp.role_switch = 0x01;
100         else
101                 cp.role_switch = 0x00;
102
103         hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
104 }
105
106 static void hci_acl_connect_cancel(struct hci_conn *conn)
107 {
108         struct hci_cp_create_conn_cancel cp;
109
110         BT_DBG("hcon %p", conn);
111
112         if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
113                 return;
114
115         bacpy(&cp.bdaddr, &conn->dst);
116         hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
117 }
118
119 void hci_acl_disconn(struct hci_conn *conn, __u8 reason)
120 {
121         struct hci_cp_disconnect cp;
122
123         BT_DBG("hcon %p", conn);
124
125         conn->state = BT_DISCONN;
126
127         cp.handle = cpu_to_le16(conn->handle);
128         cp.reason = reason;
129         hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
130 }
131
132 void hci_add_sco(struct hci_conn *conn, __u16 handle)
133 {
134         struct hci_dev *hdev = conn->hdev;
135         struct hci_cp_add_sco cp;
136
137         BT_DBG("hcon %p", conn);
138
139         conn->state = BT_CONNECT;
140         conn->out = true;
141
142         conn->attempt++;
143
144         cp.handle   = cpu_to_le16(handle);
145         cp.pkt_type = cpu_to_le16(conn->pkt_type);
146
147         hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
148 }
149
150 void hci_setup_sync(struct hci_conn *conn, __u16 handle)
151 {
152         struct hci_dev *hdev = conn->hdev;
153         struct hci_cp_setup_sync_conn cp;
154
155         BT_DBG("hcon %p", conn);
156
157         conn->state = BT_CONNECT;
158         conn->out = true;
159
160         conn->attempt++;
161
162         cp.handle   = cpu_to_le16(handle);
163         cp.pkt_type = cpu_to_le16(conn->pkt_type);
164
165         cp.tx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
166         cp.rx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
167         cp.max_latency    = __constant_cpu_to_le16(0xffff);
168         cp.voice_setting  = cpu_to_le16(hdev->voice_setting);
169         cp.retrans_effort = 0xff;
170
171         hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp);
172 }
173
174 void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
175                         u16 latency, u16 to_multiplier)
176 {
177         struct hci_cp_le_conn_update cp;
178         struct hci_dev *hdev = conn->hdev;
179
180         memset(&cp, 0, sizeof(cp));
181
182         cp.handle               = cpu_to_le16(conn->handle);
183         cp.conn_interval_min    = cpu_to_le16(min);
184         cp.conn_interval_max    = cpu_to_le16(max);
185         cp.conn_latency         = cpu_to_le16(latency);
186         cp.supervision_timeout  = cpu_to_le16(to_multiplier);
187         cp.min_ce_len           = __constant_cpu_to_le16(0x0001);
188         cp.max_ce_len           = __constant_cpu_to_le16(0x0001);
189
190         hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
191 }
192
193 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
194                       __u8 ltk[16])
195 {
196         struct hci_dev *hdev = conn->hdev;
197         struct hci_cp_le_start_enc cp;
198
199         BT_DBG("hcon %p", conn);
200
201         memset(&cp, 0, sizeof(cp));
202
203         cp.handle = cpu_to_le16(conn->handle);
204         memcpy(cp.ltk, ltk, sizeof(cp.ltk));
205         cp.ediv = ediv;
206         memcpy(cp.rand, rand, sizeof(cp.rand));
207
208         hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
209 }
210
211 /* Device _must_ be locked */
212 void hci_sco_setup(struct hci_conn *conn, __u8 status)
213 {
214         struct hci_conn *sco = conn->link;
215
216         if (!sco)
217                 return;
218
219         BT_DBG("hcon %p", conn);
220
221         if (!status) {
222                 if (lmp_esco_capable(conn->hdev))
223                         hci_setup_sync(sco, conn->handle);
224                 else
225                         hci_add_sco(sco, conn->handle);
226         } else {
227                 hci_proto_connect_cfm(sco, status);
228                 hci_conn_del(sco);
229         }
230 }
231
232 static void hci_conn_timeout(struct work_struct *work)
233 {
234         struct hci_conn *conn = container_of(work, struct hci_conn,
235                                              disc_work.work);
236         __u8 reason;
237
238         BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
239
240         if (atomic_read(&conn->refcnt))
241                 return;
242
243         switch (conn->state) {
244         case BT_CONNECT:
245         case BT_CONNECT2:
246                 if (conn->out) {
247                         if (conn->type == ACL_LINK)
248                                 hci_acl_connect_cancel(conn);
249                         else if (conn->type == LE_LINK)
250                                 hci_le_connect_cancel(conn);
251                 }
252                 break;
253         case BT_CONFIG:
254         case BT_CONNECTED:
255                 reason = hci_proto_disconn_ind(conn);
256                 hci_acl_disconn(conn, reason);
257                 break;
258         default:
259                 conn->state = BT_CLOSED;
260                 break;
261         }
262 }
263
264 /* Enter sniff mode */
265 static void hci_conn_enter_sniff_mode(struct hci_conn *conn)
266 {
267         struct hci_dev *hdev = conn->hdev;
268
269         BT_DBG("hcon %p mode %d", conn, conn->mode);
270
271         if (test_bit(HCI_RAW, &hdev->flags))
272                 return;
273
274         if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
275                 return;
276
277         if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
278                 return;
279
280         if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
281                 struct hci_cp_sniff_subrate cp;
282                 cp.handle             = cpu_to_le16(conn->handle);
283                 cp.max_latency        = __constant_cpu_to_le16(0);
284                 cp.min_remote_timeout = __constant_cpu_to_le16(0);
285                 cp.min_local_timeout  = __constant_cpu_to_le16(0);
286                 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
287         }
288
289         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
290                 struct hci_cp_sniff_mode cp;
291                 cp.handle       = cpu_to_le16(conn->handle);
292                 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
293                 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
294                 cp.attempt      = __constant_cpu_to_le16(4);
295                 cp.timeout      = __constant_cpu_to_le16(1);
296                 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
297         }
298 }
299
300 static void hci_conn_idle(unsigned long arg)
301 {
302         struct hci_conn *conn = (void *) arg;
303
304         BT_DBG("hcon %p mode %d", conn, conn->mode);
305
306         hci_conn_enter_sniff_mode(conn);
307 }
308
309 static void hci_conn_auto_accept(unsigned long arg)
310 {
311         struct hci_conn *conn = (void *) arg;
312         struct hci_dev *hdev = conn->hdev;
313
314         hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
315                      &conn->dst);
316 }
317
318 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
319 {
320         struct hci_conn *conn;
321
322         BT_DBG("%s dst %s", hdev->name, batostr(dst));
323
324         conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL);
325         if (!conn)
326                 return NULL;
327
328         bacpy(&conn->dst, dst);
329         conn->hdev  = hdev;
330         conn->type  = type;
331         conn->mode  = HCI_CM_ACTIVE;
332         conn->state = BT_OPEN;
333         conn->auth_type = HCI_AT_GENERAL_BONDING;
334         conn->io_capability = hdev->io_capability;
335         conn->remote_auth = 0xff;
336         conn->key_type = 0xff;
337
338         set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
339         conn->disc_timeout = HCI_DISCONN_TIMEOUT;
340
341         switch (type) {
342         case ACL_LINK:
343                 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
344                 break;
345         case SCO_LINK:
346                 if (lmp_esco_capable(hdev))
347                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
348                                         (hdev->esco_type & EDR_ESCO_MASK);
349                 else
350                         conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
351                 break;
352         case ESCO_LINK:
353                 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
354                 break;
355         }
356
357         skb_queue_head_init(&conn->data_q);
358
359         INIT_LIST_HEAD(&conn->chan_list);
360
361         INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
362         setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
363         setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
364                     (unsigned long) conn);
365
366         atomic_set(&conn->refcnt, 0);
367
368         hci_dev_hold(hdev);
369
370         hci_conn_hash_add(hdev, conn);
371         if (hdev->notify)
372                 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
373
374         atomic_set(&conn->devref, 0);
375
376         hci_conn_init_sysfs(conn);
377
378         return conn;
379 }
380
381 int hci_conn_del(struct hci_conn *conn)
382 {
383         struct hci_dev *hdev = conn->hdev;
384
385         BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
386
387         del_timer(&conn->idle_timer);
388
389         cancel_delayed_work_sync(&conn->disc_work);
390
391         del_timer(&conn->auto_accept_timer);
392
393         if (conn->type == ACL_LINK) {
394                 struct hci_conn *sco = conn->link;
395                 if (sco)
396                         sco->link = NULL;
397
398                 /* Unacked frames */
399                 hdev->acl_cnt += conn->sent;
400         } else if (conn->type == LE_LINK) {
401                 if (hdev->le_pkts)
402                         hdev->le_cnt += conn->sent;
403                 else
404                         hdev->acl_cnt += conn->sent;
405         } else {
406                 struct hci_conn *acl = conn->link;
407                 if (acl) {
408                         acl->link = NULL;
409                         hci_conn_put(acl);
410                 }
411         }
412
413         hci_chan_list_flush(conn);
414
415         if (conn->amp_mgr)
416                 amp_mgr_put(conn->amp_mgr);
417
418         hci_conn_hash_del(hdev, conn);
419         if (hdev->notify)
420                 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
421
422         skb_queue_purge(&conn->data_q);
423
424         hci_conn_put_device(conn);
425
426         hci_dev_put(hdev);
427
428         if (conn->handle == 0)
429                 kfree(conn);
430
431         return 0;
432 }
433
434 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
435 {
436         int use_src = bacmp(src, BDADDR_ANY);
437         struct hci_dev *hdev = NULL, *d;
438
439         BT_DBG("%s -> %s", batostr(src), batostr(dst));
440
441         read_lock(&hci_dev_list_lock);
442
443         list_for_each_entry(d, &hci_dev_list, list) {
444                 if (!test_bit(HCI_UP, &d->flags) ||
445                     test_bit(HCI_RAW, &d->flags) ||
446                     d->dev_type != HCI_BREDR)
447                         continue;
448
449                 /* Simple routing:
450                  *   No source address - find interface with bdaddr != dst
451                  *   Source address    - find interface with bdaddr == src
452                  */
453
454                 if (use_src) {
455                         if (!bacmp(&d->bdaddr, src)) {
456                                 hdev = d; break;
457                         }
458                 } else {
459                         if (bacmp(&d->bdaddr, dst)) {
460                                 hdev = d; break;
461                         }
462                 }
463         }
464
465         if (hdev)
466                 hdev = hci_dev_hold(hdev);
467
468         read_unlock(&hci_dev_list_lock);
469         return hdev;
470 }
471 EXPORT_SYMBOL(hci_get_route);
472
473 /* Create SCO, ACL or LE connection.
474  * Device _must_ be locked */
475 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
476                              __u8 dst_type, __u8 sec_level, __u8 auth_type)
477 {
478         struct hci_conn *acl;
479         struct hci_conn *sco;
480         struct hci_conn *le;
481
482         BT_DBG("%s dst %s", hdev->name, batostr(dst));
483
484         if (type == LE_LINK) {
485                 le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
486                 if (!le) {
487                         le = hci_conn_hash_lookup_state(hdev, LE_LINK,
488                                                         BT_CONNECT);
489                         if (le)
490                                 return ERR_PTR(-EBUSY);
491
492                         le = hci_conn_add(hdev, LE_LINK, dst);
493                         if (!le)
494                                 return ERR_PTR(-ENOMEM);
495
496                         le->dst_type = bdaddr_to_le(dst_type);
497                         hci_le_connect(le);
498                 }
499
500                 le->pending_sec_level = sec_level;
501                 le->auth_type = auth_type;
502
503                 hci_conn_hold(le);
504
505                 return le;
506         }
507
508         acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
509         if (!acl) {
510                 acl = hci_conn_add(hdev, ACL_LINK, dst);
511                 if (!acl)
512                         return ERR_PTR(-ENOMEM);
513         }
514
515         hci_conn_hold(acl);
516
517         if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
518                 acl->sec_level = BT_SECURITY_LOW;
519                 acl->pending_sec_level = sec_level;
520                 acl->auth_type = auth_type;
521                 hci_acl_connect(acl);
522         }
523
524         if (type == ACL_LINK)
525                 return acl;
526
527         sco = hci_conn_hash_lookup_ba(hdev, type, dst);
528         if (!sco) {
529                 sco = hci_conn_add(hdev, type, dst);
530                 if (!sco) {
531                         hci_conn_put(acl);
532                         return ERR_PTR(-ENOMEM);
533                 }
534         }
535
536         acl->link = sco;
537         sco->link = acl;
538
539         hci_conn_hold(sco);
540
541         if (acl->state == BT_CONNECTED &&
542             (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
543                 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
544                 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
545
546                 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
547                         /* defer SCO setup until mode change completed */
548                         set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
549                         return sco;
550                 }
551
552                 hci_sco_setup(acl, 0x00);
553         }
554
555         return sco;
556 }
557
558 /* Check link security requirement */
559 int hci_conn_check_link_mode(struct hci_conn *conn)
560 {
561         BT_DBG("hcon %p", conn);
562
563         if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
564                 return 0;
565
566         return 1;
567 }
568
569 /* Authenticate remote device */
570 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
571 {
572         BT_DBG("hcon %p", conn);
573
574         if (conn->pending_sec_level > sec_level)
575                 sec_level = conn->pending_sec_level;
576
577         if (sec_level > conn->sec_level)
578                 conn->pending_sec_level = sec_level;
579         else if (conn->link_mode & HCI_LM_AUTH)
580                 return 1;
581
582         /* Make sure we preserve an existing MITM requirement*/
583         auth_type |= (conn->auth_type & 0x01);
584
585         conn->auth_type = auth_type;
586
587         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
588                 struct hci_cp_auth_requested cp;
589
590                 /* encrypt must be pending if auth is also pending */
591                 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
592
593                 cp.handle = cpu_to_le16(conn->handle);
594                 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
595                              sizeof(cp), &cp);
596                 if (conn->key_type != 0xff)
597                         set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
598         }
599
600         return 0;
601 }
602
603 /* Encrypt the the link */
604 static void hci_conn_encrypt(struct hci_conn *conn)
605 {
606         BT_DBG("hcon %p", conn);
607
608         if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
609                 struct hci_cp_set_conn_encrypt cp;
610                 cp.handle  = cpu_to_le16(conn->handle);
611                 cp.encrypt = 0x01;
612                 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
613                              &cp);
614         }
615 }
616
617 /* Enable security */
618 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
619 {
620         BT_DBG("hcon %p", conn);
621
622         /* For sdp we don't need the link key. */
623         if (sec_level == BT_SECURITY_SDP)
624                 return 1;
625
626         /* For non 2.1 devices and low security level we don't need the link
627            key. */
628         if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
629                 return 1;
630
631         /* For other security levels we need the link key. */
632         if (!(conn->link_mode & HCI_LM_AUTH))
633                 goto auth;
634
635         /* An authenticated combination key has sufficient security for any
636            security level. */
637         if (conn->key_type == HCI_LK_AUTH_COMBINATION)
638                 goto encrypt;
639
640         /* An unauthenticated combination key has sufficient security for
641            security level 1 and 2. */
642         if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
643             (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
644                 goto encrypt;
645
646         /* A combination key has always sufficient security for the security
647            levels 1 or 2. High security level requires the combination key
648            is generated using maximum PIN code length (16).
649            For pre 2.1 units. */
650         if (conn->key_type == HCI_LK_COMBINATION &&
651             (sec_level != BT_SECURITY_HIGH || conn->pin_length == 16))
652                 goto encrypt;
653
654 auth:
655         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
656                 return 0;
657
658         if (!hci_conn_auth(conn, sec_level, auth_type))
659                 return 0;
660
661 encrypt:
662         if (conn->link_mode & HCI_LM_ENCRYPT)
663                 return 1;
664
665         hci_conn_encrypt(conn);
666         return 0;
667 }
668 EXPORT_SYMBOL(hci_conn_security);
669
670 /* Check secure link requirement */
671 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
672 {
673         BT_DBG("hcon %p", conn);
674
675         if (sec_level != BT_SECURITY_HIGH)
676                 return 1; /* Accept if non-secure is required */
677
678         if (conn->sec_level == BT_SECURITY_HIGH)
679                 return 1;
680
681         return 0; /* Reject not secure link */
682 }
683 EXPORT_SYMBOL(hci_conn_check_secure);
684
685 /* Change link key */
686 int hci_conn_change_link_key(struct hci_conn *conn)
687 {
688         BT_DBG("hcon %p", conn);
689
690         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
691                 struct hci_cp_change_conn_link_key cp;
692                 cp.handle = cpu_to_le16(conn->handle);
693                 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
694                              sizeof(cp), &cp);
695         }
696
697         return 0;
698 }
699
700 /* Switch role */
701 int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
702 {
703         BT_DBG("hcon %p", conn);
704
705         if (!role && conn->link_mode & HCI_LM_MASTER)
706                 return 1;
707
708         if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
709                 struct hci_cp_switch_role cp;
710                 bacpy(&cp.bdaddr, &conn->dst);
711                 cp.role = role;
712                 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
713         }
714
715         return 0;
716 }
717 EXPORT_SYMBOL(hci_conn_switch_role);
718
719 /* Enter active mode */
720 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
721 {
722         struct hci_dev *hdev = conn->hdev;
723
724         BT_DBG("hcon %p mode %d", conn, conn->mode);
725
726         if (test_bit(HCI_RAW, &hdev->flags))
727                 return;
728
729         if (conn->mode != HCI_CM_SNIFF)
730                 goto timer;
731
732         if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
733                 goto timer;
734
735         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
736                 struct hci_cp_exit_sniff_mode cp;
737                 cp.handle = cpu_to_le16(conn->handle);
738                 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
739         }
740
741 timer:
742         if (hdev->idle_timeout > 0)
743                 mod_timer(&conn->idle_timer,
744                           jiffies + msecs_to_jiffies(hdev->idle_timeout));
745 }
746
747 /* Drop all connection on the device */
748 void hci_conn_hash_flush(struct hci_dev *hdev)
749 {
750         struct hci_conn_hash *h = &hdev->conn_hash;
751         struct hci_conn *c, *n;
752
753         BT_DBG("hdev %s", hdev->name);
754
755         list_for_each_entry_safe(c, n, &h->list, list) {
756                 c->state = BT_CLOSED;
757
758                 hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
759                 hci_conn_del(c);
760         }
761 }
762
763 /* Check pending connect attempts */
764 void hci_conn_check_pending(struct hci_dev *hdev)
765 {
766         struct hci_conn *conn;
767
768         BT_DBG("hdev %s", hdev->name);
769
770         hci_dev_lock(hdev);
771
772         conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
773         if (conn)
774                 hci_acl_connect(conn);
775
776         hci_dev_unlock(hdev);
777 }
778
779 void hci_conn_hold_device(struct hci_conn *conn)
780 {
781         atomic_inc(&conn->devref);
782 }
783 EXPORT_SYMBOL(hci_conn_hold_device);
784
785 void hci_conn_put_device(struct hci_conn *conn)
786 {
787         if (atomic_dec_and_test(&conn->devref))
788                 hci_conn_del_sysfs(conn);
789 }
790 EXPORT_SYMBOL(hci_conn_put_device);
791
792 int hci_get_conn_list(void __user *arg)
793 {
794         struct hci_conn *c;
795         struct hci_conn_list_req req, *cl;
796         struct hci_conn_info *ci;
797         struct hci_dev *hdev;
798         int n = 0, size, err;
799
800         if (copy_from_user(&req, arg, sizeof(req)))
801                 return -EFAULT;
802
803         if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
804                 return -EINVAL;
805
806         size = sizeof(req) + req.conn_num * sizeof(*ci);
807
808         cl = kmalloc(size, GFP_KERNEL);
809         if (!cl)
810                 return -ENOMEM;
811
812         hdev = hci_dev_get(req.dev_id);
813         if (!hdev) {
814                 kfree(cl);
815                 return -ENODEV;
816         }
817
818         ci = cl->conn_info;
819
820         hci_dev_lock(hdev);
821         list_for_each_entry(c, &hdev->conn_hash.list, list) {
822                 bacpy(&(ci + n)->bdaddr, &c->dst);
823                 (ci + n)->handle = c->handle;
824                 (ci + n)->type  = c->type;
825                 (ci + n)->out   = c->out;
826                 (ci + n)->state = c->state;
827                 (ci + n)->link_mode = c->link_mode;
828                 if (++n >= req.conn_num)
829                         break;
830         }
831         hci_dev_unlock(hdev);
832
833         cl->dev_id = hdev->id;
834         cl->conn_num = n;
835         size = sizeof(req) + n * sizeof(*ci);
836
837         hci_dev_put(hdev);
838
839         err = copy_to_user(arg, cl, size);
840         kfree(cl);
841
842         return err ? -EFAULT : 0;
843 }
844
845 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
846 {
847         struct hci_conn_info_req req;
848         struct hci_conn_info ci;
849         struct hci_conn *conn;
850         char __user *ptr = arg + sizeof(req);
851
852         if (copy_from_user(&req, arg, sizeof(req)))
853                 return -EFAULT;
854
855         hci_dev_lock(hdev);
856         conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
857         if (conn) {
858                 bacpy(&ci.bdaddr, &conn->dst);
859                 ci.handle = conn->handle;
860                 ci.type  = conn->type;
861                 ci.out   = conn->out;
862                 ci.state = conn->state;
863                 ci.link_mode = conn->link_mode;
864         }
865         hci_dev_unlock(hdev);
866
867         if (!conn)
868                 return -ENOENT;
869
870         return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
871 }
872
873 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
874 {
875         struct hci_auth_info_req req;
876         struct hci_conn *conn;
877
878         if (copy_from_user(&req, arg, sizeof(req)))
879                 return -EFAULT;
880
881         hci_dev_lock(hdev);
882         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
883         if (conn)
884                 req.type = conn->auth_type;
885         hci_dev_unlock(hdev);
886
887         if (!conn)
888                 return -ENOENT;
889
890         return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
891 }
892
893 struct hci_chan *hci_chan_create(struct hci_conn *conn)
894 {
895         struct hci_dev *hdev = conn->hdev;
896         struct hci_chan *chan;
897
898         BT_DBG("%s hcon %p", hdev->name, conn);
899
900         chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
901         if (!chan)
902                 return NULL;
903
904         chan->conn = conn;
905         skb_queue_head_init(&chan->data_q);
906
907         list_add_rcu(&chan->list, &conn->chan_list);
908
909         return chan;
910 }
911
912 int hci_chan_del(struct hci_chan *chan)
913 {
914         struct hci_conn *conn = chan->conn;
915         struct hci_dev *hdev = conn->hdev;
916
917         BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
918
919         list_del_rcu(&chan->list);
920
921         synchronize_rcu();
922
923         skb_queue_purge(&chan->data_q);
924         kfree(chan);
925
926         return 0;
927 }
928
929 void hci_chan_list_flush(struct hci_conn *conn)
930 {
931         struct hci_chan *chan, *n;
932
933         BT_DBG("hcon %p", conn);
934
935         list_for_each_entry_safe(chan, n, &conn->chan_list, list)
936                 hci_chan_del(chan);
937 }