Merge branch 'bugfix/fix_ble_pair_fail_v5.3' into 'release/v5.3'

fix(bt/bluedroid): fix BLE SMP pairing failure on BLE-only devices when using defalut param (5.3)

See merge request espressif/esp-idf!47398
This commit is contained in:
Jiang Jiang Jian
2026-04-22 15:41:13 +08:00
3 changed files with 17 additions and 11 deletions

View File

@@ -45,8 +45,8 @@ tBTE_APPL_CFG bte_appl_cfg = {
BTM_AUTH_SPGB_YES, // Authentication requirements
#endif
BTM_LOCAL_IO_CAPS_BLE,
BTM_BLE_INITIATOR_KEY_SIZE,
BTM_BLE_RESPONDER_KEY_SIZE,
BTM_BLE_INITIATOR_KEY_MASK,
BTM_BLE_RESPONDER_KEY_MASK,
BTM_BLE_MAX_KEY_SIZE,
BTM_BLE_MIN_KEY_SIZE,
BTM_BLE_ONLY_ACCEPT_SPECIFIED_SEC_AUTH_DISABLE,
@@ -57,8 +57,8 @@ void bta_dm_co_security_param_init(void)
{
bte_appl_cfg.ble_auth_req = BTA_LE_AUTH_REQ_SC_MITM_BOND;
bte_appl_cfg.ble_io_cap = BTM_LOCAL_IO_CAPS_BLE;
bte_appl_cfg.ble_init_key = BTM_BLE_INITIATOR_KEY_SIZE;
bte_appl_cfg.ble_resp_key = BTM_BLE_RESPONDER_KEY_SIZE;
bte_appl_cfg.ble_init_key = BTM_BLE_INITIATOR_KEY_MASK;
bte_appl_cfg.ble_resp_key = BTM_BLE_RESPONDER_KEY_MASK;
bte_appl_cfg.ble_max_key_size = BTM_BLE_MAX_KEY_SIZE;
bte_appl_cfg.ble_min_key_size = BTM_BLE_MIN_KEY_SIZE;
bte_appl_cfg.ble_accept_auth_enable = BTM_BLE_ONLY_ACCEPT_SPECIFIED_SEC_AUTH_DISABLE;
@@ -368,11 +368,11 @@ void bta_dm_co_ble_io_req(BD_ADDR bd_addr, tBTA_IO_CAP *p_io_cap,
*p_io_cap = bte_appl_cfg.ble_io_cap;
}
if (bte_appl_cfg.ble_init_key <= BTM_BLE_INITIATOR_KEY_SIZE) {
if ((bte_appl_cfg.ble_init_key & ~BTM_BLE_INITIATOR_KEY_MASK) == 0) {
*p_init_key = bte_appl_cfg.ble_init_key;
}
if (bte_appl_cfg.ble_resp_key <= BTM_BLE_RESPONDER_KEY_SIZE) {
if ((bte_appl_cfg.ble_resp_key & ~BTM_BLE_RESPONDER_KEY_MASK) == 0) {
*p_resp_key = bte_appl_cfg.ble_resp_key;
}

View File

@@ -1586,8 +1586,13 @@ typedef UINT8 tBTM_IO_CAP;
#define BTM_BLE_CSR_KEY_MASK (1 << 2)
#define BTM_BLE_LINK_KEY_MASK (1 << 3)
#define BTM_BLE_INITIATOR_KEY_SIZE 15
#define BTM_BLE_RESPONDER_KEY_SIZE 15
#if (CLASSIC_BT_INCLUDED == TRUE)
#define BTM_BLE_INITIATOR_KEY_MASK (BTM_BLE_ENC_KEY_MASK | BTM_BLE_ID_KEY_MASK | BTM_BLE_CSR_KEY_MASK | BTM_BLE_LINK_KEY_MASK)
#define BTM_BLE_RESPONDER_KEY_MASK (BTM_BLE_ENC_KEY_MASK | BTM_BLE_ID_KEY_MASK | BTM_BLE_CSR_KEY_MASK | BTM_BLE_LINK_KEY_MASK)
#else
#define BTM_BLE_INITIATOR_KEY_MASK (BTM_BLE_ENC_KEY_MASK | BTM_BLE_ID_KEY_MASK | BTM_BLE_CSR_KEY_MASK)
#define BTM_BLE_RESPONDER_KEY_MASK (BTM_BLE_ENC_KEY_MASK | BTM_BLE_ID_KEY_MASK | BTM_BLE_CSR_KEY_MASK)
#endif
#define BTM_BLE_MAX_KEY_SIZE 16
#define BTM_BLE_MIN_KEY_SIZE 7

View File

@@ -2333,9 +2333,10 @@ BOOLEAN smp_calculate_link_key_from_long_term_key(tSMP_CB *p_cb)
link_key_type = BTM_LKEY_TYPE_UNAUTH_COMB;
}
} else {
SMP_TRACE_ERROR ("%s failed to update link_key. Sec Mode = %d, sm4 = 0x%02x",
__func__, btm_cb.security_mode, p_dev_rec->sm4);
return FALSE;
SMP_TRACE_WARNING ("%s BR/EDR transport not available (Sec Mode = %d, sm4 = 0x%02x), "
"skip LK derivation",
__func__, btm_cb.security_mode, p_dev_rec->sm4);
return TRUE;
}
link_key_type += BTM_LTK_DERIVED_LKEY_OFFSET;