Skip to content

Commit

Permalink
Bluetooth: Temporary keys should be retained during connection
Browse files Browse the repository at this point in the history
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: Vishal Agarwal <vishal.agarwal@stericsson.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
  • Loading branch information
Vishal Agarwal authored and Johan Hedberg committed Apr 16, 2012
1 parent 745c0ce commit 6ec5bca
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 4 deletions.
1 change: 1 addition & 0 deletions include/net/bluetooth/hci_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ struct hci_conn {

__u8 remote_cap;
__u8 remote_auth;
bool flush_key;

unsigned int sent;

Expand Down
6 changes: 2 additions & 4 deletions net/bluetooth/hci_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

if (!persistent) {
list_del(&key->list);
kfree(key);
}
if (conn)
conn->flush_key = !persistent;

return 0;
}
Expand Down
2 changes: 2 additions & 0 deletions net/bluetooth/hci_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -1902,6 +1902,8 @@ static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff
}

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_conn_del(conn);
}
Expand Down

0 comments on commit 6ec5bca

Please sign in to comment.