aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2014-02-28 03:10:16 -0500
committerJohan Hedberg <johan.hedberg@intel.com>2014-02-28 05:36:10 -0500
commit759331d7cc660be17bcdc5df53f196135f9dfaf6 (patch)
tree1ee15a589cd278f0ac9451434a962f8a64ca92ee /net/bluetooth
parentfe39c7b2dacf7fd4dcddc26704d01315ab92b7cb (diff)
Bluetooth: Fix clearing SMP keys if pairing fails
If SMP fails we should not leave any keys (LTKs or IRKs) hanging around the internal lists. This patch adds the necessary code to smp_chan_destroy to remove any keys we may have in case of pairing failure. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth')
-rw-r--r--net/bluetooth/smp.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index 99abffcaf16b..f1cb6a32e93f 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -589,6 +589,24 @@ void smp_chan_destroy(struct l2cap_conn *conn)
589 complete = test_bit(SMP_FLAG_COMPLETE, &smp->smp_flags); 589 complete = test_bit(SMP_FLAG_COMPLETE, &smp->smp_flags);
590 mgmt_smp_complete(conn->hcon, complete); 590 mgmt_smp_complete(conn->hcon, complete);
591 591
592 /* If pairing failed clean up any keys we might have */
593 if (!complete) {
594 if (smp->ltk) {
595 list_del(&smp->ltk->list);
596 kfree(smp->ltk);
597 }
598
599 if (smp->slave_ltk) {
600 list_del(&smp->slave_ltk->list);
601 kfree(smp->slave_ltk);
602 }
603
604 if (smp->remote_irk) {
605 list_del(&smp->remote_irk->list);
606 kfree(smp->remote_irk);
607 }
608 }
609
592 kfree(smp); 610 kfree(smp);
593 conn->smp_chan = NULL; 611 conn->smp_chan = NULL;
594 conn->hcon->smp_conn = NULL; 612 conn->hcon->smp_conn = NULL;