@@ -962,15 +962,20 @@ static int id_find(const bt_addr_le_t *addr)
962
962
return - ENOENT ;
963
963
}
964
964
965
- static void id_create (uint8_t id , bt_addr_le_t * addr , uint8_t * irk )
965
+ static int id_create (uint8_t id , bt_addr_le_t * addr , uint8_t * irk )
966
966
{
967
967
if (addr && bt_addr_le_cmp (addr , BT_ADDR_LE_ANY )) {
968
968
bt_addr_le_copy (& bt_dev .id_addr [id ], addr );
969
969
} else {
970
970
bt_addr_le_t new_addr ;
971
971
972
972
do {
973
- bt_addr_le_create_static (& new_addr );
973
+ int err ;
974
+
975
+ err = bt_addr_le_create_static (& new_addr );
976
+ if (err ) {
977
+ return err ;
978
+ }
974
979
/* Make sure we didn't generate a duplicate */
975
980
} while (id_find (& new_addr ) >= 0 );
976
981
@@ -988,7 +993,13 @@ static void id_create(uint8_t id, bt_addr_le_t *addr, uint8_t *irk)
988
993
if (irk && memcmp (irk , zero_irk , 16 )) {
989
994
memcpy (& bt_dev .irk [id ], irk , 16 );
990
995
} else {
991
- bt_rand (& bt_dev .irk [id ], 16 );
996
+ int err ;
997
+
998
+ err = bt_rand (& bt_dev .irk [id ], 16 );
999
+ if (err ) {
1000
+ return err ;
1001
+ }
1002
+
992
1003
if (irk ) {
993
1004
memcpy (irk , & bt_dev .irk [id ], 16 );
994
1005
}
@@ -1003,11 +1014,13 @@ static void id_create(uint8_t id, bt_addr_le_t *addr, uint8_t *irk)
1003
1014
atomic_test_bit (bt_dev .flags , BT_DEV_READY )) {
1004
1015
bt_settings_save_id ();
1005
1016
}
1017
+
1018
+ return 0 ;
1006
1019
}
1007
1020
1008
1021
int bt_id_create (bt_addr_le_t * addr , uint8_t * irk )
1009
1022
{
1010
- int new_id ;
1023
+ int new_id , err ;
1011
1024
1012
1025
if (addr && bt_addr_le_cmp (addr , BT_ADDR_LE_ANY )) {
1013
1026
if (addr -> type != BT_ADDR_LE_RANDOM ||
@@ -1044,13 +1057,18 @@ int bt_id_create(bt_addr_le_t *addr, uint8_t *irk)
1044
1057
}
1045
1058
1046
1059
new_id = bt_dev .id_count ++ ;
1047
- id_create (new_id , addr , irk );
1060
+ err = id_create (new_id , addr , irk );
1061
+ if (err ) {
1062
+ return err ;
1063
+ }
1048
1064
1049
1065
return new_id ;
1050
1066
}
1051
1067
1052
1068
int bt_id_reset (uint8_t id , bt_addr_le_t * addr , uint8_t * irk )
1053
1069
{
1070
+ int err ;
1071
+
1054
1072
if (addr && bt_addr_le_cmp (addr , BT_ADDR_LE_ANY )) {
1055
1073
if (addr -> type != BT_ADDR_LE_RANDOM ||
1056
1074
!BT_ADDR_IS_STATIC (& addr -> a )) {
@@ -1085,15 +1103,16 @@ int bt_id_reset(uint8_t id, bt_addr_le_t *addr, uint8_t *irk)
1085
1103
1086
1104
if (IS_ENABLED (CONFIG_BT_CONN ) &&
1087
1105
bt_addr_le_cmp (& bt_dev .id_addr [id ], BT_ADDR_LE_ANY )) {
1088
- int err ;
1089
-
1090
1106
err = bt_unpair (id , NULL );
1091
1107
if (err ) {
1092
1108
return err ;
1093
1109
}
1094
1110
}
1095
1111
1096
- id_create (id , addr , irk );
1112
+ err = id_create (id , addr , irk );
1113
+ if (err ) {
1114
+ return err ;
1115
+ }
1097
1116
1098
1117
return id ;
1099
1118
}
@@ -1212,15 +1231,15 @@ uint8_t bt_id_read_public_addr(bt_addr_le_t *addr)
1212
1231
return 1U ;
1213
1232
}
1214
1233
1215
- void bt_setup_public_id_addr (void )
1234
+ int bt_setup_public_id_addr (void )
1216
1235
{
1217
1236
bt_addr_le_t addr ;
1218
1237
uint8_t * irk = NULL ;
1219
1238
1220
1239
bt_dev .id_count = bt_id_read_public_addr (& addr );
1221
1240
1222
1241
if (!bt_dev .id_count ) {
1223
- return ;
1242
+ return 0 ;
1224
1243
}
1225
1244
1226
1245
#if defined(CONFIG_BT_PRIVACY )
@@ -1236,7 +1255,7 @@ void bt_setup_public_id_addr(void)
1236
1255
}
1237
1256
#endif /* defined(CONFIG_BT_PRIVACY) */
1238
1257
1239
- id_create (BT_ID_DEFAULT , & addr , irk );
1258
+ return id_create (BT_ID_DEFAULT , & addr , irk );
1240
1259
}
1241
1260
1242
1261
#if defined(CONFIG_BT_HCI_VS_EXT )
@@ -1303,6 +1322,7 @@ int bt_setup_random_id_addr(void)
1303
1322
1304
1323
if (bt_dev .id_count ) {
1305
1324
for (uint8_t i = 0 ; i < bt_dev .id_count ; i ++ ) {
1325
+ int err ;
1306
1326
bt_addr_le_t addr ;
1307
1327
uint8_t * irk = NULL ;
1308
1328
#if defined(CONFIG_BT_PRIVACY )
@@ -1319,7 +1339,10 @@ int bt_setup_random_id_addr(void)
1319
1339
bt_addr_copy (& addr .a , & addrs [i ].bdaddr );
1320
1340
addr .type = BT_ADDR_LE_RANDOM ;
1321
1341
1322
- id_create (i , & addr , irk );
1342
+ err = id_create (i , & addr , irk );
1343
+ if (err ) {
1344
+ return err ;
1345
+ }
1323
1346
}
1324
1347
1325
1348
return 0 ;
@@ -1732,7 +1755,11 @@ int bt_id_init(void)
1732
1755
if (!IS_ENABLED (CONFIG_BT_SETTINGS ) && !bt_dev .id_count ) {
1733
1756
BT_DBG ("No user identity. Trying to set public." );
1734
1757
1735
- bt_setup_public_id_addr ();
1758
+ err = bt_setup_public_id_addr ();
1759
+ if (err ) {
1760
+ BT_ERR ("Unable to set identity address" );
1761
+ return err ;
1762
+ }
1736
1763
}
1737
1764
1738
1765
if (!IS_ENABLED (CONFIG_BT_SETTINGS ) && !bt_dev .id_count ) {
0 commit comments