OSDN Git Service

Reset the IRK after all devices are unpaired
authorMartin Brabham <optedoblivion@google.com>
Fri, 29 Oct 2021 21:27:27 +0000 (21:27 +0000)
committerMartin Brabham <optedoblivion@google.com>
Thu, 4 Nov 2021 18:41:22 +0000 (18:41 +0000)
Bug: 204355134
Bug: 195410559
Test: Check IRK, pair devices, unpair all devices, Check IRK
Tag: #security
Change-Id: I8e44f010a72dcdec595d81293a05f49ccc054065
Merged-In: I8e44f010a72dcdec595d81293a05f49ccc054065

bta/dm/bta_dm_act.cc
test/mock/mock_stack_btm_ble.cc

index 2566b5b..ebdd959 100644 (file)
 
 #define LOG_TAG "bt_bta_dm"
 
+#include <base/logging.h>
+
 #include <cstdint>
 
 #include "bta/dm/bta_dm_int.h"
 #include "bta/gatt/bta_gattc_int.h"
 #include "bta/include/bta_dm_ci.h"
+#include "btif/include/btif_config.h"
 #include "btif/include/btif_dm.h"
 #include "btif/include/btif_storage.h"
 #include "btif/include/stack_manager.h"
@@ -42,6 +45,7 @@
 #include "osi/include/fixed_queue.h"
 #include "osi/include/log.h"
 #include "osi/include/osi.h"
+#include "stack/btm/btm_ble_int.h"
 #include "stack/btm/btm_sec.h"
 #include "stack/btm/neighbor_inquiry.h"
 #include "stack/gatt/connection_manager.h"
@@ -645,6 +649,13 @@ void bta_dm_remove_device(const RawAddress& bd_addr) {
   if (!other_address_connected && !other_address.IsEmpty()) {
     bta_dm_process_remove_device(other_address);
   }
+
+  /* Check the length of the paired devices, and if 0 then reset IRK */
+  auto paired_devices = btif_config_get_paired_devices();
+  if (paired_devices.empty()) {
+    LOG_INFO("Last paired device removed, resetting IRK");
+    btm_ble_reset_id();
+  }
 }
 
 /*******************************************************************************
index 835b1d2..b6e24ee 100644 (file)
@@ -254,3 +254,6 @@ void read_phy_cb(
     uint8_t* data, uint16_t len) {
   mock_function_count_map[__func__]++;
 }
+void btm_ble_reset_id(void) {
+  mock_function_count_map[__func__]++;
+}