@@ -2833,8 +2833,7 @@ static int load_link_keys(struct sock *sk, struct hci_dev *hdev, void *data,
2833
2833
for (i = 0 ; i < key_count ; i ++ ) {
2834
2834
struct mgmt_link_key_info * key = & cp -> keys [i ];
2835
2835
2836
- /* Considering SMP over BREDR/LE, there is no need to check addr_type */
2837
- if (key -> type > 0x08 )
2836
+ if (key -> addr .type != BDADDR_BREDR || key -> type > 0x08 )
2838
2837
return mgmt_cmd_status (sk , hdev -> id ,
2839
2838
MGMT_OP_LOAD_LINK_KEYS ,
2840
2839
MGMT_STATUS_INVALID_PARAMS );
@@ -7089,7 +7088,6 @@ static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data,
7089
7088
7090
7089
for (i = 0 ; i < irk_count ; i ++ ) {
7091
7090
struct mgmt_irk_info * irk = & cp -> irks [i ];
7092
- u8 addr_type = le_addr_type (irk -> addr .type );
7093
7091
7094
7092
if (hci_is_blocked_key (hdev ,
7095
7093
HCI_BLOCKED_KEY_TYPE_IRK ,
@@ -7099,12 +7097,8 @@ static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data,
7099
7097
continue ;
7100
7098
}
7101
7099
7102
- /* When using SMP over BR/EDR, the addr type should be set to BREDR */
7103
- if (irk -> addr .type == BDADDR_BREDR )
7104
- addr_type = BDADDR_BREDR ;
7105
-
7106
7100
hci_add_irk (hdev , & irk -> addr .bdaddr ,
7107
- addr_type , irk -> val ,
7101
+ le_addr_type ( irk -> addr . type ) , irk -> val ,
7108
7102
BDADDR_ANY );
7109
7103
}
7110
7104
@@ -7185,7 +7179,6 @@ static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
7185
7179
for (i = 0 ; i < key_count ; i ++ ) {
7186
7180
struct mgmt_ltk_info * key = & cp -> keys [i ];
7187
7181
u8 type , authenticated ;
7188
- u8 addr_type = le_addr_type (key -> addr .type );
7189
7182
7190
7183
if (hci_is_blocked_key (hdev ,
7191
7184
HCI_BLOCKED_KEY_TYPE_LTK ,
@@ -7220,12 +7213,8 @@ static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
7220
7213
continue ;
7221
7214
}
7222
7215
7223
- /* When using SMP over BR/EDR, the addr type should be set to BREDR */
7224
- if (key -> addr .type == BDADDR_BREDR )
7225
- addr_type = BDADDR_BREDR ;
7226
-
7227
7216
hci_add_ltk (hdev , & key -> addr .bdaddr ,
7228
- addr_type , type , authenticated ,
7217
+ le_addr_type ( key -> addr . type ) , type , authenticated ,
7229
7218
key -> val , key -> enc_size , key -> ediv , key -> rand );
7230
7219
}
7231
7220
@@ -9519,7 +9508,7 @@ void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
9519
9508
9520
9509
ev .store_hint = persistent ;
9521
9510
bacpy (& ev .key .addr .bdaddr , & key -> bdaddr );
9522
- ev .key .addr .type = link_to_bdaddr ( key -> link_type , key -> bdaddr_type ) ;
9511
+ ev .key .addr .type = BDADDR_BREDR ;
9523
9512
ev .key .type = key -> type ;
9524
9513
memcpy (ev .key .val , key -> val , HCI_LINK_KEY_SIZE );
9525
9514
ev .key .pin_len = key -> pin_len ;
@@ -9570,7 +9559,7 @@ void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
9570
9559
ev .store_hint = persistent ;
9571
9560
9572
9561
bacpy (& ev .key .addr .bdaddr , & key -> bdaddr );
9573
- ev .key .addr .type = link_to_bdaddr (key -> link_type , key -> bdaddr_type );
9562
+ ev .key .addr .type = link_to_bdaddr (LE_LINK , key -> bdaddr_type );
9574
9563
ev .key .type = mgmt_ltk_type (key );
9575
9564
ev .key .enc_size = key -> enc_size ;
9576
9565
ev .key .ediv = key -> ediv ;
@@ -9599,7 +9588,7 @@ void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent)
9599
9588
9600
9589
bacpy (& ev .rpa , & irk -> rpa );
9601
9590
bacpy (& ev .irk .addr .bdaddr , & irk -> bdaddr );
9602
- ev .irk .addr .type = link_to_bdaddr (irk -> link_type , irk -> addr_type );
9591
+ ev .irk .addr .type = link_to_bdaddr (LE_LINK , irk -> addr_type );
9603
9592
memcpy (ev .irk .val , irk -> val , sizeof (irk -> val ));
9604
9593
9605
9594
mgmt_event (MGMT_EV_NEW_IRK , hdev , & ev , sizeof (ev ), NULL );
@@ -9628,7 +9617,7 @@ void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
9628
9617
ev .store_hint = persistent ;
9629
9618
9630
9619
bacpy (& ev .key .addr .bdaddr , & csrk -> bdaddr );
9631
- ev .key .addr .type = link_to_bdaddr (csrk -> link_type , csrk -> bdaddr_type );
9620
+ ev .key .addr .type = link_to_bdaddr (LE_LINK , csrk -> bdaddr_type );
9632
9621
ev .key .type = csrk -> type ;
9633
9622
memcpy (ev .key .val , csrk -> val , sizeof (csrk -> val ));
9634
9623
0 commit comments