diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2014-06-24 06:15:51 -0400 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2014-07-03 11:42:45 -0400 |
commit | 6d5650c4e519794fcc441635ea54f47d68140c93 (patch) | |
tree | 51c1ba7e8c1a3607512b31a039311b53149ea0ed /net/bluetooth/hci_event.c | |
parent | 0663b297f1953e5d84928722e44f71272f5ff058 (diff) |
Bluetooth: Don't store debug keys if flag for them is not set
Instead of waiting for a disconnection to occur to remove a debug key
simply never store it in the list to begin with. This means we can also
remove the debug keys check when looking up keys in
hci_link_key_request_evt().
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r-- | net/bluetooth/hci_event.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index b0fdeec2f2ca..c92c5a020fe7 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c | |||
@@ -3066,12 +3066,6 @@ static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb) | |||
3066 | BT_DBG("%s found key type %u for %pMR", hdev->name, key->type, | 3066 | BT_DBG("%s found key type %u for %pMR", hdev->name, key->type, |
3067 | &ev->bdaddr); | 3067 | &ev->bdaddr); |
3068 | 3068 | ||
3069 | if (!test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags) && | ||
3070 | key->type == HCI_LK_DEBUG_COMBINATION) { | ||
3071 | BT_DBG("%s ignoring debug key", hdev->name); | ||
3072 | goto not_found; | ||
3073 | } | ||
3074 | |||
3075 | conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr); | 3069 | conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr); |
3076 | if (conn) { | 3070 | if (conn) { |
3077 | if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 || | 3071 | if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 || |
@@ -3141,8 +3135,18 @@ static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb) | |||
3141 | 3135 | ||
3142 | mgmt_new_link_key(hdev, key, persistent); | 3136 | mgmt_new_link_key(hdev, key, persistent); |
3143 | 3137 | ||
3144 | if (conn) | 3138 | /* Keep debug keys around only if the HCI_KEEP_DEBUG_KEYS flag |
3139 | * is set. If it's not set simply remove the key from the kernel | ||
3140 | * list (we've still notified user space about it but with | ||
3141 | * store_hint being 0). | ||
3142 | */ | ||
3143 | if (key->type == HCI_LK_DEBUG_COMBINATION && | ||
3144 | !test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags)) { | ||
3145 | list_del(&key->list); | ||
3146 | kfree(key); | ||
3147 | } else if (conn) { | ||
3145 | conn->flush_key = !persistent; | 3148 | conn->flush_key = !persistent; |
3149 | } | ||
3146 | 3150 | ||
3147 | unlock: | 3151 | unlock: |
3148 | hci_dev_unlock(hdev); | 3152 | hci_dev_unlock(hdev); |