2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
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;
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.
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.
23 #include <net/bluetooth/bluetooth.h>
24 #include <net/bluetooth/hci_core.h>
25 #include <net/bluetooth/l2cap.h>
26 #include <net/bluetooth/smp.h>
27 #include <linux/crypto.h>
28 #include <linux/scatterlist.h>
29 #include <crypto/b128ops.h>
31 #define SMP_TIMEOUT 30000 /* 30 seconds */
33 static inline void swap128(u8 src
[16], u8 dst
[16])
36 for (i
= 0; i
< 16; i
++)
40 static inline void swap56(u8 src
[7], u8 dst
[7])
43 for (i
= 0; i
< 7; i
++)
47 static int smp_e(struct crypto_blkcipher
*tfm
, const u8
*k
, u8
*r
)
49 struct blkcipher_desc desc
;
50 struct scatterlist sg
;
52 unsigned char iv
[128];
55 BT_ERR("tfm %p", tfm
);
62 err
= crypto_blkcipher_setkey(tfm
, k
, 16);
64 BT_ERR("cipher setkey failed: %d", err
);
68 sg_init_one(&sg
, r
, 16);
70 iv_len
= crypto_blkcipher_ivsize(tfm
);
72 memset(&iv
, 0xff, iv_len
);
73 crypto_blkcipher_set_iv(tfm
, iv
, iv_len
);
76 err
= crypto_blkcipher_encrypt(&desc
, &sg
, &sg
, 16);
78 BT_ERR("Encrypt data error %d", err
);
83 static int smp_c1(struct crypto_blkcipher
*tfm
, u8 k
[16], u8 r
[16],
84 u8 preq
[7], u8 pres
[7], u8 _iat
, bdaddr_t
*ia
,
85 u8 _rat
, bdaddr_t
*ra
, u8 res
[16])
92 /* p1 = pres || preq || _rat || _iat */
100 /* p2 = padding || ia || ra */
101 baswap((bdaddr_t
*) (p2
+ 4), ia
);
102 baswap((bdaddr_t
*) (p2
+ 10), ra
);
105 u128_xor((u128
*) res
, (u128
*) r
, (u128
*) p1
);
107 /* res = e(k, res) */
108 err
= smp_e(tfm
, k
, res
);
110 BT_ERR("Encrypt data error");
114 /* res = res XOR p2 */
115 u128_xor((u128
*) res
, (u128
*) res
, (u128
*) p2
);
117 /* res = e(k, res) */
118 err
= smp_e(tfm
, k
, res
);
120 BT_ERR("Encrypt data error");
125 static int smp_s1(struct crypto_blkcipher
*tfm
, u8 k
[16],
126 u8 r1
[16], u8 r2
[16], u8 _r
[16])
130 /* Just least significant octets from r1 and r2 are considered */
131 memcpy(_r
, r1
+ 8, 8);
132 memcpy(_r
+ 8, r2
+ 8, 8);
134 err
= smp_e(tfm
, k
, _r
);
136 BT_ERR("Encrypt data error");
141 static int smp_rand(u8
*buf
)
143 get_random_bytes(buf
, 16);
148 static struct sk_buff
*smp_build_cmd(struct l2cap_conn
*conn
, u8 code
,
149 u16 dlen
, void *data
)
152 struct l2cap_hdr
*lh
;
155 len
= L2CAP_HDR_SIZE
+ sizeof(code
) + dlen
;
160 skb
= bt_skb_alloc(len
, GFP_ATOMIC
);
164 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
165 lh
->len
= cpu_to_le16(sizeof(code
) + dlen
);
166 lh
->cid
= cpu_to_le16(L2CAP_CID_SMP
);
168 memcpy(skb_put(skb
, sizeof(code
)), &code
, sizeof(code
));
170 memcpy(skb_put(skb
, dlen
), data
, dlen
);
175 static void smp_send_cmd(struct l2cap_conn
*conn
, u8 code
, u16 len
, void *data
)
177 struct sk_buff
*skb
= smp_build_cmd(conn
, code
, len
, data
);
179 BT_DBG("code 0x%2.2x", code
);
184 hci_send_acl(conn
->hcon
, skb
, 0);
186 mod_timer(&conn
->security_timer
, jiffies
+
187 msecs_to_jiffies(SMP_TIMEOUT
));
190 static __u8
seclevel_to_authreq(__u8 level
)
193 case BT_SECURITY_HIGH
:
194 /* Right now we don't support bonding */
195 return SMP_AUTH_MITM
;
198 return SMP_AUTH_NONE
;
202 static void build_pairing_cmd(struct l2cap_conn
*conn
,
203 struct smp_cmd_pairing
*req
,
204 struct smp_cmd_pairing
*rsp
,
210 if (test_bit(HCI_PAIRABLE
, &conn
->hcon
->hdev
->flags
)) {
211 dist_keys
= SMP_DIST_ENC_KEY
| SMP_DIST_ID_KEY
| SMP_DIST_SIGN
;
212 authreq
|= SMP_AUTH_BONDING
;
216 req
->io_capability
= conn
->hcon
->io_capability
;
217 req
->oob_flag
= SMP_OOB_NOT_PRESENT
;
218 req
->max_key_size
= SMP_MAX_ENC_KEY_SIZE
;
219 req
->init_key_dist
= dist_keys
;
220 req
->resp_key_dist
= dist_keys
;
221 req
->auth_req
= authreq
;
225 rsp
->io_capability
= conn
->hcon
->io_capability
;
226 rsp
->oob_flag
= SMP_OOB_NOT_PRESENT
;
227 rsp
->max_key_size
= SMP_MAX_ENC_KEY_SIZE
;
228 rsp
->init_key_dist
= req
->init_key_dist
& dist_keys
;
229 rsp
->resp_key_dist
= req
->resp_key_dist
& dist_keys
;
230 rsp
->auth_req
= authreq
;
233 static u8
check_enc_key_size(struct l2cap_conn
*conn
, __u8 max_key_size
)
235 struct smp_chan
*smp
= conn
->smp_chan
;
237 if ((max_key_size
> SMP_MAX_ENC_KEY_SIZE
) ||
238 (max_key_size
< SMP_MIN_ENC_KEY_SIZE
))
239 return SMP_ENC_KEY_SIZE
;
241 smp
->smp_key_size
= max_key_size
;
246 static void confirm_work(struct work_struct
*work
)
248 struct smp_chan
*smp
= container_of(work
, struct smp_chan
, confirm
);
249 struct l2cap_conn
*conn
= smp
->conn
;
250 struct crypto_blkcipher
*tfm
;
251 struct smp_cmd_pairing_confirm cp
;
255 BT_DBG("conn %p", conn
);
257 tfm
= crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC
);
259 reason
= SMP_UNSPECIFIED
;
266 ret
= smp_c1(tfm
, smp
->tk
, smp
->prnd
, smp
->preq
, smp
->prsp
, 0,
267 conn
->src
, conn
->hcon
->dst_type
, conn
->dst
,
270 ret
= smp_c1(tfm
, smp
->tk
, smp
->prnd
, smp
->preq
, smp
->prsp
,
271 conn
->hcon
->dst_type
, conn
->dst
, 0, conn
->src
,
274 reason
= SMP_UNSPECIFIED
;
278 swap128(res
, cp
.confirm_val
);
279 smp_send_cmd(smp
->conn
, SMP_CMD_PAIRING_CONFIRM
, sizeof(cp
), &cp
);
284 smp_send_cmd(conn
, SMP_CMD_PAIRING_FAIL
, sizeof(reason
), &reason
);
285 smp_chan_destroy(conn
);
288 static void random_work(struct work_struct
*work
)
290 struct smp_chan
*smp
= container_of(work
, struct smp_chan
, random
);
291 struct l2cap_conn
*conn
= smp
->conn
;
292 struct hci_conn
*hcon
= conn
->hcon
;
293 struct crypto_blkcipher
*tfm
= smp
->tfm
;
294 u8 reason
, confirm
[16], res
[16], key
[16];
297 if (IS_ERR_OR_NULL(tfm
)) {
298 reason
= SMP_UNSPECIFIED
;
302 BT_DBG("conn %p %s", conn
, conn
->hcon
->out
? "master" : "slave");
305 ret
= smp_c1(tfm
, smp
->tk
, smp
->rrnd
, smp
->preq
, smp
->prsp
, 0,
306 conn
->src
, hcon
->dst_type
, conn
->dst
,
309 ret
= smp_c1(tfm
, smp
->tk
, smp
->rrnd
, smp
->preq
, smp
->prsp
,
310 hcon
->dst_type
, conn
->dst
, 0, conn
->src
,
313 reason
= SMP_UNSPECIFIED
;
317 swap128(res
, confirm
);
319 if (memcmp(smp
->pcnf
, confirm
, sizeof(smp
->pcnf
)) != 0) {
320 BT_ERR("Pairing failed (confirmation values mismatch)");
321 reason
= SMP_CONFIRM_FAILED
;
329 memset(rand
, 0, sizeof(rand
));
332 smp_s1(tfm
, smp
->tk
, smp
->rrnd
, smp
->prnd
, key
);
335 memset(stk
+ smp
->smp_key_size
, 0,
336 SMP_MAX_ENC_KEY_SIZE
- smp
->smp_key_size
);
338 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND
, &hcon
->pend
)) {
339 reason
= SMP_UNSPECIFIED
;
343 hci_le_start_enc(hcon
, ediv
, rand
, stk
);
344 hcon
->enc_key_size
= smp
->smp_key_size
;
346 u8 stk
[16], r
[16], rand
[8];
349 memset(rand
, 0, sizeof(rand
));
352 swap128(smp
->prnd
, r
);
353 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(r
), r
);
355 smp_s1(tfm
, smp
->tk
, smp
->prnd
, smp
->rrnd
, key
);
358 memset(stk
+ smp
->smp_key_size
, 0,
359 SMP_MAX_ENC_KEY_SIZE
- smp
->smp_key_size
);
361 hci_add_ltk(hcon
->hdev
, 0, conn
->dst
, smp
->smp_key_size
,
368 smp_send_cmd(conn
, SMP_CMD_PAIRING_FAIL
, sizeof(reason
), &reason
);
369 smp_chan_destroy(conn
);
372 static struct smp_chan
*smp_chan_create(struct l2cap_conn
*conn
)
374 struct smp_chan
*smp
;
376 smp
= kzalloc(sizeof(struct smp_chan
), GFP_ATOMIC
);
380 INIT_WORK(&smp
->confirm
, confirm_work
);
381 INIT_WORK(&smp
->random
, random_work
);
384 conn
->smp_chan
= smp
;
386 hci_conn_hold(conn
->hcon
);
391 void smp_chan_destroy(struct l2cap_conn
*conn
)
393 kfree(conn
->smp_chan
);
394 hci_conn_put(conn
->hcon
);
397 static u8
smp_cmd_pairing_req(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
399 struct smp_cmd_pairing rsp
, *req
= (void *) skb
->data
;
400 struct smp_chan
*smp
;
404 BT_DBG("conn %p", conn
);
406 if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->pend
))
407 smp
= smp_chan_create(conn
);
409 smp
= conn
->smp_chan
;
411 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
412 memcpy(&smp
->preq
[1], req
, sizeof(*req
));
413 skb_pull(skb
, sizeof(*req
));
416 return SMP_OOB_NOT_AVAIL
;
418 /* We didn't start the pairing, so no requirements */
419 build_pairing_cmd(conn
, req
, &rsp
, SMP_AUTH_NONE
);
421 key_size
= min(req
->max_key_size
, rsp
.max_key_size
);
422 if (check_enc_key_size(conn
, key_size
))
423 return SMP_ENC_KEY_SIZE
;
426 memset(smp
->tk
, 0, sizeof(smp
->tk
));
428 ret
= smp_rand(smp
->prnd
);
430 return SMP_UNSPECIFIED
;
432 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
433 memcpy(&smp
->prsp
[1], &rsp
, sizeof(rsp
));
435 smp_send_cmd(conn
, SMP_CMD_PAIRING_RSP
, sizeof(rsp
), &rsp
);
440 static u8
smp_cmd_pairing_rsp(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
442 struct smp_cmd_pairing
*req
, *rsp
= (void *) skb
->data
;
443 struct smp_chan
*smp
= conn
->smp_chan
;
444 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
448 BT_DBG("conn %p", conn
);
450 skb_pull(skb
, sizeof(*rsp
));
452 req
= (void *) &smp
->preq
[1];
454 key_size
= min(req
->max_key_size
, rsp
->max_key_size
);
455 if (check_enc_key_size(conn
, key_size
))
456 return SMP_ENC_KEY_SIZE
;
459 return SMP_OOB_NOT_AVAIL
;
462 memset(smp
->tk
, 0, sizeof(smp
->tk
));
464 ret
= smp_rand(smp
->prnd
);
466 return SMP_UNSPECIFIED
;
468 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
469 memcpy(&smp
->prsp
[1], rsp
, sizeof(*rsp
));
471 queue_work(hdev
->workqueue
, &smp
->confirm
);
476 static u8
smp_cmd_pairing_confirm(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
478 struct smp_chan
*smp
= conn
->smp_chan
;
479 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
481 BT_DBG("conn %p %s", conn
, conn
->hcon
->out
? "master" : "slave");
483 memcpy(smp
->pcnf
, skb
->data
, sizeof(smp
->pcnf
));
484 skb_pull(skb
, sizeof(smp
->pcnf
));
486 if (conn
->hcon
->out
) {
489 swap128(smp
->prnd
, random
);
490 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(random
),
493 queue_work(hdev
->workqueue
, &smp
->confirm
);
499 static u8
smp_cmd_pairing_random(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
501 struct smp_chan
*smp
= conn
->smp_chan
;
502 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
504 BT_DBG("conn %p", conn
);
506 swap128(skb
->data
, smp
->rrnd
);
507 skb_pull(skb
, sizeof(smp
->rrnd
));
509 queue_work(hdev
->workqueue
, &smp
->random
);
514 static u8
smp_cmd_security_req(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
516 struct smp_cmd_security_req
*rp
= (void *) skb
->data
;
517 struct smp_cmd_pairing cp
;
518 struct hci_conn
*hcon
= conn
->hcon
;
519 struct smp_chan
*smp
;
521 BT_DBG("conn %p", conn
);
523 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->pend
))
526 smp
= smp_chan_create(conn
);
528 skb_pull(skb
, sizeof(*rp
));
530 memset(&cp
, 0, sizeof(cp
));
531 build_pairing_cmd(conn
, &cp
, NULL
, rp
->auth_req
);
533 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
534 memcpy(&smp
->preq
[1], &cp
, sizeof(cp
));
536 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(cp
), &cp
);
541 int smp_conn_security(struct l2cap_conn
*conn
, __u8 sec_level
)
543 struct hci_conn
*hcon
= conn
->hcon
;
544 struct smp_chan
*smp
= conn
->smp_chan
;
547 BT_DBG("conn %p hcon %p level 0x%2.2x", conn
, hcon
, sec_level
);
549 if (!lmp_host_le_capable(hcon
->hdev
))
552 if (sec_level
== BT_SECURITY_LOW
)
555 if (hcon
->sec_level
>= sec_level
)
558 if (hcon
->link_mode
& HCI_LM_MASTER
) {
559 struct link_key
*key
;
561 key
= hci_find_link_key_type(hcon
->hdev
, conn
->dst
,
564 struct key_master_id
*master
= (void *) key
->data
;
566 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND
,
570 hci_le_start_enc(hcon
, master
->ediv
, master
->rand
,
572 hcon
->enc_key_size
= key
->pin_len
;
578 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->pend
))
581 smp
= smp_chan_create(conn
);
583 authreq
= seclevel_to_authreq(sec_level
);
585 if (hcon
->link_mode
& HCI_LM_MASTER
) {
586 struct smp_cmd_pairing cp
;
588 build_pairing_cmd(conn
, &cp
, NULL
, authreq
);
589 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
590 memcpy(&smp
->preq
[1], &cp
, sizeof(cp
));
592 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(cp
), &cp
);
594 struct smp_cmd_security_req cp
;
595 cp
.auth_req
= authreq
;
596 smp_send_cmd(conn
, SMP_CMD_SECURITY_REQ
, sizeof(cp
), &cp
);
600 hcon
->pending_sec_level
= sec_level
;
605 static int smp_cmd_encrypt_info(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
607 struct smp_cmd_encrypt_info
*rp
= (void *) skb
->data
;
608 struct smp_chan
*smp
= conn
->smp_chan
;
610 skb_pull(skb
, sizeof(*rp
));
612 memcpy(smp
->tk
, rp
->ltk
, sizeof(smp
->tk
));
617 static int smp_cmd_master_ident(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
619 struct smp_cmd_master_ident
*rp
= (void *) skb
->data
;
620 struct smp_chan
*smp
= conn
->smp_chan
;
622 skb_pull(skb
, sizeof(*rp
));
624 hci_add_ltk(conn
->hcon
->hdev
, 1, conn
->src
, smp
->smp_key_size
,
625 rp
->ediv
, rp
->rand
, smp
->tk
);
627 smp_distribute_keys(conn
, 1);
632 int smp_sig_channel(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
634 __u8 code
= skb
->data
[0];
638 if (!lmp_host_le_capable(conn
->hcon
->hdev
)) {
640 reason
= SMP_PAIRING_NOTSUPP
;
644 skb_pull(skb
, sizeof(code
));
647 case SMP_CMD_PAIRING_REQ
:
648 reason
= smp_cmd_pairing_req(conn
, skb
);
651 case SMP_CMD_PAIRING_FAIL
:
656 case SMP_CMD_PAIRING_RSP
:
657 reason
= smp_cmd_pairing_rsp(conn
, skb
);
660 case SMP_CMD_SECURITY_REQ
:
661 reason
= smp_cmd_security_req(conn
, skb
);
664 case SMP_CMD_PAIRING_CONFIRM
:
665 reason
= smp_cmd_pairing_confirm(conn
, skb
);
668 case SMP_CMD_PAIRING_RANDOM
:
669 reason
= smp_cmd_pairing_random(conn
, skb
);
672 case SMP_CMD_ENCRYPT_INFO
:
673 reason
= smp_cmd_encrypt_info(conn
, skb
);
676 case SMP_CMD_MASTER_IDENT
:
677 reason
= smp_cmd_master_ident(conn
, skb
);
680 case SMP_CMD_IDENT_INFO
:
681 case SMP_CMD_IDENT_ADDR_INFO
:
682 case SMP_CMD_SIGN_INFO
:
688 BT_DBG("Unknown command code 0x%2.2x", code
);
690 reason
= SMP_CMD_NOTSUPP
;
697 smp_send_cmd(conn
, SMP_CMD_PAIRING_FAIL
, sizeof(reason
),
704 int smp_distribute_keys(struct l2cap_conn
*conn
, __u8 force
)
706 struct smp_cmd_pairing
*req
, *rsp
;
707 struct smp_chan
*smp
= conn
->smp_chan
;
710 BT_DBG("conn %p force %d", conn
, force
);
712 if (!test_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->pend
))
715 rsp
= (void *) &smp
->prsp
[1];
717 /* The responder sends its keys first */
718 if (!force
&& conn
->hcon
->out
&& (rsp
->resp_key_dist
& 0x07))
721 req
= (void *) &smp
->preq
[1];
723 if (conn
->hcon
->out
) {
724 keydist
= &rsp
->init_key_dist
;
725 *keydist
&= req
->init_key_dist
;
727 keydist
= &rsp
->resp_key_dist
;
728 *keydist
&= req
->resp_key_dist
;
732 BT_DBG("keydist 0x%x", *keydist
);
734 if (*keydist
& SMP_DIST_ENC_KEY
) {
735 struct smp_cmd_encrypt_info enc
;
736 struct smp_cmd_master_ident ident
;
739 get_random_bytes(enc
.ltk
, sizeof(enc
.ltk
));
740 get_random_bytes(&ediv
, sizeof(ediv
));
741 get_random_bytes(ident
.rand
, sizeof(ident
.rand
));
743 smp_send_cmd(conn
, SMP_CMD_ENCRYPT_INFO
, sizeof(enc
), &enc
);
745 hci_add_ltk(conn
->hcon
->hdev
, 1, conn
->dst
, smp
->smp_key_size
,
746 ediv
, ident
.rand
, enc
.ltk
);
748 ident
.ediv
= cpu_to_le16(ediv
);
750 smp_send_cmd(conn
, SMP_CMD_MASTER_IDENT
, sizeof(ident
), &ident
);
752 *keydist
&= ~SMP_DIST_ENC_KEY
;
755 if (*keydist
& SMP_DIST_ID_KEY
) {
756 struct smp_cmd_ident_addr_info addrinfo
;
757 struct smp_cmd_ident_info idinfo
;
759 /* Send a dummy key */
760 get_random_bytes(idinfo
.irk
, sizeof(idinfo
.irk
));
762 smp_send_cmd(conn
, SMP_CMD_IDENT_INFO
, sizeof(idinfo
), &idinfo
);
764 /* Just public address */
765 memset(&addrinfo
, 0, sizeof(addrinfo
));
766 bacpy(&addrinfo
.bdaddr
, conn
->src
);
768 smp_send_cmd(conn
, SMP_CMD_IDENT_ADDR_INFO
, sizeof(addrinfo
),
771 *keydist
&= ~SMP_DIST_ID_KEY
;
774 if (*keydist
& SMP_DIST_SIGN
) {
775 struct smp_cmd_sign_info sign
;
777 /* Send a dummy key */
778 get_random_bytes(sign
.csrk
, sizeof(sign
.csrk
));
780 smp_send_cmd(conn
, SMP_CMD_SIGN_INFO
, sizeof(sign
), &sign
);
782 *keydist
&= ~SMP_DIST_SIGN
;
785 if (conn
->hcon
->out
|| force
) {
786 clear_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->pend
);
787 del_timer(&conn
->security_timer
);
788 smp_chan_destroy(conn
);