Skip to content

Commit d7b2545

Browse files
Johan Hedbergholtmann
authored andcommitted
Bluetooth: Clearly distinguish mgmt LTK type from authenticated property
On the mgmt level we have a key type parameter which currently accepts two possible values: 0x00 for unauthenticated and 0x01 for authenticated. However, in the internal struct smp_ltk representation we have an explicit "authenticated" boolean value. To make this distinction clear, add defines for the possible mgmt values and do conversion to and from the internal authenticated value. Signed-off-by: Johan Hedberg <[email protected]> Signed-off-by: Marcel Holtmann <[email protected]>
1 parent 1cc6114 commit d7b2545

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

include/net/bluetooth/mgmt.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ struct mgmt_cp_load_link_keys {
181181
} __packed;
182182
#define MGMT_LOAD_LINK_KEYS_SIZE 3
183183

184+
#define MGMT_LTK_UNAUTHENTICATED 0x00
185+
#define MGMT_LTK_AUTHENTICATED 0x01
186+
184187
struct mgmt_ltk_info {
185188
struct mgmt_addr_info addr;
186189
__u8 type;

net/bluetooth/mgmt.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4534,7 +4534,7 @@ static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
45344534

45354535
for (i = 0; i < key_count; i++) {
45364536
struct mgmt_ltk_info *key = &cp->keys[i];
4537-
u8 type, addr_type;
4537+
u8 type, addr_type, authenticated;
45384538

45394539
if (key->addr.type == BDADDR_LE_PUBLIC)
45404540
addr_type = ADDR_LE_DEV_PUBLIC;
@@ -4546,8 +4546,13 @@ static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
45464546
else
45474547
type = HCI_SMP_LTK_SLAVE;
45484548

4549+
if (key->type == MGMT_LTK_UNAUTHENTICATED)
4550+
authenticated = 0x00;
4551+
else
4552+
authenticated = 0x01;
4553+
45494554
hci_add_ltk(hdev, &key->addr.bdaddr, addr_type, type,
4550-
key->type, key->val, key->enc_size, key->ediv,
4555+
authenticated, key->val, key->enc_size, key->ediv,
45514556
key->rand);
45524557
}
45534558

@@ -5222,6 +5227,14 @@ void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
52225227
mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
52235228
}
52245229

5230+
static u8 mgmt_ltk_type(struct smp_ltk *ltk)
5231+
{
5232+
if (ltk->authenticated)
5233+
return MGMT_LTK_AUTHENTICATED;
5234+
5235+
return MGMT_LTK_UNAUTHENTICATED;
5236+
}
5237+
52255238
void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
52265239
{
52275240
struct mgmt_ev_new_long_term_key ev;
@@ -5247,7 +5260,7 @@ void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
52475260

52485261
bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
52495262
ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
5250-
ev.key.type = key->authenticated;
5263+
ev.key.type = mgmt_ltk_type(key);
52515264
ev.key.enc_size = key->enc_size;
52525265
ev.key.ediv = key->ediv;
52535266
ev.key.rand = key->rand;

0 commit comments

Comments
 (0)