From 031dc503f11bcd3c20f86696fdfe19f9413642e8 Mon Sep 17 00:00:00 2001
From: Rahul Arya <aryarahul@google.com>
Date: Mon, 26 Sep 2022 23:02:06 +0000
Subject: [PATCH] Add flag to toggle IRK rotation

Based on discussion in linked bug, to prevent further regressions if the
latest fixes are still incomplete.

Bug: 195410559
Test: compiles
Ignore-AOSP-First: security
Change-Id: I1741929c639f2dbc6417974bf3287d8d141e33df
(cherry picked from commit 924c3a96379e0ab86a907079c307de3de2f06a56)
Merged-In: I1741929c639f2dbc6417974bf3287d8d141e33df
---
 system/btif/src/btif_storage.cc         | 4 +++-
 system/gd/rust/common/src/init_flags.rs | 3 ++-
 system/gd/rust/shim/src/init_flags.rs   | 1 +
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/system/btif/src/btif_storage.cc b/system/btif/src/btif_storage.cc
index bd7e89c8b5e..41fa4df5fbe 100644
--- a/system/btif/src/btif_storage.cc
+++ b/system/btif/src/btif_storage.cc
@@ -54,6 +54,7 @@
 #include "btif_hh.h"
 #include "btif_util.h"
 #include "device/include/controller.h"
+#include "gd/common/init_flags.h"
 #include "osi/include/allocator.h"
 #include "osi/include/compat.h"
 #include "osi/include/config.h"
@@ -899,7 +900,8 @@ bt_status_t btif_storage_remove_bonded_device(
 
   /* 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()) {
+  if (paired_devices.empty() &&
+      bluetooth::common::init_flags::irk_rotation_is_enabled()) {
     LOG_INFO("Last paired device removed, resetting IRK");
     BTA_DmBleResetId();
   }
diff --git a/system/gd/rust/common/src/init_flags.rs b/system/gd/rust/common/src/init_flags.rs
index 80fe6da399b..52425a83687 100644
--- a/system/gd/rust/common/src/init_flags.rs
+++ b/system/gd/rust/common/src/init_flags.rs
@@ -80,7 +80,8 @@ init_flags!(
         gatt_robust_caching,
         btaa_hci,
         gd_rust,
-        gd_link_policy
+        gd_link_policy,
+        irk_rotation
     },
     dependencies: {
         gd_core => gd_security
diff --git a/system/gd/rust/shim/src/init_flags.rs b/system/gd/rust/shim/src/init_flags.rs
index fd3015cc341..d1cbfbf0688 100644
--- a/system/gd/rust/shim/src/init_flags.rs
+++ b/system/gd/rust/shim/src/init_flags.rs
@@ -11,6 +11,7 @@ mod ffi {
         fn btaa_hci_is_enabled() -> bool;
         fn gd_rust_is_enabled() -> bool;
         fn gd_link_policy_is_enabled() -> bool;
+        fn irk_rotation_is_enabled() -> bool;
     }
 }
 
-- 
GitLab