From f7ff6b127ea9ec67de3ad8919531762d00edfbcd Mon Sep 17 00:00:00 2001 From: chenjianhua Date: Sat, 6 May 2023 12:21:59 +0800 Subject: [PATCH 1/3] bluedroid: fix ble smp key distribution setting --- components/bt/host/bluedroid/bta/dm/bta_dm_co.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_co.c b/components/bt/host/bluedroid/bta/dm/bta_dm_co.c index 9e1a7b16d5..69e729ef44 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_co.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_co.c @@ -389,7 +389,7 @@ void bta_dm_co_ble_set_init_key_req(UINT8 init_key) { #if (SMP_INCLUDED == TRUE) 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 } @@ -397,7 +397,7 @@ void bta_dm_co_ble_set_rsp_key_req(UINT8 rsp_key) { #if (SMP_INCLUDED == TRUE) 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 } From 7593466dc6bcf8d0b94212a5b1523cd95cad1226 Mon Sep 17 00:00:00 2001 From: chenjianhua Date: Sat, 6 May 2023 14:26:16 +0800 Subject: [PATCH 2/3] bluedroid: fix ble adv data construct for device name --- components/bt/host/bluedroid/stack/btm/btm_ble_gap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c b/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c index 573751dbf7..8daf84bbca 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c @@ -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 (len > MIN_ADV_LENGTH && data_mask & BTM_BLE_AD_BIT_DEV_NAME) { 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; - 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 { cp_len = (UINT16)strlen(btm_cb.cfg.bd_name); *p++ = cp_len + 1; From b87f96e1156d334b6df807d406149c9ac09730fa Mon Sep 17 00:00:00 2001 From: chenjianhua Date: Sat, 6 May 2023 15:20:08 +0800 Subject: [PATCH 3/3] bluedroid: fix ble ext adv rand addr setting for NRPA --- .../host/bluedroid/stack/btm/btm_ble_5_gap.c | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_5_gap.c b/components/bt/host/bluedroid/stack/btm/btm_ble_5_gap.c index c0594ae234..fce8e63226 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_5_gap.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_5_gap.c @@ -302,21 +302,19 @@ tBTM_STATUS BTM_BleSetExtendedAdvRandaddr(UINT8 instance, BD_ADDR rand_addr) BD_ADDR invalid_rand_addr_a, invalid_rand_addr_b; memset(invalid_rand_addr_a, 0xff, sizeof(BD_ADDR)); memset(invalid_rand_addr_b, 0x00, sizeof(BD_ADDR)); - 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 - && memcmp(invalid_rand_addr_a, rand_addr, BD_ADDR_LEN) != 0 - && memcmp(invalid_rand_addr_b, rand_addr, BD_ADDR_LEN) != 0){ - // set random address - 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)", - __func__, btm_ble_hci_status_to_str(err), err); + 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; + 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; - } else { - // set random address success, update address infor - if(extend_adv_cb.inst[instance].configured && extend_adv_cb.inst[instance].connetable) { - BTM_BleSetStaticAddr(rand_addr); - BTM_UpdateAddrInfor(BLE_ADDR_RANDOM, rand_addr); - } + 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__); @@ -324,6 +322,19 @@ tBTM_STATUS BTM_BleSetExtendedAdvRandaddr(UINT8 instance, BD_ADDR rand_addr) goto end; } + // set random address + 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)", + __func__, btm_ble_hci_status_to_str(err), err); + status = BTM_ILLEGAL_VALUE; + } else { + // set random address success, update address infor + if(extend_adv_cb.inst[instance].configured && extend_adv_cb.inst[instance].connetable) { + BTM_BleSetStaticAddr(rand_addr); + BTM_UpdateAddrInfor(BLE_ADDR_RANDOM, rand_addr); + } + } + end: cb_params.status = status;