Bluetooth: Fix check for connection encryption
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / bluetooth / hci_conn.c
CommitLineData
8e87d142 1/*
1da177e4 2 BlueZ - Bluetooth protocol stack for Linux
2d0a0346 3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
1da177e4
LT
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
8e87d142
YH
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
1da177e4
LT
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
8e87d142
YH
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
1da177e4
LT
22 SOFTWARE IS DISCLAIMED.
23*/
24
25/* Bluetooth HCI connection handling. */
26
8c520a59 27#include <linux/export.h>
1da177e4
LT
28
29#include <net/bluetooth/bluetooth.h>
30#include <net/bluetooth/hci_core.h>
9740e49d 31#include <net/bluetooth/a2mp.h>
d8343f12 32#include <net/bluetooth/smp.h>
1da177e4 33
1aef8669 34static void hci_le_create_connection(struct hci_conn *conn)
fcd89c09
VT
35{
36 struct hci_dev *hdev = conn->hdev;
37 struct hci_cp_le_create_conn cp;
38
39 conn->state = BT_CONNECT;
a0c808b3 40 conn->out = true;
b92a6223 41 conn->link_mode |= HCI_LM_MASTER;
7b5c0d52 42 conn->sec_level = BT_SECURITY_LOW;
fcd89c09
VT
43
44 memset(&cp, 0, sizeof(cp));
82781e63
AE
45 cp.scan_interval = __constant_cpu_to_le16(0x0060);
46 cp.scan_window = __constant_cpu_to_le16(0x0030);
fcd89c09 47 bacpy(&cp.peer_addr, &conn->dst);
6d3ce0e7 48 cp.peer_addr_type = conn->dst_type;
82781e63
AE
49 cp.conn_interval_min = __constant_cpu_to_le16(0x0028);
50 cp.conn_interval_max = __constant_cpu_to_le16(0x0038);
51 cp.supervision_timeout = __constant_cpu_to_le16(0x002a);
52 cp.min_ce_len = __constant_cpu_to_le16(0x0000);
53 cp.max_ce_len = __constant_cpu_to_le16(0x0000);
fcd89c09
VT
54
55 hci_send_cmd(hdev, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
56}
57
1aef8669 58static void hci_le_create_connection_cancel(struct hci_conn *conn)
fcd89c09
VT
59{
60 hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
61}
62
1aef8669 63static void hci_acl_create_connection(struct hci_conn *conn)
1da177e4
LT
64{
65 struct hci_dev *hdev = conn->hdev;
66 struct inquiry_entry *ie;
67 struct hci_cp_create_conn cp;
68
42d2d87c 69 BT_DBG("hcon %p", conn);
1da177e4
LT
70
71 conn->state = BT_CONNECT;
a0c808b3 72 conn->out = true;
a8746417 73
1da177e4
LT
74 conn->link_mode = HCI_LM_MASTER;
75
4c67bc74
MH
76 conn->attempt++;
77
e4e8e37c
MH
78 conn->link_policy = hdev->link_policy;
79
1da177e4
LT
80 memset(&cp, 0, sizeof(cp));
81 bacpy(&cp.bdaddr, &conn->dst);
82 cp.pscan_rep_mode = 0x02;
83
70f23020
AE
84 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
85 if (ie) {
41a96212
MH
86 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
87 cp.pscan_rep_mode = ie->data.pscan_rep_mode;
88 cp.pscan_mode = ie->data.pscan_mode;
89 cp.clock_offset = ie->data.clock_offset |
82781e63 90 __constant_cpu_to_le16(0x8000);
41a96212
MH
91 }
92
1da177e4 93 memcpy(conn->dev_class, ie->data.dev_class, 3);
58a681ef
JH
94 if (ie->data.ssp_mode > 0)
95 set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
1da177e4
LT
96 }
97
a8746417 98 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1da177e4 99 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
b6a0dc82 100 cp.role_switch = 0x01;
1da177e4 101 else
b6a0dc82 102 cp.role_switch = 0x00;
4c67bc74 103
a9de9248 104 hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
1da177e4
LT
105}
106
1aef8669 107static void hci_acl_create_connection_cancel(struct hci_conn *conn)
6ac59344
MH
108{
109 struct hci_cp_create_conn_cancel cp;
110
38b3fef1 111 BT_DBG("hcon %p", conn);
6ac59344 112
d095c1eb 113 if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
6ac59344
MH
114 return;
115
116 bacpy(&cp.bdaddr, &conn->dst);
a9de9248 117 hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
6ac59344
MH
118}
119
93796fa6
CT
120static void hci_reject_sco(struct hci_conn *conn)
121{
122 struct hci_cp_reject_sync_conn_req cp;
123
124 cp.reason = HCI_ERROR_REMOTE_USER_TERM;
125 bacpy(&cp.bdaddr, &conn->dst);
126
127 hci_send_cmd(conn->hdev, HCI_OP_REJECT_SYNC_CONN_REQ, sizeof(cp), &cp);
128}
129
bed71748 130void hci_disconnect(struct hci_conn *conn, __u8 reason)
1da177e4
LT
131{
132 struct hci_cp_disconnect cp;
133
38b3fef1 134 BT_DBG("hcon %p", conn);
1da177e4
LT
135
136 conn->state = BT_DISCONN;
137
aca3192c 138 cp.handle = cpu_to_le16(conn->handle);
1da177e4 139 cp.reason = reason;
a9de9248 140 hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
1da177e4
LT
141}
142
53502d69
AE
143static void hci_amp_disconn(struct hci_conn *conn, __u8 reason)
144{
145 struct hci_cp_disconn_phy_link cp;
146
147 BT_DBG("hcon %p", conn);
148
149 conn->state = BT_DISCONN;
150
151 cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
152 cp.reason = reason;
153 hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
154 sizeof(cp), &cp);
155}
156
57f5d0d1 157static void hci_add_sco(struct hci_conn *conn, __u16 handle)
1da177e4
LT
158{
159 struct hci_dev *hdev = conn->hdev;
160 struct hci_cp_add_sco cp;
161
38b3fef1 162 BT_DBG("hcon %p", conn);
1da177e4
LT
163
164 conn->state = BT_CONNECT;
a0c808b3 165 conn->out = true;
1da177e4 166
efc7688b
MH
167 conn->attempt++;
168
aca3192c 169 cp.handle = cpu_to_le16(handle);
a8746417 170 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1da177e4 171
a9de9248 172 hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
1da177e4
LT
173}
174
b6a0dc82
MH
175void hci_setup_sync(struct hci_conn *conn, __u16 handle)
176{
177 struct hci_dev *hdev = conn->hdev;
178 struct hci_cp_setup_sync_conn cp;
179
38b3fef1 180 BT_DBG("hcon %p", conn);
b6a0dc82
MH
181
182 conn->state = BT_CONNECT;
a0c808b3 183 conn->out = true;
b6a0dc82 184
efc7688b
MH
185 conn->attempt++;
186
b6a0dc82 187 cp.handle = cpu_to_le16(handle);
a8746417 188 cp.pkt_type = cpu_to_le16(conn->pkt_type);
b6a0dc82 189
82781e63
AE
190 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
191 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
192 cp.max_latency = __constant_cpu_to_le16(0xffff);
b6a0dc82
MH
193 cp.voice_setting = cpu_to_le16(hdev->voice_setting);
194 cp.retrans_effort = 0xff;
195
196 hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp);
197}
198
2ce603eb 199void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
5974e4c4 200 u16 latency, u16 to_multiplier)
2ce603eb
CT
201{
202 struct hci_cp_le_conn_update cp;
203 struct hci_dev *hdev = conn->hdev;
204
205 memset(&cp, 0, sizeof(cp));
206
207 cp.handle = cpu_to_le16(conn->handle);
208 cp.conn_interval_min = cpu_to_le16(min);
209 cp.conn_interval_max = cpu_to_le16(max);
210 cp.conn_latency = cpu_to_le16(latency);
211 cp.supervision_timeout = cpu_to_le16(to_multiplier);
82781e63
AE
212 cp.min_ce_len = __constant_cpu_to_le16(0x0001);
213 cp.max_ce_len = __constant_cpu_to_le16(0x0001);
2ce603eb
CT
214
215 hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
216}
2ce603eb 217
a7a595f6 218void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
5974e4c4 219 __u8 ltk[16])
a7a595f6
VCG
220{
221 struct hci_dev *hdev = conn->hdev;
222 struct hci_cp_le_start_enc cp;
223
38b3fef1 224 BT_DBG("hcon %p", conn);
a7a595f6
VCG
225
226 memset(&cp, 0, sizeof(cp));
227
228 cp.handle = cpu_to_le16(conn->handle);
229 memcpy(cp.ltk, ltk, sizeof(cp.ltk));
230 cp.ediv = ediv;
51beabdf 231 memcpy(cp.rand, rand, sizeof(cp.rand));
a7a595f6
VCG
232
233 hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
234}
a7a595f6 235
e73439d8
MH
236/* Device _must_ be locked */
237void hci_sco_setup(struct hci_conn *conn, __u8 status)
238{
239 struct hci_conn *sco = conn->link;
240
e73439d8
MH
241 if (!sco)
242 return;
243
38b3fef1
AE
244 BT_DBG("hcon %p", conn);
245
e73439d8
MH
246 if (!status) {
247 if (lmp_esco_capable(conn->hdev))
248 hci_setup_sync(sco, conn->handle);
249 else
250 hci_add_sco(sco, conn->handle);
251 } else {
252 hci_proto_connect_cfm(sco, status);
253 hci_conn_del(sco);
254 }
255}
256
53502d69
AE
257static void hci_conn_disconnect(struct hci_conn *conn)
258{
259 __u8 reason = hci_proto_disconn_ind(conn);
260
261 switch (conn->type) {
53502d69
AE
262 case AMP_LINK:
263 hci_amp_disconn(conn, reason);
264 break;
4c02e2d4 265 default:
bed71748 266 hci_disconnect(conn, reason);
4c02e2d4 267 break;
53502d69
AE
268 }
269}
270
19c40e3b 271static void hci_conn_timeout(struct work_struct *work)
1da177e4 272{
19c40e3b 273 struct hci_conn *conn = container_of(work, struct hci_conn,
5974e4c4 274 disc_work.work);
1da177e4 275
38b3fef1 276 BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
1da177e4
LT
277
278 if (atomic_read(&conn->refcnt))
279 return;
280
6ac59344
MH
281 switch (conn->state) {
282 case BT_CONNECT:
769be974 283 case BT_CONNECT2:
fcd89c09
VT
284 if (conn->out) {
285 if (conn->type == ACL_LINK)
1aef8669 286 hci_acl_create_connection_cancel(conn);
fcd89c09 287 else if (conn->type == LE_LINK)
1aef8669 288 hci_le_create_connection_cancel(conn);
93796fa6
CT
289 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
290 hci_reject_sco(conn);
fcd89c09 291 }
6ac59344 292 break;
769be974 293 case BT_CONFIG:
8e87d142 294 case BT_CONNECTED:
53502d69 295 hci_conn_disconnect(conn);
6ac59344
MH
296 break;
297 default:
1da177e4 298 conn->state = BT_CLOSED;
6ac59344
MH
299 break;
300 }
1da177e4
LT
301}
302
416dc94b
GP
303/* Enter sniff mode */
304static void hci_conn_enter_sniff_mode(struct hci_conn *conn)
305{
306 struct hci_dev *hdev = conn->hdev;
307
38b3fef1 308 BT_DBG("hcon %p mode %d", conn, conn->mode);
416dc94b
GP
309
310 if (test_bit(HCI_RAW, &hdev->flags))
311 return;
312
313 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
314 return;
315
316 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
317 return;
318
319 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
320 struct hci_cp_sniff_subrate cp;
321 cp.handle = cpu_to_le16(conn->handle);
82781e63
AE
322 cp.max_latency = __constant_cpu_to_le16(0);
323 cp.min_remote_timeout = __constant_cpu_to_le16(0);
324 cp.min_local_timeout = __constant_cpu_to_le16(0);
416dc94b
GP
325 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
326 }
327
51a8efd7 328 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
416dc94b
GP
329 struct hci_cp_sniff_mode cp;
330 cp.handle = cpu_to_le16(conn->handle);
331 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
332 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
82781e63
AE
333 cp.attempt = __constant_cpu_to_le16(4);
334 cp.timeout = __constant_cpu_to_le16(1);
416dc94b
GP
335 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
336 }
337}
338
04837f64 339static void hci_conn_idle(unsigned long arg)
1da177e4 340{
04837f64
MH
341 struct hci_conn *conn = (void *) arg;
342
38b3fef1 343 BT_DBG("hcon %p mode %d", conn, conn->mode);
04837f64
MH
344
345 hci_conn_enter_sniff_mode(conn);
1da177e4
LT
346}
347
9f61656a
JH
348static void hci_conn_auto_accept(unsigned long arg)
349{
350 struct hci_conn *conn = (void *) arg;
351 struct hci_dev *hdev = conn->hdev;
352
9f61656a 353 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
5974e4c4 354 &conn->dst);
9f61656a
JH
355}
356
1da177e4
LT
357struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
358{
359 struct hci_conn *conn;
360
6ed93dc6 361 BT_DBG("%s dst %pMR", hdev->name, dst);
1da177e4 362
cb601d7e 363 conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL);
04837f64 364 if (!conn)
1da177e4 365 return NULL;
1da177e4
LT
366
367 bacpy(&conn->dst, dst);
a8746417
MH
368 conn->hdev = hdev;
369 conn->type = type;
370 conn->mode = HCI_CM_ACTIVE;
371 conn->state = BT_OPEN;
93f19c9f 372 conn->auth_type = HCI_AT_GENERAL_BONDING;
17fa4b9d 373 conn->io_capability = hdev->io_capability;
a9583556 374 conn->remote_auth = 0xff;
13d39315 375 conn->key_type = 0xff;
1da177e4 376
58a681ef 377 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
052b30b0 378 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
04837f64 379
a8746417
MH
380 switch (type) {
381 case ACL_LINK:
382 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
383 break;
384 case SCO_LINK:
385 if (lmp_esco_capable(hdev))
efc7688b
MH
386 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
387 (hdev->esco_type & EDR_ESCO_MASK);
a8746417
MH
388 else
389 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
390 break;
391 case ESCO_LINK:
efc7688b 392 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
a8746417
MH
393 break;
394 }
395
1da177e4 396 skb_queue_head_init(&conn->data_q);
04837f64 397
70c1f20b 398 INIT_LIST_HEAD(&conn->chan_list);
73d80deb 399
19c40e3b 400 INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
b24b8a24 401 setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
9f61656a 402 setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
5974e4c4 403 (unsigned long) conn);
1da177e4
LT
404
405 atomic_set(&conn->refcnt, 0);
406
407 hci_dev_hold(hdev);
408
1da177e4 409 hci_conn_hash_add(hdev, conn);
3c54711c 410 if (hdev->notify)
1da177e4
LT
411 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
412
a67e899c
MH
413 hci_conn_init_sysfs(conn);
414
1da177e4
LT
415 return conn;
416}
417
418int hci_conn_del(struct hci_conn *conn)
419{
420 struct hci_dev *hdev = conn->hdev;
421
38b3fef1 422 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
1da177e4 423
04837f64
MH
424 del_timer(&conn->idle_timer);
425
19c40e3b 426 cancel_delayed_work_sync(&conn->disc_work);
1da177e4 427
9f61656a
JH
428 del_timer(&conn->auto_accept_timer);
429
5b7f9909 430 if (conn->type == ACL_LINK) {
1da177e4
LT
431 struct hci_conn *sco = conn->link;
432 if (sco)
433 sco->link = NULL;
434
435 /* Unacked frames */
436 hdev->acl_cnt += conn->sent;
6ed58ec5
VT
437 } else if (conn->type == LE_LINK) {
438 if (hdev->le_pkts)
439 hdev->le_cnt += conn->sent;
440 else
441 hdev->acl_cnt += conn->sent;
5b7f9909
MH
442 } else {
443 struct hci_conn *acl = conn->link;
444 if (acl) {
445 acl->link = NULL;
76a68ba0 446 hci_conn_drop(acl);
5b7f9909 447 }
1da177e4
LT
448 }
449
2c33c06a 450 hci_chan_list_flush(conn);
73d80deb 451
9740e49d
AE
452 if (conn->amp_mgr)
453 amp_mgr_put(conn->amp_mgr);
454
1da177e4 455 hci_conn_hash_del(hdev, conn);
3c54711c 456 if (hdev->notify)
1da177e4 457 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
7d0db0a3 458
1da177e4 459 skb_queue_purge(&conn->data_q);
1da177e4 460
fc225c3f 461 hci_conn_del_sysfs(conn);
2ae9a6be 462
384943ec
MH
463 hci_dev_put(hdev);
464
8d12356f 465 hci_conn_put(conn);
163f4dab 466
1da177e4
LT
467 return 0;
468}
469
470struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
471{
472 int use_src = bacmp(src, BDADDR_ANY);
8035ded4 473 struct hci_dev *hdev = NULL, *d;
1da177e4 474
6ed93dc6 475 BT_DBG("%pMR -> %pMR", src, dst);
1da177e4 476
f20d09d5 477 read_lock(&hci_dev_list_lock);
1da177e4 478
8035ded4 479 list_for_each_entry(d, &hci_dev_list, list) {
8fc9ced3 480 if (!test_bit(HCI_UP, &d->flags) ||
d300fa9b
AE
481 test_bit(HCI_RAW, &d->flags) ||
482 d->dev_type != HCI_BREDR)
1da177e4
LT
483 continue;
484
8e87d142 485 /* Simple routing:
1da177e4
LT
486 * No source address - find interface with bdaddr != dst
487 * Source address - find interface with bdaddr == src
488 */
489
490 if (use_src) {
491 if (!bacmp(&d->bdaddr, src)) {
492 hdev = d; break;
493 }
494 } else {
495 if (bacmp(&d->bdaddr, dst)) {
496 hdev = d; break;
497 }
498 }
499 }
500
501 if (hdev)
502 hdev = hci_dev_hold(hdev);
503
f20d09d5 504 read_unlock(&hci_dev_list_lock);
1da177e4
LT
505 return hdev;
506}
507EXPORT_SYMBOL(hci_get_route);
508
d04aef4c
VCG
509static struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
510 u8 dst_type, u8 sec_level, u8 auth_type)
1da177e4 511{
fcd89c09 512 struct hci_conn *le;
1da177e4 513
f1550478
JH
514 if (test_bit(HCI_LE_PERIPHERAL, &hdev->flags))
515 return ERR_PTR(-ENOTSUPP);
516
d04aef4c
VCG
517 le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
518 if (!le) {
519 le = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
520 if (le)
521 return ERR_PTR(-EBUSY);
1da177e4 522
d04aef4c
VCG
523 le = hci_conn_add(hdev, LE_LINK, dst);
524 if (!le)
525 return ERR_PTR(-ENOMEM);
dfc94dbd 526
d04aef4c
VCG
527 le->dst_type = bdaddr_to_le(dst_type);
528 hci_le_create_connection(le);
529 }
9f0caeb1 530
d04aef4c
VCG
531 le->pending_sec_level = sec_level;
532 le->auth_type = auth_type;
eda42b50 533
d04aef4c 534 hci_conn_hold(le);
fcd89c09 535
d04aef4c
VCG
536 return le;
537}
fcd89c09 538
db474275
VCG
539static struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
540 u8 sec_level, u8 auth_type)
1da177e4
LT
541{
542 struct hci_conn *acl;
fcd89c09 543
70f23020
AE
544 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
545 if (!acl) {
546 acl = hci_conn_add(hdev, ACL_LINK, dst);
547 if (!acl)
48c7aba9 548 return ERR_PTR(-ENOMEM);
1da177e4
LT
549 }
550
551 hci_conn_hold(acl);
552
09ab6f4c 553 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
765c2a96
JH
554 acl->sec_level = BT_SECURITY_LOW;
555 acl->pending_sec_level = sec_level;
09ab6f4c 556 acl->auth_type = auth_type;
1aef8669 557 hci_acl_create_connection(acl);
09ab6f4c 558 }
1da177e4 559
db474275
VCG
560 return acl;
561}
562
f91c8468
VCG
563static struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type,
564 bdaddr_t *dst, u8 sec_level, u8 auth_type)
db474275
VCG
565{
566 struct hci_conn *acl;
567 struct hci_conn *sco;
568
db474275
VCG
569 acl = hci_connect_acl(hdev, dst, sec_level, auth_type);
570 if (IS_ERR(acl))
5b7f9909 571 return acl;
1da177e4 572
70f23020
AE
573 sco = hci_conn_hash_lookup_ba(hdev, type, dst);
574 if (!sco) {
575 sco = hci_conn_add(hdev, type, dst);
576 if (!sco) {
76a68ba0 577 hci_conn_drop(acl);
48c7aba9 578 return ERR_PTR(-ENOMEM);
1da177e4 579 }
5b7f9909 580 }
1da177e4 581
5b7f9909
MH
582 acl->link = sco;
583 sco->link = acl;
1da177e4 584
5b7f9909 585 hci_conn_hold(sco);
1da177e4 586
5b7f9909 587 if (acl->state == BT_CONNECTED &&
5974e4c4 588 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
58a681ef 589 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
14b12d0b 590 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
c390216b 591
51a8efd7 592 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
e73439d8 593 /* defer SCO setup until mode change completed */
51a8efd7 594 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
e73439d8
MH
595 return sco;
596 }
597
598 hci_sco_setup(acl, 0x00);
b6a0dc82 599 }
5b7f9909
MH
600
601 return sco;
1da177e4 602}
1da177e4 603
b7d839bf
VCG
604/* Create SCO, ACL or LE connection. */
605struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
606 __u8 dst_type, __u8 sec_level, __u8 auth_type)
607{
6ed93dc6 608 BT_DBG("%s dst %pMR type 0x%x", hdev->name, dst, type);
b7d839bf 609
4cd2d983
VCG
610 switch (type) {
611 case LE_LINK:
b7d839bf 612 return hci_connect_le(hdev, dst, dst_type, sec_level, auth_type);
4cd2d983 613 case ACL_LINK:
b7d839bf 614 return hci_connect_acl(hdev, dst, sec_level, auth_type);
4cd2d983 615 case SCO_LINK:
f91c8468
VCG
616 case ESCO_LINK:
617 return hci_connect_sco(hdev, type, dst, sec_level, auth_type);
4cd2d983 618 }
b7d839bf 619
4cd2d983 620 return ERR_PTR(-EINVAL);
b7d839bf
VCG
621}
622
e7c29cb1
MH
623/* Check link security requirement */
624int hci_conn_check_link_mode(struct hci_conn *conn)
625{
38b3fef1 626 BT_DBG("hcon %p", conn);
e7c29cb1 627
aa64a8b5 628 if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
e7c29cb1
MH
629 return 0;
630
631 return 1;
632}
e7c29cb1 633
1da177e4 634/* Authenticate remote device */
0684e5f9 635static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4 636{
38b3fef1 637 BT_DBG("hcon %p", conn);
1da177e4 638
765c2a96
JH
639 if (conn->pending_sec_level > sec_level)
640 sec_level = conn->pending_sec_level;
641
96a31833 642 if (sec_level > conn->sec_level)
765c2a96 643 conn->pending_sec_level = sec_level;
96a31833 644 else if (conn->link_mode & HCI_LM_AUTH)
1da177e4
LT
645 return 1;
646
65cf686e
JH
647 /* Make sure we preserve an existing MITM requirement*/
648 auth_type |= (conn->auth_type & 0x01);
649
96a31833
MH
650 conn->auth_type = auth_type;
651
51a8efd7 652 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1da177e4 653 struct hci_cp_auth_requested cp;
b7d05bad 654
aca3192c 655 cp.handle = cpu_to_le16(conn->handle);
40be492f 656 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
5974e4c4 657 sizeof(cp), &cp);
6142655f
JH
658
659 /* If we're already encrypted set the REAUTH_PEND flag,
660 * otherwise set the ENCRYPT_PEND.
661 */
07f5ed51 662 if (conn->link_mode & HCI_LM_ENCRYPT)
51a8efd7 663 set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
6142655f
JH
664 else
665 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
1da177e4 666 }
8c1b2355 667
1da177e4
LT
668 return 0;
669}
1da177e4 670
13d39315
WR
671/* Encrypt the the link */
672static void hci_conn_encrypt(struct hci_conn *conn)
673{
38b3fef1 674 BT_DBG("hcon %p", conn);
13d39315 675
51a8efd7 676 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
13d39315
WR
677 struct hci_cp_set_conn_encrypt cp;
678 cp.handle = cpu_to_le16(conn->handle);
679 cp.encrypt = 0x01;
680 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
5974e4c4 681 &cp);
13d39315
WR
682 }
683}
684
8c1b2355 685/* Enable security */
0684e5f9 686int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4 687{
38b3fef1 688 BT_DBG("hcon %p", conn);
1da177e4 689
d8343f12
VCG
690 if (conn->type == LE_LINK)
691 return smp_conn_security(conn, sec_level);
692
13d39315 693 /* For sdp we don't need the link key. */
8c1b2355
MH
694 if (sec_level == BT_SECURITY_SDP)
695 return 1;
696
13d39315
WR
697 /* For non 2.1 devices and low security level we don't need the link
698 key. */
aa64a8b5 699 if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
3fdca1e1 700 return 1;
8c1b2355 701
13d39315
WR
702 /* For other security levels we need the link key. */
703 if (!(conn->link_mode & HCI_LM_AUTH))
704 goto auth;
705
706 /* An authenticated combination key has sufficient security for any
707 security level. */
708 if (conn->key_type == HCI_LK_AUTH_COMBINATION)
709 goto encrypt;
710
711 /* An unauthenticated combination key has sufficient security for
712 security level 1 and 2. */
713 if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
5974e4c4 714 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
13d39315
WR
715 goto encrypt;
716
717 /* A combination key has always sufficient security for the security
718 levels 1 or 2. High security level requires the combination key
719 is generated using maximum PIN code length (16).
720 For pre 2.1 units. */
721 if (conn->key_type == HCI_LK_COMBINATION &&
5974e4c4 722 (sec_level != BT_SECURITY_HIGH || conn->pin_length == 16))
13d39315
WR
723 goto encrypt;
724
725auth:
51a8efd7 726 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1da177e4
LT
727 return 0;
728
6fdf658c
LAD
729 if (!hci_conn_auth(conn, sec_level, auth_type))
730 return 0;
13d39315
WR
731
732encrypt:
733 if (conn->link_mode & HCI_LM_ENCRYPT)
734 return 1;
8c1b2355 735
13d39315 736 hci_conn_encrypt(conn);
1da177e4
LT
737 return 0;
738}
8c1b2355 739EXPORT_SYMBOL(hci_conn_security);
1da177e4 740
b3b1b061
WR
741/* Check secure link requirement */
742int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
743{
38b3fef1 744 BT_DBG("hcon %p", conn);
b3b1b061
WR
745
746 if (sec_level != BT_SECURITY_HIGH)
747 return 1; /* Accept if non-secure is required */
748
ef4177e2 749 if (conn->sec_level == BT_SECURITY_HIGH)
b3b1b061
WR
750 return 1;
751
752 return 0; /* Reject not secure link */
753}
754EXPORT_SYMBOL(hci_conn_check_secure);
755
1da177e4
LT
756/* Change link key */
757int hci_conn_change_link_key(struct hci_conn *conn)
758{
38b3fef1 759 BT_DBG("hcon %p", conn);
1da177e4 760
51a8efd7 761 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1da177e4 762 struct hci_cp_change_conn_link_key cp;
aca3192c 763 cp.handle = cpu_to_le16(conn->handle);
40be492f 764 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
5974e4c4 765 sizeof(cp), &cp);
1da177e4 766 }
8c1b2355 767
1da177e4
LT
768 return 0;
769}
1da177e4
LT
770
771/* Switch role */
8c1b2355 772int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
1da177e4 773{
38b3fef1 774 BT_DBG("hcon %p", conn);
1da177e4
LT
775
776 if (!role && conn->link_mode & HCI_LM_MASTER)
777 return 1;
778
51a8efd7 779 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
1da177e4
LT
780 struct hci_cp_switch_role cp;
781 bacpy(&cp.bdaddr, &conn->dst);
782 cp.role = role;
a9de9248 783 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
1da177e4 784 }
8c1b2355 785
1da177e4
LT
786 return 0;
787}
788EXPORT_SYMBOL(hci_conn_switch_role);
789
04837f64 790/* Enter active mode */
14b12d0b 791void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
04837f64
MH
792{
793 struct hci_dev *hdev = conn->hdev;
794
38b3fef1 795 BT_DBG("hcon %p mode %d", conn, conn->mode);
04837f64
MH
796
797 if (test_bit(HCI_RAW, &hdev->flags))
798 return;
799
14b12d0b
JG
800 if (conn->mode != HCI_CM_SNIFF)
801 goto timer;
802
58a681ef 803 if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
04837f64
MH
804 goto timer;
805
51a8efd7 806 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
04837f64 807 struct hci_cp_exit_sniff_mode cp;
aca3192c 808 cp.handle = cpu_to_le16(conn->handle);
a9de9248 809 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
04837f64
MH
810 }
811
812timer:
813 if (hdev->idle_timeout > 0)
814 mod_timer(&conn->idle_timer,
5974e4c4 815 jiffies + msecs_to_jiffies(hdev->idle_timeout));
04837f64
MH
816}
817
1da177e4
LT
818/* Drop all connection on the device */
819void hci_conn_hash_flush(struct hci_dev *hdev)
820{
821 struct hci_conn_hash *h = &hdev->conn_hash;
3c4e0df0 822 struct hci_conn *c, *n;
1da177e4
LT
823
824 BT_DBG("hdev %s", hdev->name);
825
3c4e0df0 826 list_for_each_entry_safe(c, n, &h->list, list) {
1da177e4
LT
827 c->state = BT_CLOSED;
828
9f5a0d7b 829 hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
1da177e4
LT
830 hci_conn_del(c);
831 }
832}
833
a9de9248
MH
834/* Check pending connect attempts */
835void hci_conn_check_pending(struct hci_dev *hdev)
836{
837 struct hci_conn *conn;
838
839 BT_DBG("hdev %s", hdev->name);
840
841 hci_dev_lock(hdev);
842
843 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
844 if (conn)
1aef8669 845 hci_acl_create_connection(conn);
a9de9248
MH
846
847 hci_dev_unlock(hdev);
848}
849
1da177e4
LT
850int hci_get_conn_list(void __user *arg)
851{
fc5fef61 852 struct hci_conn *c;
1da177e4
LT
853 struct hci_conn_list_req req, *cl;
854 struct hci_conn_info *ci;
855 struct hci_dev *hdev;
1da177e4
LT
856 int n = 0, size, err;
857
858 if (copy_from_user(&req, arg, sizeof(req)))
859 return -EFAULT;
860
861 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
862 return -EINVAL;
863
864 size = sizeof(req) + req.conn_num * sizeof(*ci);
865
70f23020
AE
866 cl = kmalloc(size, GFP_KERNEL);
867 if (!cl)
1da177e4
LT
868 return -ENOMEM;
869
70f23020
AE
870 hdev = hci_dev_get(req.dev_id);
871 if (!hdev) {
1da177e4
LT
872 kfree(cl);
873 return -ENODEV;
874 }
875
876 ci = cl->conn_info;
877
09fd0de5 878 hci_dev_lock(hdev);
8035ded4 879 list_for_each_entry(c, &hdev->conn_hash.list, list) {
1da177e4
LT
880 bacpy(&(ci + n)->bdaddr, &c->dst);
881 (ci + n)->handle = c->handle;
882 (ci + n)->type = c->type;
883 (ci + n)->out = c->out;
884 (ci + n)->state = c->state;
885 (ci + n)->link_mode = c->link_mode;
886 if (++n >= req.conn_num)
887 break;
888 }
09fd0de5 889 hci_dev_unlock(hdev);
1da177e4
LT
890
891 cl->dev_id = hdev->id;
892 cl->conn_num = n;
893 size = sizeof(req) + n * sizeof(*ci);
894
895 hci_dev_put(hdev);
896
897 err = copy_to_user(arg, cl, size);
898 kfree(cl);
899
900 return err ? -EFAULT : 0;
901}
902
903int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
904{
905 struct hci_conn_info_req req;
906 struct hci_conn_info ci;
907 struct hci_conn *conn;
908 char __user *ptr = arg + sizeof(req);
909
910 if (copy_from_user(&req, arg, sizeof(req)))
911 return -EFAULT;
912
09fd0de5 913 hci_dev_lock(hdev);
1da177e4
LT
914 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
915 if (conn) {
916 bacpy(&ci.bdaddr, &conn->dst);
917 ci.handle = conn->handle;
918 ci.type = conn->type;
919 ci.out = conn->out;
920 ci.state = conn->state;
921 ci.link_mode = conn->link_mode;
922 }
09fd0de5 923 hci_dev_unlock(hdev);
1da177e4
LT
924
925 if (!conn)
926 return -ENOENT;
927
928 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
929}
40be492f
MH
930
931int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
932{
933 struct hci_auth_info_req req;
934 struct hci_conn *conn;
935
936 if (copy_from_user(&req, arg, sizeof(req)))
937 return -EFAULT;
938
09fd0de5 939 hci_dev_lock(hdev);
40be492f
MH
940 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
941 if (conn)
942 req.type = conn->auth_type;
09fd0de5 943 hci_dev_unlock(hdev);
40be492f
MH
944
945 if (!conn)
946 return -ENOENT;
947
948 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
949}
73d80deb
LAD
950
951struct hci_chan *hci_chan_create(struct hci_conn *conn)
952{
953 struct hci_dev *hdev = conn->hdev;
954 struct hci_chan *chan;
955
38b3fef1 956 BT_DBG("%s hcon %p", hdev->name, conn);
73d80deb 957
75d7735c 958 chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
73d80deb
LAD
959 if (!chan)
960 return NULL;
961
962 chan->conn = conn;
963 skb_queue_head_init(&chan->data_q);
168df8e5 964 chan->state = BT_CONNECTED;
73d80deb 965
8192edef 966 list_add_rcu(&chan->list, &conn->chan_list);
73d80deb
LAD
967
968 return chan;
969}
970
9472007c 971void hci_chan_del(struct hci_chan *chan)
73d80deb
LAD
972{
973 struct hci_conn *conn = chan->conn;
974 struct hci_dev *hdev = conn->hdev;
975
38b3fef1 976 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
73d80deb 977
8192edef
GP
978 list_del_rcu(&chan->list);
979
980 synchronize_rcu();
73d80deb 981
76a68ba0 982 hci_conn_drop(conn);
e9b02748 983
73d80deb
LAD
984 skb_queue_purge(&chan->data_q);
985 kfree(chan);
73d80deb
LAD
986}
987
2c33c06a 988void hci_chan_list_flush(struct hci_conn *conn)
73d80deb 989{
2a5a5ec6 990 struct hci_chan *chan, *n;
73d80deb 991
38b3fef1 992 BT_DBG("hcon %p", conn);
73d80deb 993
2a5a5ec6 994 list_for_each_entry_safe(chan, n, &conn->chan_list, list)
73d80deb
LAD
995 hci_chan_del(chan);
996}
42c4e53e
AE
997
998static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
999 __u16 handle)
1000{
1001 struct hci_chan *hchan;
1002
1003 list_for_each_entry(hchan, &hcon->chan_list, list) {
1004 if (hchan->handle == handle)
1005 return hchan;
1006 }
1007
1008 return NULL;
1009}
1010
1011struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1012{
1013 struct hci_conn_hash *h = &hdev->conn_hash;
1014 struct hci_conn *hcon;
1015 struct hci_chan *hchan = NULL;
1016
1017 rcu_read_lock();
1018
1019 list_for_each_entry_rcu(hcon, &h->list, list) {
1020 hchan = __hci_chan_lookup_handle(hcon, handle);
1021 if (hchan)
1022 break;
1023 }
1024
1025 rcu_read_unlock();
1026
1027 return hchan;
1028}