diff options
author | 2024-09-20 22:37:13 +0000 | |
---|---|---|
committer | 2024-10-01 16:14:33 +0000 | |
commit | 7700e22ee88cb087984a7c53e6847817fcc34a26 (patch) | |
tree | 7c9aef5ecfb8b272896b62f74115e1bb5e93241c | |
parent | 9bb9aa3c2defb0b9b4c097e2c583507d846b3e38 (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.bp | 1 | ||||
-rw-r--r-- | sysprop/BUILD.gn | 1 | ||||
-rw-r--r-- | sysprop/exported_include/android_bluetooth_sysprop.h | 1 | ||||
-rw-r--r-- | sysprop/gap.sysprop | 12 | ||||
-rw-r--r-- | system/gd/hci/BUILD.gn | 1 | ||||
-rw-r--r-- | system/gd/hci/controller.cc | 12 | ||||
-rw-r--r-- | system/stack/btm/btm_sec.cc | 16 |
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); |