Merge branch 'bugfix/fix_some_bluedroid_bugs' into 'master'

Fixed some bluedroid bugs

See merge request espressif/esp-idf!23616
This commit is contained in:
Zhi Wei Jian
2023-05-10 20:44:15 +08:00
3 changed files with 30 additions and 18 deletions

View File

@@ -389,7 +389,7 @@ void bta_dm_co_ble_set_init_key_req(UINT8 init_key)
{ {
#if (SMP_INCLUDED == TRUE) #if (SMP_INCLUDED == TRUE)
init_key &= 0x0f; // 4~7bit reservd, only used the 0~3bit init_key &= 0x0f; // 4~7bit reservd, only used the 0~3bit
bte_appl_cfg.ble_init_key &= init_key; bte_appl_cfg.ble_init_key = init_key;
#endif ///SMP_INCLUDED == TRUE #endif ///SMP_INCLUDED == TRUE
} }
@@ -397,7 +397,7 @@ void bta_dm_co_ble_set_rsp_key_req(UINT8 rsp_key)
{ {
#if (SMP_INCLUDED == TRUE) #if (SMP_INCLUDED == TRUE)
rsp_key &= 0x0f; // 4~7bit reservd, only used the 0~3bit rsp_key &= 0x0f; // 4~7bit reservd, only used the 0~3bit
bte_appl_cfg.ble_resp_key &= rsp_key; bte_appl_cfg.ble_resp_key = rsp_key;
#endif ///SMP_INCLUDED == TRUE #endif ///SMP_INCLUDED == TRUE
} }

View File

@@ -302,10 +302,26 @@ tBTM_STATUS BTM_BleSetExtendedAdvRandaddr(UINT8 instance, BD_ADDR rand_addr)
BD_ADDR invalid_rand_addr_a, invalid_rand_addr_b; BD_ADDR invalid_rand_addr_a, invalid_rand_addr_b;
memset(invalid_rand_addr_a, 0xff, sizeof(BD_ADDR)); memset(invalid_rand_addr_a, 0xff, sizeof(BD_ADDR));
memset(invalid_rand_addr_b, 0x00, sizeof(BD_ADDR)); memset(invalid_rand_addr_b, 0x00, sizeof(BD_ADDR));
if((rand_addr[0] & BT_STATIC_RAND_ADDR_MASK) == BT_STATIC_RAND_ADDR_MASK) {
invalid_rand_addr_b[0] = invalid_rand_addr_b[0] | BT_STATIC_RAND_ADDR_MASK; invalid_rand_addr_b[0] = invalid_rand_addr_b[0] | BT_STATIC_RAND_ADDR_MASK;
if((rand_addr[0] & BT_STATIC_RAND_ADDR_MASK) == BT_STATIC_RAND_ADDR_MASK if (memcmp(invalid_rand_addr_a, rand_addr, BD_ADDR_LEN) == 0
&& memcmp(invalid_rand_addr_a, rand_addr, BD_ADDR_LEN) != 0 || memcmp(invalid_rand_addr_b, rand_addr, BD_ADDR_LEN) == 0) {
&& memcmp(invalid_rand_addr_b, rand_addr, BD_ADDR_LEN) != 0){ status = BTM_ILLEGAL_VALUE;
goto end;
}
} else if ((rand_addr[0] | BT_NON_RPA_MASK) == BT_NON_RPA_MASK) {
invalid_rand_addr_a[0] = invalid_rand_addr_a[0] & BT_NON_RPA_MASK;
if (memcmp(invalid_rand_addr_a, rand_addr, BD_ADDR_LEN) == 0
|| memcmp(invalid_rand_addr_b, rand_addr, BD_ADDR_LEN) == 0) {
status = BTM_ILLEGAL_VALUE;
goto end;
}
} else {
BTM_TRACE_ERROR("%s invalid random address", __func__);
status = BTM_ILLEGAL_VALUE;
goto end;
}
// set random address // set random address
if((err = btsnd_hcic_ble_set_extend_rand_address(instance, rand_addr)) != HCI_SUCCESS) { if((err = btsnd_hcic_ble_set_extend_rand_address(instance, rand_addr)) != HCI_SUCCESS) {
BTM_TRACE_ERROR("%s, fail to send the hci command, the error code = %s(0x%x)", BTM_TRACE_ERROR("%s, fail to send the hci command, the error code = %s(0x%x)",
@@ -318,11 +334,6 @@ tBTM_STATUS BTM_BleSetExtendedAdvRandaddr(UINT8 instance, BD_ADDR rand_addr)
BTM_UpdateAddrInfor(BLE_ADDR_RANDOM, rand_addr); BTM_UpdateAddrInfor(BLE_ADDR_RANDOM, rand_addr);
} }
} }
} else {
BTM_TRACE_ERROR("%s invalid random address", __func__);
status = BTM_ILLEGAL_VALUE;
goto end;
}
end: end:
cb_params.status = status; cb_params.status = status;

View File

@@ -2237,9 +2237,10 @@ UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst,
#if BTM_MAX_LOC_BD_NAME_LEN > 0 #if BTM_MAX_LOC_BD_NAME_LEN > 0
if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_DEV_NAME) { if (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_DEV_NAME) {
if (strlen(btm_cb.cfg.bd_name) > (UINT16)(len - MIN_ADV_LENGTH)) { if (strlen(btm_cb.cfg.bd_name) > (UINT16)(len - MIN_ADV_LENGTH)) {
*p++ = len - MIN_ADV_LENGTH + 1; cp_len = (UINT16)(len - MIN_ADV_LENGTH);
*p++ = cp_len + 1;
*p++ = BTM_BLE_AD_TYPE_NAME_SHORT; *p++ = BTM_BLE_AD_TYPE_NAME_SHORT;
ARRAY_TO_STREAM(p, btm_cb.cfg.bd_name, len - MIN_ADV_LENGTH); ARRAY_TO_STREAM(p, btm_cb.cfg.bd_name, cp_len);
} else { } else {
cp_len = (UINT16)strlen(btm_cb.cfg.bd_name); cp_len = (UINT16)strlen(btm_cb.cfg.bd_name);
*p++ = cp_len + 1; *p++ = cp_len + 1;