summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Himanshu Rawat <rwt@google.com> 2024-09-20 22:37:13 +0000
committer Himanshu Rawat <rwt@google.com> 2024-10-01 16:14:33 +0000
commit7700e22ee88cb087984a7c53e6847817fcc34a26 (patch)
tree7c9aef5ecfb8b272896b62f74115e1bb5e93241c
parent9bb9aa3c2defb0b9b4c097e2c583507d846b3e38 (diff)
System property for changing minimum key size
Introducing a system property to allow increasing the minimum key size from default of 7 octets. System property: bluetooth.gap.min_key_size Test: mmm pacakges/modules/Bluetooth Flag: EXEMPT guarded by system property Bug: 362624309 Change-Id: Idaa7eb191158d8487437642b2f2f7f5492619a88
-rw-r--r--sysprop/Android.bp1
-rw-r--r--sysprop/BUILD.gn1
-rw-r--r--sysprop/exported_include/android_bluetooth_sysprop.h1
-rw-r--r--sysprop/gap.sysprop12
-rw-r--r--system/gd/hci/BUILD.gn1
-rw-r--r--system/gd/hci/controller.cc12
-rw-r--r--system/stack/btm/btm_sec.cc16
7 files changed, 39 insertions, 5 deletions
diff --git a/sysprop/Android.bp b/sysprop/Android.bp
index c2e71a97c8..1b72eb4cb7 100644
--- a/sysprop/Android.bp
+++ b/sysprop/Android.bp
@@ -11,6 +11,7 @@ sysprop_library {
"ble.sysprop",
"bta.sysprop",
"device_id.sysprop",
+ "gap.sysprop",
"hfp.sysprop",
],
property_owner: "Platform",
diff --git a/sysprop/BUILD.gn b/sysprop/BUILD.gn
index 09126c8df0..407b7a88fc 100644
--- a/sysprop/BUILD.gn
+++ b/sysprop/BUILD.gn
@@ -7,6 +7,7 @@ sysprop("libcom.android.sysprop.bluetooth") {
"ble.sysprop",
"bta.sysprop",
"device_id.sysprop",
+ "gap.sysprop",
"hfp.sysprop",
]
deps = [ "//bt/floss/android-base:android-base" ]
diff --git a/sysprop/exported_include/android_bluetooth_sysprop.h b/sysprop/exported_include/android_bluetooth_sysprop.h
index 50553ecc5b..8d5122d8e2 100644
--- a/sysprop/exported_include/android_bluetooth_sysprop.h
+++ b/sysprop/exported_include/android_bluetooth_sysprop.h
@@ -21,4 +21,5 @@
#include <ble.sysprop.h>
#include <bta.sysprop.h>
#include <device_id.sysprop.h>
+#include <gap.sysprop.h>
#include <hfp.sysprop.h>
diff --git a/sysprop/gap.sysprop b/sysprop/gap.sysprop
new file mode 100644
index 0000000000..e9f7e00a3c
--- /dev/null
+++ b/sysprop/gap.sysprop
@@ -0,0 +1,12 @@
+module: "android.sysprop.bluetooth.Gap"
+owner: Platform
+
+prop {
+ api_name: "min_key_size"
+ type: Integer
+ scope: Internal
+ access: Readonly
+ prop_name: "bluetooth.gap.min_key_size"
+}
+
+
diff --git a/system/gd/hci/BUILD.gn b/system/gd/hci/BUILD.gn
index d7366c33b2..8f65671fd7 100644
--- a/system/gd/hci/BUILD.gn
+++ b/system/gd/hci/BUILD.gn
@@ -43,6 +43,7 @@ source_set("BluetoothHciSources") {
deps = [
"//bt/flags:bluetooth_flags_c_lib",
"//bt/system/gd:gd_default_deps",
+ "//bt/sysprop:libcom.android.sysprop.bluetooth",
]
configs += [
diff --git a/system/gd/hci/controller.cc b/system/gd/hci/controller.cc
index 3a4ab17dfb..9a3f721110 100644
--- a/system/gd/hci/controller.cc
+++ b/system/gd/hci/controller.cc
@@ -16,6 +16,7 @@
#include "hci/controller.h"
+#include <android_bluetooth_sysprop.h>
#include <bluetooth/log.h>
#include <com_android_bluetooth_flags.h>
@@ -39,7 +40,9 @@
namespace bluetooth {
namespace hci {
-constexpr uint8_t kMinEncryptionKeySize = 7; // #define MIN_ENCRYPTION_KEY_SIZE 7
+constexpr int kMinEncryptionKeySize = 7;
+constexpr int kMinEncryptionKeySizeDefault = kMinEncryptionKeySize;
+constexpr int kMaxEncryptionKeySize = 16;
constexpr bool kDefaultVendorCapabilitiesEnabled = true;
static const std::string kPropertyVendorCapabilitiesEnabled =
@@ -107,8 +110,13 @@ struct Controller::impl {
handler->BindOnceOn(this, &Controller::impl::read_buffer_size_complete_handler));
if (is_supported(OpCode::SET_MIN_ENCRYPTION_KEY_SIZE)) {
+ uint8_t min_key_size =
+ (uint8_t)std::min(std::max(android::sysprop::bluetooth::Gap::min_key_size().value_or(
+ kMinEncryptionKeySizeDefault),
+ kMinEncryptionKeySize),
+ kMaxEncryptionKeySize);
hci_->EnqueueCommand(
- SetMinEncryptionKeySizeBuilder::Create(kMinEncryptionKeySize),
+ SetMinEncryptionKeySizeBuilder::Create(min_key_size),
handler->BindOnceOn(this, &Controller::impl::set_min_encryption_key_size_handler));
}
diff --git a/system/stack/btm/btm_sec.cc b/system/stack/btm/btm_sec.cc
index d458bf79a8..e647715e40 100644
--- a/system/stack/btm/btm_sec.cc
+++ b/system/stack/btm/btm_sec.cc
@@ -26,6 +26,7 @@
#include "stack/btm/btm_sec.h"
+#include <android_bluetooth_sysprop.h>
#include <base/functional/bind.h>
#include <base/strings/stringprintf.h>
#include <bluetooth/log.h>
@@ -3365,7 +3366,16 @@ void btm_sec_encrypt_change(uint16_t handle, tHCI_STATUS status, uint8_t encr_en
}
}
-constexpr uint8_t MIN_KEY_SIZE = 7;
+constexpr int MIN_KEY_SIZE = 7;
+constexpr int MIN_KEY_SIZE_DEFAULT = MIN_KEY_SIZE;
+constexpr int MAX_KEY_SIZE = 16;
+static uint8_t get_min_enc_key_size() {
+ static uint8_t min_key_size = (uint8_t)std::min(
+ std::max(android::sysprop::bluetooth::Gap::min_key_size().value_or(MIN_KEY_SIZE_DEFAULT),
+ MIN_KEY_SIZE),
+ MAX_KEY_SIZE);
+ return min_key_size;
+}
static void read_encryption_key_size_complete_after_encryption_change(uint8_t status,
uint16_t handle,
@@ -3386,7 +3396,7 @@ static void read_encryption_key_size_complete_after_encryption_change(uint8_t st
return;
}
- if (key_size < MIN_KEY_SIZE) {
+ if (key_size < get_min_enc_key_size()) {
log::error("encryption key too short, disconnecting. handle:0x{:x},key_size:{}", handle,
key_size);
@@ -3961,7 +3971,7 @@ static void read_encryption_key_size_complete_after_key_refresh(uint8_t status,
return;
}
- if (key_size < MIN_KEY_SIZE) {
+ if (key_size < get_min_enc_key_size()) {
log::error("encryption key too short, disconnecting. handle: 0x{:x} key_size {}", handle,
key_size);