Bluetooth: Add store_hint parameter to mgmt_new_key
Even for keys that shouldn't be stored some use cases require the knowledge of a new key having been created so that the conclusion of a successful pairing can be made. Therefore, always send the mgmt_new_key event but add a store_hint parameter to it to indicate to user space whether the key should be stored or not. Signed-off-by: Johan Hedberg <johan.hedberg@nokia.com> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
This commit is contained in:
parent
4748fed2d1
commit
4df378a10e
|
@ -775,7 +775,7 @@ int mgmt_index_removed(u16 index);
|
||||||
int mgmt_powered(u16 index, u8 powered);
|
int mgmt_powered(u16 index, u8 powered);
|
||||||
int mgmt_discoverable(u16 index, u8 discoverable);
|
int mgmt_discoverable(u16 index, u8 discoverable);
|
||||||
int mgmt_connectable(u16 index, u8 connectable);
|
int mgmt_connectable(u16 index, u8 connectable);
|
||||||
int mgmt_new_key(u16 index, struct link_key *key);
|
int mgmt_new_key(u16 index, struct link_key *key, u8 persistent);
|
||||||
int mgmt_connected(u16 index, bdaddr_t *bdaddr);
|
int mgmt_connected(u16 index, bdaddr_t *bdaddr);
|
||||||
int mgmt_disconnected(u16 index, bdaddr_t *bdaddr);
|
int mgmt_disconnected(u16 index, bdaddr_t *bdaddr);
|
||||||
int mgmt_disconnect_failed(u16 index);
|
int mgmt_disconnect_failed(u16 index);
|
||||||
|
|
|
@ -230,6 +230,7 @@ struct mgmt_ev_controller_error {
|
||||||
|
|
||||||
#define MGMT_EV_NEW_KEY 0x000A
|
#define MGMT_EV_NEW_KEY 0x000A
|
||||||
struct mgmt_ev_new_key {
|
struct mgmt_ev_new_key {
|
||||||
|
__u8 store_hint;
|
||||||
struct mgmt_key_info key;
|
struct mgmt_key_info key;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
|
|
@ -1062,7 +1062,7 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
|
||||||
bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len)
|
bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len)
|
||||||
{
|
{
|
||||||
struct link_key *key, *old_key;
|
struct link_key *key, *old_key;
|
||||||
u8 old_key_type;
|
u8 old_key_type, persistent;
|
||||||
|
|
||||||
old_key = hci_find_link_key(hdev, bdaddr);
|
old_key = hci_find_link_key(hdev, bdaddr);
|
||||||
if (old_key) {
|
if (old_key) {
|
||||||
|
@ -1089,12 +1089,6 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
|
||||||
conn->key_type = type;
|
conn->key_type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_key && !hci_persistent_key(hdev, conn, type, old_key_type)) {
|
|
||||||
list_del(&key->list);
|
|
||||||
kfree(key);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bacpy(&key->bdaddr, bdaddr);
|
bacpy(&key->bdaddr, bdaddr);
|
||||||
memcpy(key->val, val, 16);
|
memcpy(key->val, val, 16);
|
||||||
key->pin_len = pin_len;
|
key->pin_len = pin_len;
|
||||||
|
@ -1104,8 +1098,17 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
|
||||||
else
|
else
|
||||||
key->type = type;
|
key->type = type;
|
||||||
|
|
||||||
if (new_key)
|
if (!new_key)
|
||||||
mgmt_new_key(hdev->id, key);
|
return 0;
|
||||||
|
|
||||||
|
persistent = hci_persistent_key(hdev, conn, type, old_key_type);
|
||||||
|
|
||||||
|
mgmt_new_key(hdev->id, key, persistent);
|
||||||
|
|
||||||
|
if (!persistent) {
|
||||||
|
list_del(&key->list);
|
||||||
|
kfree(key);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1858,12 +1858,13 @@ int mgmt_connectable(u16 index, u8 connectable)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mgmt_new_key(u16 index, struct link_key *key)
|
int mgmt_new_key(u16 index, struct link_key *key, u8 persistent)
|
||||||
{
|
{
|
||||||
struct mgmt_ev_new_key ev;
|
struct mgmt_ev_new_key ev;
|
||||||
|
|
||||||
memset(&ev, 0, sizeof(ev));
|
memset(&ev, 0, sizeof(ev));
|
||||||
|
|
||||||
|
ev.store_hint = persistent;
|
||||||
bacpy(&ev.key.bdaddr, &key->bdaddr);
|
bacpy(&ev.key.bdaddr, &key->bdaddr);
|
||||||
ev.key.type = key->type;
|
ev.key.type = key->type;
|
||||||
memcpy(ev.key.val, key->val, 16);
|
memcpy(ev.key.val, key->val, 16);
|
||||||
|
|
Loading…
Reference in New Issue