Bluetooth: Add new structures for handling SMP Long Term Keys
This includes a new list for storing the keys and a new structure used to represent each key. Some notes: authenticated is used to identify that the key may be used to setup a HIGH security link. As the same list is used to store both the STK's and the LTK's the type field is used so we can separate between those two types of keys and if the key should be used when in the master or slave role. Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@openbossa.org> Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
committed by
Johan Hedberg
parent
650f726d16
commit
b899efaf9b
@@ -1163,6 +1163,18 @@ int hci_link_keys_clear(struct hci_dev *hdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hci_smp_ltks_clear(struct hci_dev *hdev)
|
||||
{
|
||||
struct smp_ltk *k, *tmp;
|
||||
|
||||
list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
|
||||
list_del(&k->list);
|
||||
kfree(k);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
|
||||
{
|
||||
struct link_key *k;
|
||||
@@ -1355,6 +1367,23 @@ int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr)
|
||||
{
|
||||
struct smp_ltk *k, *tmp;
|
||||
|
||||
list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
|
||||
if (bacmp(bdaddr, &k->bdaddr))
|
||||
continue;
|
||||
|
||||
BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
|
||||
|
||||
list_del(&k->list);
|
||||
kfree(k);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* HCI command timer function */
|
||||
static void hci_cmd_timer(unsigned long arg)
|
||||
{
|
||||
@@ -1638,6 +1667,7 @@ int hci_register_dev(struct hci_dev *hdev)
|
||||
INIT_LIST_HEAD(&hdev->uuids);
|
||||
|
||||
INIT_LIST_HEAD(&hdev->link_keys);
|
||||
INIT_LIST_HEAD(&hdev->long_term_keys);
|
||||
|
||||
INIT_LIST_HEAD(&hdev->remote_oob_data);
|
||||
|
||||
@@ -1739,6 +1769,7 @@ void hci_unregister_dev(struct hci_dev *hdev)
|
||||
hci_blacklist_clear(hdev);
|
||||
hci_uuids_clear(hdev);
|
||||
hci_link_keys_clear(hdev);
|
||||
hci_smp_ltks_clear(hdev);
|
||||
hci_remote_oob_data_clear(hdev);
|
||||
hci_adv_entries_clear(hdev);
|
||||
hci_dev_unlock(hdev);
|
||||
|
Reference in New Issue
Block a user