Merge branch 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / net / bluetooth / smp.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License version 2 as
7    published by the Free Software Foundation;
8
9    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20    SOFTWARE IS DISCLAIMED.
21 */
22
23 #include <linux/crypto.h>
24 #include <linux/scatterlist.h>
25 #include <crypto/b128ops.h>
26
27 #include <net/bluetooth/bluetooth.h>
28 #include <net/bluetooth/hci_core.h>
29 #include <net/bluetooth/l2cap.h>
30 #include <net/bluetooth/mgmt.h>
31
32 #include "smp.h"
33
34 #define SMP_ALLOW_CMD(smp, code)        set_bit(code, &smp->allow_cmd)
35
36 #define SMP_TIMEOUT     msecs_to_jiffies(30000)
37
38 #define AUTH_REQ_MASK   0x07
39 #define KEY_DIST_MASK   0x07
40
41 enum {
42         SMP_FLAG_TK_VALID,
43         SMP_FLAG_CFM_PENDING,
44         SMP_FLAG_MITM_AUTH,
45         SMP_FLAG_COMPLETE,
46         SMP_FLAG_INITIATOR,
47 };
48
49 struct smp_chan {
50         struct l2cap_conn       *conn;
51         struct delayed_work     security_timer;
52         unsigned long           allow_cmd; /* Bitmask of allowed commands */
53
54         u8              preq[7]; /* SMP Pairing Request */
55         u8              prsp[7]; /* SMP Pairing Response */
56         u8              prnd[16]; /* SMP Pairing Random (local) */
57         u8              rrnd[16]; /* SMP Pairing Random (remote) */
58         u8              pcnf[16]; /* SMP Pairing Confirm */
59         u8              tk[16]; /* SMP Temporary Key */
60         u8              enc_key_size;
61         u8              remote_key_dist;
62         bdaddr_t        id_addr;
63         u8              id_addr_type;
64         u8              irk[16];
65         struct smp_csrk *csrk;
66         struct smp_csrk *slave_csrk;
67         struct smp_ltk  *ltk;
68         struct smp_ltk  *slave_ltk;
69         struct smp_irk  *remote_irk;
70         unsigned long   flags;
71
72         struct crypto_blkcipher *tfm_aes;
73 };
74
75 static inline void swap_buf(const u8 *src, u8 *dst, size_t len)
76 {
77         size_t i;
78
79         for (i = 0; i < len; i++)
80                 dst[len - 1 - i] = src[i];
81 }
82
83 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
84 {
85         struct blkcipher_desc desc;
86         struct scatterlist sg;
87         uint8_t tmp[16], data[16];
88         int err;
89
90         if (tfm == NULL) {
91                 BT_ERR("tfm %p", tfm);
92                 return -EINVAL;
93         }
94
95         desc.tfm = tfm;
96         desc.flags = 0;
97
98         /* The most significant octet of key corresponds to k[0] */
99         swap_buf(k, tmp, 16);
100
101         err = crypto_blkcipher_setkey(tfm, tmp, 16);
102         if (err) {
103                 BT_ERR("cipher setkey failed: %d", err);
104                 return err;
105         }
106
107         /* Most significant octet of plaintextData corresponds to data[0] */
108         swap_buf(r, data, 16);
109
110         sg_init_one(&sg, data, 16);
111
112         err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
113         if (err)
114                 BT_ERR("Encrypt data error %d", err);
115
116         /* Most significant octet of encryptedData corresponds to data[0] */
117         swap_buf(data, r, 16);
118
119         return err;
120 }
121
122 static int smp_ah(struct crypto_blkcipher *tfm, u8 irk[16], u8 r[3], u8 res[3])
123 {
124         u8 _res[16];
125         int err;
126
127         /* r' = padding || r */
128         memcpy(_res, r, 3);
129         memset(_res + 3, 0, 13);
130
131         err = smp_e(tfm, irk, _res);
132         if (err) {
133                 BT_ERR("Encrypt error");
134                 return err;
135         }
136
137         /* The output of the random address function ah is:
138          *      ah(h, r) = e(k, r') mod 2^24
139          * The output of the security function e is then truncated to 24 bits
140          * by taking the least significant 24 bits of the output of e as the
141          * result of ah.
142          */
143         memcpy(res, _res, 3);
144
145         return 0;
146 }
147
148 bool smp_irk_matches(struct hci_dev *hdev, u8 irk[16], bdaddr_t *bdaddr)
149 {
150         struct l2cap_chan *chan = hdev->smp_data;
151         struct crypto_blkcipher *tfm;
152         u8 hash[3];
153         int err;
154
155         if (!chan || !chan->data)
156                 return false;
157
158         tfm = chan->data;
159
160         BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);
161
162         err = smp_ah(tfm, irk, &bdaddr->b[3], hash);
163         if (err)
164                 return false;
165
166         return !memcmp(bdaddr->b, hash, 3);
167 }
168
169 int smp_generate_rpa(struct hci_dev *hdev, u8 irk[16], bdaddr_t *rpa)
170 {
171         struct l2cap_chan *chan = hdev->smp_data;
172         struct crypto_blkcipher *tfm;
173         int err;
174
175         if (!chan || !chan->data)
176                 return -EOPNOTSUPP;
177
178         tfm = chan->data;
179
180         get_random_bytes(&rpa->b[3], 3);
181
182         rpa->b[5] &= 0x3f;      /* Clear two most significant bits */
183         rpa->b[5] |= 0x40;      /* Set second most significant bit */
184
185         err = smp_ah(tfm, irk, &rpa->b[3], rpa->b);
186         if (err < 0)
187                 return err;
188
189         BT_DBG("RPA %pMR", rpa);
190
191         return 0;
192 }
193
194 static int smp_c1(struct smp_chan *smp, u8 k[16], u8 r[16], u8 preq[7],
195                   u8 pres[7], u8 _iat, bdaddr_t *ia, u8 _rat, bdaddr_t *ra,
196                   u8 res[16])
197 {
198         struct hci_dev *hdev = smp->conn->hcon->hdev;
199         u8 p1[16], p2[16];
200         int err;
201
202         BT_DBG("%s", hdev->name);
203
204         memset(p1, 0, 16);
205
206         /* p1 = pres || preq || _rat || _iat */
207         p1[0] = _iat;
208         p1[1] = _rat;
209         memcpy(p1 + 2, preq, 7);
210         memcpy(p1 + 9, pres, 7);
211
212         /* p2 = padding || ia || ra */
213         memcpy(p2, ra, 6);
214         memcpy(p2 + 6, ia, 6);
215         memset(p2 + 12, 0, 4);
216
217         /* res = r XOR p1 */
218         u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
219
220         /* res = e(k, res) */
221         err = smp_e(smp->tfm_aes, k, res);
222         if (err) {
223                 BT_ERR("Encrypt data error");
224                 return err;
225         }
226
227         /* res = res XOR p2 */
228         u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
229
230         /* res = e(k, res) */
231         err = smp_e(smp->tfm_aes, k, res);
232         if (err)
233                 BT_ERR("Encrypt data error");
234
235         return err;
236 }
237
238 static int smp_s1(struct smp_chan *smp, u8 k[16], u8 r1[16], u8 r2[16],
239                   u8 _r[16])
240 {
241         struct hci_dev *hdev = smp->conn->hcon->hdev;
242         int err;
243
244         BT_DBG("%s", hdev->name);
245
246         /* Just least significant octets from r1 and r2 are considered */
247         memcpy(_r, r2, 8);
248         memcpy(_r + 8, r1, 8);
249
250         err = smp_e(smp->tfm_aes, k, _r);
251         if (err)
252                 BT_ERR("Encrypt data error");
253
254         return err;
255 }
256
257 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
258 {
259         struct l2cap_chan *chan = conn->smp;
260         struct smp_chan *smp;
261         struct kvec iv[2];
262         struct msghdr msg;
263
264         if (!chan)
265                 return;
266
267         BT_DBG("code 0x%2.2x", code);
268
269         iv[0].iov_base = &code;
270         iv[0].iov_len = 1;
271
272         iv[1].iov_base = data;
273         iv[1].iov_len = len;
274
275         memset(&msg, 0, sizeof(msg));
276
277         msg.msg_iov = (struct iovec *) &iv;
278         msg.msg_iovlen = 2;
279
280         l2cap_chan_send(chan, &msg, 1 + len);
281
282         if (!chan->data)
283                 return;
284
285         smp = chan->data;
286
287         cancel_delayed_work_sync(&smp->security_timer);
288         schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
289 }
290
291 static __u8 authreq_to_seclevel(__u8 authreq)
292 {
293         if (authreq & SMP_AUTH_MITM)
294                 return BT_SECURITY_HIGH;
295         else
296                 return BT_SECURITY_MEDIUM;
297 }
298
299 static __u8 seclevel_to_authreq(__u8 sec_level)
300 {
301         switch (sec_level) {
302         case BT_SECURITY_HIGH:
303                 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
304         case BT_SECURITY_MEDIUM:
305                 return SMP_AUTH_BONDING;
306         default:
307                 return SMP_AUTH_NONE;
308         }
309 }
310
311 static void build_pairing_cmd(struct l2cap_conn *conn,
312                               struct smp_cmd_pairing *req,
313                               struct smp_cmd_pairing *rsp, __u8 authreq)
314 {
315         struct l2cap_chan *chan = conn->smp;
316         struct smp_chan *smp = chan->data;
317         struct hci_conn *hcon = conn->hcon;
318         struct hci_dev *hdev = hcon->hdev;
319         u8 local_dist = 0, remote_dist = 0;
320
321         if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) {
322                 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
323                 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
324                 authreq |= SMP_AUTH_BONDING;
325         } else {
326                 authreq &= ~SMP_AUTH_BONDING;
327         }
328
329         if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
330                 remote_dist |= SMP_DIST_ID_KEY;
331
332         if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
333                 local_dist |= SMP_DIST_ID_KEY;
334
335         if (rsp == NULL) {
336                 req->io_capability = conn->hcon->io_capability;
337                 req->oob_flag = SMP_OOB_NOT_PRESENT;
338                 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
339                 req->init_key_dist = local_dist;
340                 req->resp_key_dist = remote_dist;
341                 req->auth_req = (authreq & AUTH_REQ_MASK);
342
343                 smp->remote_key_dist = remote_dist;
344                 return;
345         }
346
347         rsp->io_capability = conn->hcon->io_capability;
348         rsp->oob_flag = SMP_OOB_NOT_PRESENT;
349         rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
350         rsp->init_key_dist = req->init_key_dist & remote_dist;
351         rsp->resp_key_dist = req->resp_key_dist & local_dist;
352         rsp->auth_req = (authreq & AUTH_REQ_MASK);
353
354         smp->remote_key_dist = rsp->init_key_dist;
355 }
356
357 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
358 {
359         struct l2cap_chan *chan = conn->smp;
360         struct smp_chan *smp = chan->data;
361
362         if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
363             (max_key_size < SMP_MIN_ENC_KEY_SIZE))
364                 return SMP_ENC_KEY_SIZE;
365
366         smp->enc_key_size = max_key_size;
367
368         return 0;
369 }
370
371 static void smp_chan_destroy(struct l2cap_conn *conn)
372 {
373         struct l2cap_chan *chan = conn->smp;
374         struct smp_chan *smp = chan->data;
375         bool complete;
376
377         BUG_ON(!smp);
378
379         cancel_delayed_work_sync(&smp->security_timer);
380
381         complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
382         mgmt_smp_complete(conn->hcon, complete);
383
384         kfree(smp->csrk);
385         kfree(smp->slave_csrk);
386
387         crypto_free_blkcipher(smp->tfm_aes);
388
389         /* If pairing failed clean up any keys we might have */
390         if (!complete) {
391                 if (smp->ltk) {
392                         list_del(&smp->ltk->list);
393                         kfree(smp->ltk);
394                 }
395
396                 if (smp->slave_ltk) {
397                         list_del(&smp->slave_ltk->list);
398                         kfree(smp->slave_ltk);
399                 }
400
401                 if (smp->remote_irk) {
402                         list_del(&smp->remote_irk->list);
403                         kfree(smp->remote_irk);
404                 }
405         }
406
407         chan->data = NULL;
408         kfree(smp);
409         hci_conn_drop(conn->hcon);
410 }
411
412 static void smp_failure(struct l2cap_conn *conn, u8 reason)
413 {
414         struct hci_conn *hcon = conn->hcon;
415         struct l2cap_chan *chan = conn->smp;
416
417         if (reason)
418                 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
419                              &reason);
420
421         clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
422         mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
423
424         if (chan->data)
425                 smp_chan_destroy(conn);
426 }
427
428 #define JUST_WORKS      0x00
429 #define JUST_CFM        0x01
430 #define REQ_PASSKEY     0x02
431 #define CFM_PASSKEY     0x03
432 #define REQ_OOB         0x04
433 #define OVERLAP         0xFF
434
435 static const u8 gen_method[5][5] = {
436         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
437         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
438         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
439         { JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
440         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
441 };
442
443 static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
444 {
445         /* If either side has unknown io_caps, use JUST_CFM (which gets
446          * converted later to JUST_WORKS if we're initiators.
447          */
448         if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
449             remote_io > SMP_IO_KEYBOARD_DISPLAY)
450                 return JUST_CFM;
451
452         return gen_method[remote_io][local_io];
453 }
454
455 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
456                                                 u8 local_io, u8 remote_io)
457 {
458         struct hci_conn *hcon = conn->hcon;
459         struct l2cap_chan *chan = conn->smp;
460         struct smp_chan *smp = chan->data;
461         u8 method;
462         u32 passkey = 0;
463         int ret = 0;
464
465         /* Initialize key for JUST WORKS */
466         memset(smp->tk, 0, sizeof(smp->tk));
467         clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
468
469         BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
470
471         /* If neither side wants MITM, either "just" confirm an incoming
472          * request or use just-works for outgoing ones. The JUST_CFM
473          * will be converted to JUST_WORKS if necessary later in this
474          * function. If either side has MITM look up the method from the
475          * table.
476          */
477         if (!(auth & SMP_AUTH_MITM))
478                 method = JUST_CFM;
479         else
480                 method = get_auth_method(smp, local_io, remote_io);
481
482         /* Don't confirm locally initiated pairing attempts */
483         if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
484                 method = JUST_WORKS;
485
486         /* Don't bother user space with no IO capabilities */
487         if (method == JUST_CFM && hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
488                 method = JUST_WORKS;
489
490         /* If Just Works, Continue with Zero TK */
491         if (method == JUST_WORKS) {
492                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
493                 return 0;
494         }
495
496         /* Not Just Works/Confirm results in MITM Authentication */
497         if (method != JUST_CFM) {
498                 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
499                 if (hcon->pending_sec_level < BT_SECURITY_HIGH)
500                         hcon->pending_sec_level = BT_SECURITY_HIGH;
501         }
502
503         /* If both devices have Keyoard-Display I/O, the master
504          * Confirms and the slave Enters the passkey.
505          */
506         if (method == OVERLAP) {
507                 if (hcon->role == HCI_ROLE_MASTER)
508                         method = CFM_PASSKEY;
509                 else
510                         method = REQ_PASSKEY;
511         }
512
513         /* Generate random passkey. */
514         if (method == CFM_PASSKEY) {
515                 memset(smp->tk, 0, sizeof(smp->tk));
516                 get_random_bytes(&passkey, sizeof(passkey));
517                 passkey %= 1000000;
518                 put_unaligned_le32(passkey, smp->tk);
519                 BT_DBG("PassKey: %d", passkey);
520                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
521         }
522
523         hci_dev_lock(hcon->hdev);
524
525         if (method == REQ_PASSKEY)
526                 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
527                                                 hcon->type, hcon->dst_type);
528         else if (method == JUST_CFM)
529                 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
530                                                 hcon->type, hcon->dst_type,
531                                                 passkey, 1);
532         else
533                 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
534                                                 hcon->type, hcon->dst_type,
535                                                 passkey, 0);
536
537         hci_dev_unlock(hcon->hdev);
538
539         return ret;
540 }
541
542 static u8 smp_confirm(struct smp_chan *smp)
543 {
544         struct l2cap_conn *conn = smp->conn;
545         struct smp_cmd_pairing_confirm cp;
546         int ret;
547
548         BT_DBG("conn %p", conn);
549
550         ret = smp_c1(smp, smp->tk, smp->prnd, smp->preq, smp->prsp,
551                      conn->hcon->init_addr_type, &conn->hcon->init_addr,
552                      conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
553                      cp.confirm_val);
554         if (ret)
555                 return SMP_UNSPECIFIED;
556
557         clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
558
559         smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
560
561         if (conn->hcon->out)
562                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
563         else
564                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
565
566         return 0;
567 }
568
569 static u8 smp_random(struct smp_chan *smp)
570 {
571         struct l2cap_conn *conn = smp->conn;
572         struct hci_conn *hcon = conn->hcon;
573         u8 confirm[16];
574         int ret;
575
576         if (IS_ERR_OR_NULL(smp->tfm_aes))
577                 return SMP_UNSPECIFIED;
578
579         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
580
581         ret = smp_c1(smp, smp->tk, smp->rrnd, smp->preq, smp->prsp,
582                      hcon->init_addr_type, &hcon->init_addr,
583                      hcon->resp_addr_type, &hcon->resp_addr, confirm);
584         if (ret)
585                 return SMP_UNSPECIFIED;
586
587         if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
588                 BT_ERR("Pairing failed (confirmation values mismatch)");
589                 return SMP_CONFIRM_FAILED;
590         }
591
592         if (hcon->out) {
593                 u8 stk[16];
594                 __le64 rand = 0;
595                 __le16 ediv = 0;
596
597                 smp_s1(smp, smp->tk, smp->rrnd, smp->prnd, stk);
598
599                 memset(stk + smp->enc_key_size, 0,
600                        SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
601
602                 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
603                         return SMP_UNSPECIFIED;
604
605                 hci_le_start_enc(hcon, ediv, rand, stk);
606                 hcon->enc_key_size = smp->enc_key_size;
607                 set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
608         } else {
609                 u8 stk[16], auth;
610                 __le64 rand = 0;
611                 __le16 ediv = 0;
612
613                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
614                              smp->prnd);
615
616                 smp_s1(smp, smp->tk, smp->prnd, smp->rrnd, stk);
617
618                 memset(stk + smp->enc_key_size, 0,
619                        SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
620
621                 if (hcon->pending_sec_level == BT_SECURITY_HIGH)
622                         auth = 1;
623                 else
624                         auth = 0;
625
626                 /* Even though there's no _SLAVE suffix this is the
627                  * slave STK we're adding for later lookup (the master
628                  * STK never needs to be stored).
629                  */
630                 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
631                             SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
632         }
633
634         return 0;
635 }
636
637 static void smp_notify_keys(struct l2cap_conn *conn)
638 {
639         struct l2cap_chan *chan = conn->smp;
640         struct smp_chan *smp = chan->data;
641         struct hci_conn *hcon = conn->hcon;
642         struct hci_dev *hdev = hcon->hdev;
643         struct smp_cmd_pairing *req = (void *) &smp->preq[1];
644         struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
645         bool persistent;
646
647         if (smp->remote_irk) {
648                 mgmt_new_irk(hdev, smp->remote_irk);
649                 /* Now that user space can be considered to know the
650                  * identity address track the connection based on it
651                  * from now on.
652                  */
653                 bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
654                 hcon->dst_type = smp->remote_irk->addr_type;
655                 queue_work(hdev->workqueue, &conn->id_addr_update_work);
656
657                 /* When receiving an indentity resolving key for
658                  * a remote device that does not use a resolvable
659                  * private address, just remove the key so that
660                  * it is possible to use the controller white
661                  * list for scanning.
662                  *
663                  * Userspace will have been told to not store
664                  * this key at this point. So it is safe to
665                  * just remove it.
666                  */
667                 if (!bacmp(&smp->remote_irk->rpa, BDADDR_ANY)) {
668                         list_del(&smp->remote_irk->list);
669                         kfree(smp->remote_irk);
670                         smp->remote_irk = NULL;
671                 }
672         }
673
674         /* The LTKs and CSRKs should be persistent only if both sides
675          * had the bonding bit set in their authentication requests.
676          */
677         persistent = !!((req->auth_req & rsp->auth_req) & SMP_AUTH_BONDING);
678
679         if (smp->csrk) {
680                 smp->csrk->bdaddr_type = hcon->dst_type;
681                 bacpy(&smp->csrk->bdaddr, &hcon->dst);
682                 mgmt_new_csrk(hdev, smp->csrk, persistent);
683         }
684
685         if (smp->slave_csrk) {
686                 smp->slave_csrk->bdaddr_type = hcon->dst_type;
687                 bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
688                 mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
689         }
690
691         if (smp->ltk) {
692                 smp->ltk->bdaddr_type = hcon->dst_type;
693                 bacpy(&smp->ltk->bdaddr, &hcon->dst);
694                 mgmt_new_ltk(hdev, smp->ltk, persistent);
695         }
696
697         if (smp->slave_ltk) {
698                 smp->slave_ltk->bdaddr_type = hcon->dst_type;
699                 bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
700                 mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
701         }
702 }
703
704 static void smp_allow_key_dist(struct smp_chan *smp)
705 {
706         /* Allow the first expected phase 3 PDU. The rest of the PDUs
707          * will be allowed in each PDU handler to ensure we receive
708          * them in the correct order.
709          */
710         if (smp->remote_key_dist & SMP_DIST_ENC_KEY)
711                 SMP_ALLOW_CMD(smp, SMP_CMD_ENCRYPT_INFO);
712         else if (smp->remote_key_dist & SMP_DIST_ID_KEY)
713                 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
714         else if (smp->remote_key_dist & SMP_DIST_SIGN)
715                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
716 }
717
718 static void smp_distribute_keys(struct smp_chan *smp)
719 {
720         struct smp_cmd_pairing *req, *rsp;
721         struct l2cap_conn *conn = smp->conn;
722         struct hci_conn *hcon = conn->hcon;
723         struct hci_dev *hdev = hcon->hdev;
724         __u8 *keydist;
725
726         BT_DBG("conn %p", conn);
727
728         rsp = (void *) &smp->prsp[1];
729
730         /* The responder sends its keys first */
731         if (hcon->out && (smp->remote_key_dist & KEY_DIST_MASK)) {
732                 smp_allow_key_dist(smp);
733                 return;
734         }
735
736         req = (void *) &smp->preq[1];
737
738         if (hcon->out) {
739                 keydist = &rsp->init_key_dist;
740                 *keydist &= req->init_key_dist;
741         } else {
742                 keydist = &rsp->resp_key_dist;
743                 *keydist &= req->resp_key_dist;
744         }
745
746         BT_DBG("keydist 0x%x", *keydist);
747
748         if (*keydist & SMP_DIST_ENC_KEY) {
749                 struct smp_cmd_encrypt_info enc;
750                 struct smp_cmd_master_ident ident;
751                 struct smp_ltk *ltk;
752                 u8 authenticated;
753                 __le16 ediv;
754                 __le64 rand;
755
756                 get_random_bytes(enc.ltk, sizeof(enc.ltk));
757                 get_random_bytes(&ediv, sizeof(ediv));
758                 get_random_bytes(&rand, sizeof(rand));
759
760                 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
761
762                 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
763                 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
764                                   SMP_LTK_SLAVE, authenticated, enc.ltk,
765                                   smp->enc_key_size, ediv, rand);
766                 smp->slave_ltk = ltk;
767
768                 ident.ediv = ediv;
769                 ident.rand = rand;
770
771                 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
772
773                 *keydist &= ~SMP_DIST_ENC_KEY;
774         }
775
776         if (*keydist & SMP_DIST_ID_KEY) {
777                 struct smp_cmd_ident_addr_info addrinfo;
778                 struct smp_cmd_ident_info idinfo;
779
780                 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
781
782                 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
783
784                 /* The hci_conn contains the local identity address
785                  * after the connection has been established.
786                  *
787                  * This is true even when the connection has been
788                  * established using a resolvable random address.
789                  */
790                 bacpy(&addrinfo.bdaddr, &hcon->src);
791                 addrinfo.addr_type = hcon->src_type;
792
793                 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
794                              &addrinfo);
795
796                 *keydist &= ~SMP_DIST_ID_KEY;
797         }
798
799         if (*keydist & SMP_DIST_SIGN) {
800                 struct smp_cmd_sign_info sign;
801                 struct smp_csrk *csrk;
802
803                 /* Generate a new random key */
804                 get_random_bytes(sign.csrk, sizeof(sign.csrk));
805
806                 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
807                 if (csrk) {
808                         csrk->master = 0x00;
809                         memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
810                 }
811                 smp->slave_csrk = csrk;
812
813                 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
814
815                 *keydist &= ~SMP_DIST_SIGN;
816         }
817
818         /* If there are still keys to be received wait for them */
819         if (smp->remote_key_dist & KEY_DIST_MASK) {
820                 smp_allow_key_dist(smp);
821                 return;
822         }
823
824         set_bit(SMP_FLAG_COMPLETE, &smp->flags);
825         smp_notify_keys(conn);
826
827         smp_chan_destroy(conn);
828 }
829
830 static void smp_timeout(struct work_struct *work)
831 {
832         struct smp_chan *smp = container_of(work, struct smp_chan,
833                                             security_timer.work);
834         struct l2cap_conn *conn = smp->conn;
835
836         BT_DBG("conn %p", conn);
837
838         hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
839 }
840
841 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
842 {
843         struct l2cap_chan *chan = conn->smp;
844         struct smp_chan *smp;
845
846         smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
847         if (!smp)
848                 return NULL;
849
850         smp->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
851         if (IS_ERR(smp->tfm_aes)) {
852                 BT_ERR("Unable to create ECB crypto context");
853                 kfree(smp);
854                 return NULL;
855         }
856
857         smp->conn = conn;
858         chan->data = smp;
859
860         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);
861
862         INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);
863
864         hci_conn_hold(conn->hcon);
865
866         return smp;
867 }
868
869 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
870 {
871         struct l2cap_conn *conn = hcon->l2cap_data;
872         struct l2cap_chan *chan;
873         struct smp_chan *smp;
874         u32 value;
875         int err;
876
877         BT_DBG("");
878
879         if (!conn)
880                 return -ENOTCONN;
881
882         chan = conn->smp;
883         if (!chan)
884                 return -ENOTCONN;
885
886         l2cap_chan_lock(chan);
887         if (!chan->data) {
888                 err = -ENOTCONN;
889                 goto unlock;
890         }
891
892         smp = chan->data;
893
894         switch (mgmt_op) {
895         case MGMT_OP_USER_PASSKEY_REPLY:
896                 value = le32_to_cpu(passkey);
897                 memset(smp->tk, 0, sizeof(smp->tk));
898                 BT_DBG("PassKey: %d", value);
899                 put_unaligned_le32(value, smp->tk);
900                 /* Fall Through */
901         case MGMT_OP_USER_CONFIRM_REPLY:
902                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
903                 break;
904         case MGMT_OP_USER_PASSKEY_NEG_REPLY:
905         case MGMT_OP_USER_CONFIRM_NEG_REPLY:
906                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
907                 err = 0;
908                 goto unlock;
909         default:
910                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
911                 err = -EOPNOTSUPP;
912                 goto unlock;
913         }
914
915         err = 0;
916
917         /* If it is our turn to send Pairing Confirm, do so now */
918         if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
919                 u8 rsp = smp_confirm(smp);
920                 if (rsp)
921                         smp_failure(conn, rsp);
922         }
923
924 unlock:
925         l2cap_chan_unlock(chan);
926         return err;
927 }
928
929 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
930 {
931         struct smp_cmd_pairing rsp, *req = (void *) skb->data;
932         struct l2cap_chan *chan = conn->smp;
933         struct hci_dev *hdev = conn->hcon->hdev;
934         struct smp_chan *smp;
935         u8 key_size, auth, sec_level;
936         int ret;
937
938         BT_DBG("conn %p", conn);
939
940         if (skb->len < sizeof(*req))
941                 return SMP_INVALID_PARAMS;
942
943         if (conn->hcon->role != HCI_ROLE_SLAVE)
944                 return SMP_CMD_NOTSUPP;
945
946         if (!chan->data)
947                 smp = smp_chan_create(conn);
948         else
949                 smp = chan->data;
950
951         if (!smp)
952                 return SMP_UNSPECIFIED;
953
954         /* We didn't start the pairing, so match remote */
955         auth = req->auth_req & AUTH_REQ_MASK;
956
957         if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
958             (auth & SMP_AUTH_BONDING))
959                 return SMP_PAIRING_NOTSUPP;
960
961         smp->preq[0] = SMP_CMD_PAIRING_REQ;
962         memcpy(&smp->preq[1], req, sizeof(*req));
963         skb_pull(skb, sizeof(*req));
964
965         if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
966                 sec_level = BT_SECURITY_MEDIUM;
967         else
968                 sec_level = authreq_to_seclevel(auth);
969
970         if (sec_level > conn->hcon->pending_sec_level)
971                 conn->hcon->pending_sec_level = sec_level;
972
973         /* If we need MITM check that it can be acheived */
974         if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
975                 u8 method;
976
977                 method = get_auth_method(smp, conn->hcon->io_capability,
978                                          req->io_capability);
979                 if (method == JUST_WORKS || method == JUST_CFM)
980                         return SMP_AUTH_REQUIREMENTS;
981         }
982
983         build_pairing_cmd(conn, req, &rsp, auth);
984
985         key_size = min(req->max_key_size, rsp.max_key_size);
986         if (check_enc_key_size(conn, key_size))
987                 return SMP_ENC_KEY_SIZE;
988
989         get_random_bytes(smp->prnd, sizeof(smp->prnd));
990
991         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
992         memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
993
994         smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
995         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
996
997         /* Request setup of TK */
998         ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
999         if (ret)
1000                 return SMP_UNSPECIFIED;
1001
1002         return 0;
1003 }
1004
1005 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
1006 {
1007         struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1008         struct l2cap_chan *chan = conn->smp;
1009         struct smp_chan *smp = chan->data;
1010         u8 key_size, auth;
1011         int ret;
1012
1013         BT_DBG("conn %p", conn);
1014
1015         if (skb->len < sizeof(*rsp))
1016                 return SMP_INVALID_PARAMS;
1017
1018         if (conn->hcon->role != HCI_ROLE_MASTER)
1019                 return SMP_CMD_NOTSUPP;
1020
1021         skb_pull(skb, sizeof(*rsp));
1022
1023         req = (void *) &smp->preq[1];
1024
1025         key_size = min(req->max_key_size, rsp->max_key_size);
1026         if (check_enc_key_size(conn, key_size))
1027                 return SMP_ENC_KEY_SIZE;
1028
1029         auth = rsp->auth_req & AUTH_REQ_MASK;
1030
1031         /* If we need MITM check that it can be acheived */
1032         if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1033                 u8 method;
1034
1035                 method = get_auth_method(smp, req->io_capability,
1036                                          rsp->io_capability);
1037                 if (method == JUST_WORKS || method == JUST_CFM)
1038                         return SMP_AUTH_REQUIREMENTS;
1039         }
1040
1041         get_random_bytes(smp->prnd, sizeof(smp->prnd));
1042
1043         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1044         memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1045
1046         /* Update remote key distribution in case the remote cleared
1047          * some bits that we had enabled in our request.
1048          */
1049         smp->remote_key_dist &= rsp->resp_key_dist;
1050
1051         auth |= req->auth_req;
1052
1053         ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
1054         if (ret)
1055                 return SMP_UNSPECIFIED;
1056
1057         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1058
1059         /* Can't compose response until we have been confirmed */
1060         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1061                 return smp_confirm(smp);
1062
1063         return 0;
1064 }
1065
1066 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
1067 {
1068         struct l2cap_chan *chan = conn->smp;
1069         struct smp_chan *smp = chan->data;
1070
1071         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
1072
1073         if (skb->len < sizeof(smp->pcnf))
1074                 return SMP_INVALID_PARAMS;
1075
1076         memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
1077         skb_pull(skb, sizeof(smp->pcnf));
1078
1079         if (conn->hcon->out) {
1080                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1081                              smp->prnd);
1082                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1083                 return 0;
1084         }
1085
1086         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1087                 return smp_confirm(smp);
1088         else
1089                 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1090
1091         return 0;
1092 }
1093
1094 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
1095 {
1096         struct l2cap_chan *chan = conn->smp;
1097         struct smp_chan *smp = chan->data;
1098
1099         BT_DBG("conn %p", conn);
1100
1101         if (skb->len < sizeof(smp->rrnd))
1102                 return SMP_INVALID_PARAMS;
1103
1104         memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
1105         skb_pull(skb, sizeof(smp->rrnd));
1106
1107         return smp_random(smp);
1108 }
1109
1110 static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
1111 {
1112         struct smp_ltk *key;
1113         struct hci_conn *hcon = conn->hcon;
1114
1115         key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
1116                                    hcon->role);
1117         if (!key)
1118                 return false;
1119
1120         if (smp_ltk_sec_level(key) < sec_level)
1121                 return false;
1122
1123         if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1124                 return true;
1125
1126         hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
1127         hcon->enc_key_size = key->enc_size;
1128
1129         /* We never store STKs for master role, so clear this flag */
1130         clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
1131
1132         return true;
1133 }
1134
1135 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
1136 {
1137         if (sec_level == BT_SECURITY_LOW)
1138                 return true;
1139
1140         /* If we're encrypted with an STK always claim insufficient
1141          * security. This way we allow the connection to be re-encrypted
1142          * with an LTK, even if the LTK provides the same level of
1143          * security. Only exception is if we don't have an LTK (e.g.
1144          * because of key distribution bits).
1145          */
1146         if (test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
1147             hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
1148                                  hcon->role))
1149                 return false;
1150
1151         if (hcon->sec_level >= sec_level)
1152                 return true;
1153
1154         return false;
1155 }
1156
1157 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
1158 {
1159         struct smp_cmd_security_req *rp = (void *) skb->data;
1160         struct smp_cmd_pairing cp;
1161         struct hci_conn *hcon = conn->hcon;
1162         struct smp_chan *smp;
1163         u8 sec_level, auth;
1164
1165         BT_DBG("conn %p", conn);
1166
1167         if (skb->len < sizeof(*rp))
1168                 return SMP_INVALID_PARAMS;
1169
1170         if (hcon->role != HCI_ROLE_MASTER)
1171                 return SMP_CMD_NOTSUPP;
1172
1173         auth = rp->auth_req & AUTH_REQ_MASK;
1174
1175         if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1176                 sec_level = BT_SECURITY_MEDIUM;
1177         else
1178                 sec_level = authreq_to_seclevel(auth);
1179
1180         if (smp_sufficient_security(hcon, sec_level))
1181                 return 0;
1182
1183         if (sec_level > hcon->pending_sec_level)
1184                 hcon->pending_sec_level = sec_level;
1185
1186         if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
1187                 return 0;
1188
1189         smp = smp_chan_create(conn);
1190         if (!smp)
1191                 return SMP_UNSPECIFIED;
1192
1193         if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) &&
1194             (auth & SMP_AUTH_BONDING))
1195                 return SMP_PAIRING_NOTSUPP;
1196
1197         skb_pull(skb, sizeof(*rp));
1198
1199         memset(&cp, 0, sizeof(cp));
1200         build_pairing_cmd(conn, &cp, NULL, auth);
1201
1202         smp->preq[0] = SMP_CMD_PAIRING_REQ;
1203         memcpy(&smp->preq[1], &cp, sizeof(cp));
1204
1205         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1206         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
1207
1208         return 0;
1209 }
1210
1211 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
1212 {
1213         struct l2cap_conn *conn = hcon->l2cap_data;
1214         struct l2cap_chan *chan;
1215         struct smp_chan *smp;
1216         __u8 authreq;
1217         int ret;
1218
1219         BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
1220
1221         /* This may be NULL if there's an unexpected disconnection */
1222         if (!conn)
1223                 return 1;
1224
1225         chan = conn->smp;
1226
1227         if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
1228                 return 1;
1229
1230         if (smp_sufficient_security(hcon, sec_level))
1231                 return 1;
1232
1233         if (sec_level > hcon->pending_sec_level)
1234                 hcon->pending_sec_level = sec_level;
1235
1236         if (hcon->role == HCI_ROLE_MASTER)
1237                 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
1238                         return 0;
1239
1240         l2cap_chan_lock(chan);
1241
1242         /* If SMP is already in progress ignore this request */
1243         if (chan->data) {
1244                 ret = 0;
1245                 goto unlock;
1246         }
1247
1248         smp = smp_chan_create(conn);
1249         if (!smp) {
1250                 ret = 1;
1251                 goto unlock;
1252         }
1253
1254         authreq = seclevel_to_authreq(sec_level);
1255
1256         /* Require MITM if IO Capability allows or the security level
1257          * requires it.
1258          */
1259         if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
1260             hcon->pending_sec_level > BT_SECURITY_MEDIUM)
1261                 authreq |= SMP_AUTH_MITM;
1262
1263         if (hcon->role == HCI_ROLE_MASTER) {
1264                 struct smp_cmd_pairing cp;
1265
1266                 build_pairing_cmd(conn, &cp, NULL, authreq);
1267                 smp->preq[0] = SMP_CMD_PAIRING_REQ;
1268                 memcpy(&smp->preq[1], &cp, sizeof(cp));
1269
1270                 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1271                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
1272         } else {
1273                 struct smp_cmd_security_req cp;
1274                 cp.auth_req = authreq;
1275                 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
1276                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ);
1277         }
1278
1279         set_bit(SMP_FLAG_INITIATOR, &smp->flags);
1280         ret = 0;
1281
1282 unlock:
1283         l2cap_chan_unlock(chan);
1284         return ret;
1285 }
1286
1287 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
1288 {
1289         struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1290         struct l2cap_chan *chan = conn->smp;
1291         struct smp_chan *smp = chan->data;
1292
1293         BT_DBG("conn %p", conn);
1294
1295         if (skb->len < sizeof(*rp))
1296                 return SMP_INVALID_PARAMS;
1297
1298         SMP_ALLOW_CMD(smp, SMP_CMD_MASTER_IDENT);
1299
1300         skb_pull(skb, sizeof(*rp));
1301
1302         memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
1303
1304         return 0;
1305 }
1306
1307 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
1308 {
1309         struct smp_cmd_master_ident *rp = (void *) skb->data;
1310         struct l2cap_chan *chan = conn->smp;
1311         struct smp_chan *smp = chan->data;
1312         struct hci_dev *hdev = conn->hcon->hdev;
1313         struct hci_conn *hcon = conn->hcon;
1314         struct smp_ltk *ltk;
1315         u8 authenticated;
1316
1317         BT_DBG("conn %p", conn);
1318
1319         if (skb->len < sizeof(*rp))
1320                 return SMP_INVALID_PARAMS;
1321
1322         /* Mark the information as received */
1323         smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
1324
1325         if (smp->remote_key_dist & SMP_DIST_ID_KEY)
1326                 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
1327         else if (smp->remote_key_dist & SMP_DIST_SIGN)
1328                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1329
1330         skb_pull(skb, sizeof(*rp));
1331
1332         hci_dev_lock(hdev);
1333         authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
1334         ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
1335                           authenticated, smp->tk, smp->enc_key_size,
1336                           rp->ediv, rp->rand);
1337         smp->ltk = ltk;
1338         if (!(smp->remote_key_dist & KEY_DIST_MASK))
1339                 smp_distribute_keys(smp);
1340         hci_dev_unlock(hdev);
1341
1342         return 0;
1343 }
1344
1345 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
1346 {
1347         struct smp_cmd_ident_info *info = (void *) skb->data;
1348         struct l2cap_chan *chan = conn->smp;
1349         struct smp_chan *smp = chan->data;
1350
1351         BT_DBG("");
1352
1353         if (skb->len < sizeof(*info))
1354                 return SMP_INVALID_PARAMS;
1355
1356         SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
1357
1358         skb_pull(skb, sizeof(*info));
1359
1360         memcpy(smp->irk, info->irk, 16);
1361
1362         return 0;
1363 }
1364
1365 static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
1366                                    struct sk_buff *skb)
1367 {
1368         struct smp_cmd_ident_addr_info *info = (void *) skb->data;
1369         struct l2cap_chan *chan = conn->smp;
1370         struct smp_chan *smp = chan->data;
1371         struct hci_conn *hcon = conn->hcon;
1372         bdaddr_t rpa;
1373
1374         BT_DBG("");
1375
1376         if (skb->len < sizeof(*info))
1377                 return SMP_INVALID_PARAMS;
1378
1379         /* Mark the information as received */
1380         smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
1381
1382         if (smp->remote_key_dist & SMP_DIST_SIGN)
1383                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1384
1385         skb_pull(skb, sizeof(*info));
1386
1387         hci_dev_lock(hcon->hdev);
1388
1389         /* Strictly speaking the Core Specification (4.1) allows sending
1390          * an empty address which would force us to rely on just the IRK
1391          * as "identity information". However, since such
1392          * implementations are not known of and in order to not over
1393          * complicate our implementation, simply pretend that we never
1394          * received an IRK for such a device.
1395          */
1396         if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
1397                 BT_ERR("Ignoring IRK with no identity address");
1398                 goto distribute;
1399         }
1400
1401         bacpy(&smp->id_addr, &info->bdaddr);
1402         smp->id_addr_type = info->addr_type;
1403
1404         if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
1405                 bacpy(&rpa, &hcon->dst);
1406         else
1407                 bacpy(&rpa, BDADDR_ANY);
1408
1409         smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
1410                                       smp->id_addr_type, smp->irk, &rpa);
1411
1412 distribute:
1413         if (!(smp->remote_key_dist & KEY_DIST_MASK))
1414                 smp_distribute_keys(smp);
1415
1416         hci_dev_unlock(hcon->hdev);
1417
1418         return 0;
1419 }
1420
1421 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
1422 {
1423         struct smp_cmd_sign_info *rp = (void *) skb->data;
1424         struct l2cap_chan *chan = conn->smp;
1425         struct smp_chan *smp = chan->data;
1426         struct hci_dev *hdev = conn->hcon->hdev;
1427         struct smp_csrk *csrk;
1428
1429         BT_DBG("conn %p", conn);
1430
1431         if (skb->len < sizeof(*rp))
1432                 return SMP_INVALID_PARAMS;
1433
1434         /* Mark the information as received */
1435         smp->remote_key_dist &= ~SMP_DIST_SIGN;
1436
1437         skb_pull(skb, sizeof(*rp));
1438
1439         hci_dev_lock(hdev);
1440         csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1441         if (csrk) {
1442                 csrk->master = 0x01;
1443                 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
1444         }
1445         smp->csrk = csrk;
1446         smp_distribute_keys(smp);
1447         hci_dev_unlock(hdev);
1448
1449         return 0;
1450 }
1451
1452 static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
1453 {
1454         struct l2cap_conn *conn = chan->conn;
1455         struct hci_conn *hcon = conn->hcon;
1456         struct smp_chan *smp;
1457         __u8 code, reason;
1458         int err = 0;
1459
1460         if (hcon->type != LE_LINK) {
1461                 kfree_skb(skb);
1462                 return 0;
1463         }
1464
1465         if (skb->len < 1)
1466                 return -EILSEQ;
1467
1468         if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1469                 reason = SMP_PAIRING_NOTSUPP;
1470                 goto done;
1471         }
1472
1473         code = skb->data[0];
1474         skb_pull(skb, sizeof(code));
1475
1476         smp = chan->data;
1477
1478         if (code > SMP_CMD_MAX)
1479                 goto drop;
1480
1481         if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
1482                 goto drop;
1483
1484         /* If we don't have a context the only allowed commands are
1485          * pairing request and security request.
1486          */
1487         if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ)
1488                 goto drop;
1489
1490         switch (code) {
1491         case SMP_CMD_PAIRING_REQ:
1492                 reason = smp_cmd_pairing_req(conn, skb);
1493                 break;
1494
1495         case SMP_CMD_PAIRING_FAIL:
1496                 smp_failure(conn, 0);
1497                 err = -EPERM;
1498                 break;
1499
1500         case SMP_CMD_PAIRING_RSP:
1501                 reason = smp_cmd_pairing_rsp(conn, skb);
1502                 break;
1503
1504         case SMP_CMD_SECURITY_REQ:
1505                 reason = smp_cmd_security_req(conn, skb);
1506                 break;
1507
1508         case SMP_CMD_PAIRING_CONFIRM:
1509                 reason = smp_cmd_pairing_confirm(conn, skb);
1510                 break;
1511
1512         case SMP_CMD_PAIRING_RANDOM:
1513                 reason = smp_cmd_pairing_random(conn, skb);
1514                 break;
1515
1516         case SMP_CMD_ENCRYPT_INFO:
1517                 reason = smp_cmd_encrypt_info(conn, skb);
1518                 break;
1519
1520         case SMP_CMD_MASTER_IDENT:
1521                 reason = smp_cmd_master_ident(conn, skb);
1522                 break;
1523
1524         case SMP_CMD_IDENT_INFO:
1525                 reason = smp_cmd_ident_info(conn, skb);
1526                 break;
1527
1528         case SMP_CMD_IDENT_ADDR_INFO:
1529                 reason = smp_cmd_ident_addr_info(conn, skb);
1530                 break;
1531
1532         case SMP_CMD_SIGN_INFO:
1533                 reason = smp_cmd_sign_info(conn, skb);
1534                 break;
1535
1536         default:
1537                 BT_DBG("Unknown command code 0x%2.2x", code);
1538                 reason = SMP_CMD_NOTSUPP;
1539                 goto done;
1540         }
1541
1542 done:
1543         if (!err) {
1544                 if (reason)
1545                         smp_failure(conn, reason);
1546                 kfree_skb(skb);
1547         }
1548
1549         return err;
1550
1551 drop:
1552         BT_ERR("%s unexpected SMP command 0x%02x from %pMR", hcon->hdev->name,
1553                code, &hcon->dst);
1554         kfree_skb(skb);
1555         return 0;
1556 }
1557
1558 static void smp_teardown_cb(struct l2cap_chan *chan, int err)
1559 {
1560         struct l2cap_conn *conn = chan->conn;
1561
1562         BT_DBG("chan %p", chan);
1563
1564         if (chan->data)
1565                 smp_chan_destroy(conn);
1566
1567         conn->smp = NULL;
1568         l2cap_chan_put(chan);
1569 }
1570
1571 static void smp_resume_cb(struct l2cap_chan *chan)
1572 {
1573         struct smp_chan *smp = chan->data;
1574         struct l2cap_conn *conn = chan->conn;
1575         struct hci_conn *hcon = conn->hcon;
1576
1577         BT_DBG("chan %p", chan);
1578
1579         if (!smp)
1580                 return;
1581
1582         if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
1583                 return;
1584
1585         cancel_delayed_work(&smp->security_timer);
1586
1587         smp_distribute_keys(smp);
1588 }
1589
1590 static void smp_ready_cb(struct l2cap_chan *chan)
1591 {
1592         struct l2cap_conn *conn = chan->conn;
1593
1594         BT_DBG("chan %p", chan);
1595
1596         conn->smp = chan;
1597         l2cap_chan_hold(chan);
1598 }
1599
1600 static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
1601 {
1602         int err;
1603
1604         BT_DBG("chan %p", chan);
1605
1606         err = smp_sig_channel(chan, skb);
1607         if (err) {
1608                 struct smp_chan *smp = chan->data;
1609
1610                 if (smp)
1611                         cancel_delayed_work_sync(&smp->security_timer);
1612
1613                 hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
1614         }
1615
1616         return err;
1617 }
1618
1619 static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
1620                                         unsigned long hdr_len,
1621                                         unsigned long len, int nb)
1622 {
1623         struct sk_buff *skb;
1624
1625         skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL);
1626         if (!skb)
1627                 return ERR_PTR(-ENOMEM);
1628
1629         skb->priority = HCI_PRIO_MAX;
1630         bt_cb(skb)->chan = chan;
1631
1632         return skb;
1633 }
1634
1635 static const struct l2cap_ops smp_chan_ops = {
1636         .name                   = "Security Manager",
1637         .ready                  = smp_ready_cb,
1638         .recv                   = smp_recv_cb,
1639         .alloc_skb              = smp_alloc_skb_cb,
1640         .teardown               = smp_teardown_cb,
1641         .resume                 = smp_resume_cb,
1642
1643         .new_connection         = l2cap_chan_no_new_connection,
1644         .state_change           = l2cap_chan_no_state_change,
1645         .close                  = l2cap_chan_no_close,
1646         .defer                  = l2cap_chan_no_defer,
1647         .suspend                = l2cap_chan_no_suspend,
1648         .set_shutdown           = l2cap_chan_no_set_shutdown,
1649         .get_sndtimeo           = l2cap_chan_no_get_sndtimeo,
1650         .memcpy_fromiovec       = l2cap_chan_no_memcpy_fromiovec,
1651 };
1652
1653 static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
1654 {
1655         struct l2cap_chan *chan;
1656
1657         BT_DBG("pchan %p", pchan);
1658
1659         chan = l2cap_chan_create();
1660         if (!chan)
1661                 return NULL;
1662
1663         chan->chan_type = pchan->chan_type;
1664         chan->ops       = &smp_chan_ops;
1665         chan->scid      = pchan->scid;
1666         chan->dcid      = chan->scid;
1667         chan->imtu      = pchan->imtu;
1668         chan->omtu      = pchan->omtu;
1669         chan->mode      = pchan->mode;
1670
1671         BT_DBG("created chan %p", chan);
1672
1673         return chan;
1674 }
1675
1676 static const struct l2cap_ops smp_root_chan_ops = {
1677         .name                   = "Security Manager Root",
1678         .new_connection         = smp_new_conn_cb,
1679
1680         /* None of these are implemented for the root channel */
1681         .close                  = l2cap_chan_no_close,
1682         .alloc_skb              = l2cap_chan_no_alloc_skb,
1683         .recv                   = l2cap_chan_no_recv,
1684         .state_change           = l2cap_chan_no_state_change,
1685         .teardown               = l2cap_chan_no_teardown,
1686         .ready                  = l2cap_chan_no_ready,
1687         .defer                  = l2cap_chan_no_defer,
1688         .suspend                = l2cap_chan_no_suspend,
1689         .resume                 = l2cap_chan_no_resume,
1690         .set_shutdown           = l2cap_chan_no_set_shutdown,
1691         .get_sndtimeo           = l2cap_chan_no_get_sndtimeo,
1692         .memcpy_fromiovec       = l2cap_chan_no_memcpy_fromiovec,
1693 };
1694
1695 int smp_register(struct hci_dev *hdev)
1696 {
1697         struct l2cap_chan *chan;
1698         struct crypto_blkcipher *tfm_aes;
1699
1700         BT_DBG("%s", hdev->name);
1701
1702         tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
1703         if (IS_ERR(tfm_aes)) {
1704                 int err = PTR_ERR(tfm_aes);
1705                 BT_ERR("Unable to create crypto context");
1706                 return err;
1707         }
1708
1709         chan = l2cap_chan_create();
1710         if (!chan) {
1711                 crypto_free_blkcipher(tfm_aes);
1712                 return -ENOMEM;
1713         }
1714
1715         chan->data = tfm_aes;
1716
1717         l2cap_add_scid(chan, L2CAP_CID_SMP);
1718
1719         l2cap_chan_set_defaults(chan);
1720
1721         bacpy(&chan->src, &hdev->bdaddr);
1722         chan->src_type = BDADDR_LE_PUBLIC;
1723         chan->state = BT_LISTEN;
1724         chan->mode = L2CAP_MODE_BASIC;
1725         chan->imtu = L2CAP_DEFAULT_MTU;
1726         chan->ops = &smp_root_chan_ops;
1727
1728         hdev->smp_data = chan;
1729
1730         return 0;
1731 }
1732
1733 void smp_unregister(struct hci_dev *hdev)
1734 {
1735         struct l2cap_chan *chan = hdev->smp_data;
1736         struct crypto_blkcipher *tfm_aes;
1737
1738         if (!chan)
1739                 return;
1740
1741         BT_DBG("%s chan %p", hdev->name, chan);
1742
1743         tfm_aes = chan->data;
1744         if (tfm_aes) {
1745                 chan->data = NULL;
1746                 crypto_free_blkcipher(tfm_aes);
1747         }
1748
1749         hdev->smp_data = NULL;
1750         l2cap_chan_put(chan);
1751 }