mirror of https://gitee.com/openkylin/linux.git
Bluetooth: Fix sending wrong store hint for new long term keys
The long term keys should only be stored when they belong to an indentity address. The identity address can either be a public address or a random static address. For all other addresses (unresovable or resolvable) tell userspace that the long term key is not persistent. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
490cb0b318
commit
0fe442ff85
|
@ -2685,6 +2685,7 @@ int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type,
|
||||||
{
|
{
|
||||||
struct smp_ltk *key, *old_key;
|
struct smp_ltk *key, *old_key;
|
||||||
bool master = ltk_type_master(type);
|
bool master = ltk_type_master(type);
|
||||||
|
u8 persistent;
|
||||||
|
|
||||||
old_key = hci_find_ltk_by_addr(hdev, bdaddr, addr_type, master);
|
old_key = hci_find_ltk_by_addr(hdev, bdaddr, addr_type, master);
|
||||||
if (old_key)
|
if (old_key)
|
||||||
|
@ -2708,8 +2709,13 @@ int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type,
|
||||||
if (!new_key)
|
if (!new_key)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (addr_type == ADDR_LE_DEV_RANDOM && (bdaddr->b[5] & 0xc0) != 0xc0)
|
||||||
|
persistent = 0;
|
||||||
|
else
|
||||||
|
persistent = 1;
|
||||||
|
|
||||||
if (type == HCI_SMP_LTK || type == HCI_SMP_LTK_SLAVE)
|
if (type == HCI_SMP_LTK || type == HCI_SMP_LTK_SLAVE)
|
||||||
mgmt_new_ltk(hdev, key, 1);
|
mgmt_new_ltk(hdev, key, persistent);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue