diff options
Diffstat (limited to 'net/bluetooth/hci_core.c')
-rw-r--r-- | net/bluetooth/hci_core.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 172041e2b15a..f575abdf2b4e 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -3121,13 +3121,16 @@ static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn, | |||
3121 | return false; | 3121 | return false; |
3122 | } | 3122 | } |
3123 | 3123 | ||
3124 | static bool ltk_type_master(u8 type) | 3124 | static u8 ltk_role(u8 type) |
3125 | { | 3125 | { |
3126 | return (type == SMP_LTK); | 3126 | if (type == SMP_LTK) |
3127 | return HCI_ROLE_MASTER; | ||
3128 | |||
3129 | return HCI_ROLE_SLAVE; | ||
3127 | } | 3130 | } |
3128 | 3131 | ||
3129 | struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, __le64 rand, | 3132 | struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, __le64 rand, |
3130 | bool master) | 3133 | u8 role) |
3131 | { | 3134 | { |
3132 | struct smp_ltk *k; | 3135 | struct smp_ltk *k; |
3133 | 3136 | ||
@@ -3135,7 +3138,7 @@ struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, __le64 rand, | |||
3135 | if (k->ediv != ediv || k->rand != rand) | 3138 | if (k->ediv != ediv || k->rand != rand) |
3136 | continue; | 3139 | continue; |
3137 | 3140 | ||
3138 | if (ltk_type_master(k->type) != master) | 3141 | if (ltk_role(k->type) != role) |
3139 | continue; | 3142 | continue; |
3140 | 3143 | ||
3141 | return k; | 3144 | return k; |
@@ -3145,14 +3148,14 @@ struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, __le64 rand, | |||
3145 | } | 3148 | } |
3146 | 3149 | ||
3147 | struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr, | 3150 | struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr, |
3148 | u8 addr_type, bool master) | 3151 | u8 addr_type, u8 role) |
3149 | { | 3152 | { |
3150 | struct smp_ltk *k; | 3153 | struct smp_ltk *k; |
3151 | 3154 | ||
3152 | list_for_each_entry(k, &hdev->long_term_keys, list) | 3155 | list_for_each_entry(k, &hdev->long_term_keys, list) |
3153 | if (addr_type == k->bdaddr_type && | 3156 | if (addr_type == k->bdaddr_type && |
3154 | bacmp(bdaddr, &k->bdaddr) == 0 && | 3157 | bacmp(bdaddr, &k->bdaddr) == 0 && |
3155 | ltk_type_master(k->type) == master) | 3158 | ltk_role(k->type) == role) |
3156 | return k; | 3159 | return k; |
3157 | 3160 | ||
3158 | return NULL; | 3161 | return NULL; |
@@ -3247,9 +3250,9 @@ struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, | |||
3247 | u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand) | 3250 | u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand) |
3248 | { | 3251 | { |
3249 | struct smp_ltk *key, *old_key; | 3252 | struct smp_ltk *key, *old_key; |
3250 | bool master = ltk_type_master(type); | 3253 | u8 role = ltk_role(type); |
3251 | 3254 | ||
3252 | old_key = hci_find_ltk_by_addr(hdev, bdaddr, addr_type, master); | 3255 | old_key = hci_find_ltk_by_addr(hdev, bdaddr, addr_type, role); |
3253 | if (old_key) | 3256 | if (old_key) |
3254 | key = old_key; | 3257 | key = old_key; |
3255 | else { | 3258 | else { |