Commit 6ec5bcad authored by Vishal Agarwal's avatar Vishal Agarwal Committed by Johan Hedberg

Bluetooth: Temporary keys should be retained during connection

If a key is non persistent then it should not be used in future
connections but it should be kept for current connection. And it
should be removed when connecion is removed.
Signed-off-by: default avatarVishal Agarwal <vishal.agarwal@stericsson.com>
Acked-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent 745c0ce3
...@@ -314,6 +314,7 @@ struct hci_conn { ...@@ -314,6 +314,7 @@ struct hci_conn {
__u8 remote_cap; __u8 remote_cap;
__u8 remote_auth; __u8 remote_auth;
bool flush_key;
unsigned int sent; unsigned int sent;
......
...@@ -1330,10 +1330,8 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key, ...@@ -1330,10 +1330,8 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
mgmt_new_link_key(hdev, key, persistent); mgmt_new_link_key(hdev, key, persistent);
if (!persistent) { if (conn)
list_del(&key->list); conn->flush_key = !persistent;
kfree(key);
}
return 0; return 0;
} }
......
...@@ -1902,6 +1902,8 @@ static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff ...@@ -1902,6 +1902,8 @@ static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff
} }
if (ev->status == 0) { if (ev->status == 0) {
if (conn->type == ACL_LINK && conn->flush_key)
hci_remove_link_key(hdev, &conn->dst);
hci_proto_disconn_cfm(conn, ev->reason); hci_proto_disconn_cfm(conn, ev->reason);
hci_conn_del(conn); hci_conn_del(conn);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment