Merge branch 'bugfix/btdm_memleak_of_ble_set_security_param_v3.0' into 'release/v3.0'

component/bt: Fix mem leak of esp_ble_gap_set_security_param

See merge request idf/esp-idf!2476
This commit is contained in:
Jiang Jiang Jian
2018-05-30 17:56:52 +08:00

View File

@ -520,9 +520,8 @@ static void btc_ble_start_advertising (esp_ble_adv_params_t *ble_adv_params, tBT
} }
return; return;
} }
LOG_DEBUG("API_Ble_AppStartAdvertising\n");
LOG_DEBUG("API_Ble_AppStartAdvertising\n");
memcpy(peer_addr.bda, ble_adv_params->peer_addr, ESP_BD_ADDR_LEN); memcpy(peer_addr.bda, ble_adv_params->peer_addr, ESP_BD_ADDR_LEN);
peer_addr.type = ble_adv_params->peer_addr_type; peer_addr.type = ble_adv_params->peer_addr_type;
BTA_DmSetBleAdvParamsAll(ble_adv_params->adv_int_min, BTA_DmSetBleAdvParamsAll(ble_adv_params->adv_int_min,
@ -723,12 +722,12 @@ static void btc_add_whitelist_complete_callback(UINT8 status, tBTM_WL_OPERATION
} }
} }
static void btc_set_rand_addr_callback(UINT8 status) static void btc_set_rand_addr_callback(UINT8 status)
{ {
esp_ble_gap_cb_param_t param; esp_ble_gap_cb_param_t param;
bt_status_t ret; bt_status_t ret;
btc_msg_t msg; btc_msg_t msg;
param.set_rand_addr_cmpl.status = btc_btm_status_to_esp_status(status); //todo status param.set_rand_addr_cmpl.status = btc_btm_status_to_esp_status(status); //todo status
msg.sig = BTC_SIG_API_CB; msg.sig = BTC_SIG_API_CB;
msg.pid = BTC_PID_GAP_BLE; msg.pid = BTC_PID_GAP_BLE;
msg.act = ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT; msg.act = ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT;
@ -1010,6 +1009,13 @@ void btc_gap_ble_arg_deep_free(btc_msg_t *msg)
} }
break; break;
} }
case BTC_GAP_BLE_SET_SECURITY_PARAM_EVT: {
uint8_t *value = ((btc_ble_gap_args_t *)msg->arg)->set_security_param.value;
if (value) {
osi_free(value);
}
break;
}
default: default:
LOG_DEBUG("Unhandled deep free %d\n", msg->act); LOG_DEBUG("Unhandled deep free %d\n", msg->act);
break; break;
@ -1108,36 +1114,37 @@ void btc_gap_ble_call_handler(btc_msg_t *msg)
break; break;
} }
case BTC_GAP_BLE_SET_SECURITY_PARAM_EVT: { case BTC_GAP_BLE_SET_SECURITY_PARAM_EVT: {
uint8_t *value = arg->set_security_param.value;
switch(arg->set_security_param.param_type) { switch(arg->set_security_param.param_type) {
case ESP_BLE_SM_PASSKEY: case ESP_BLE_SM_PASSKEY:
break; break;
case ESP_BLE_SM_AUTHEN_REQ_MODE: { case ESP_BLE_SM_AUTHEN_REQ_MODE: {
uint8_t authen_req = 0; uint8_t authen_req = 0;
STREAM_TO_UINT8(authen_req, arg->set_security_param.value); STREAM_TO_UINT8(authen_req, value);
bta_dm_co_ble_set_auth_req(authen_req); bta_dm_co_ble_set_auth_req(authen_req);
break; break;
} }
case ESP_BLE_SM_IOCAP_MODE: { case ESP_BLE_SM_IOCAP_MODE: {
uint8_t iocap = 0; uint8_t iocap = 0;
STREAM_TO_UINT8(iocap, arg->set_security_param.value); STREAM_TO_UINT8(iocap, value);
bta_dm_co_ble_set_io_cap(iocap); bta_dm_co_ble_set_io_cap(iocap);
break; break;
} }
case ESP_BLE_SM_SET_INIT_KEY: { case ESP_BLE_SM_SET_INIT_KEY: {
uint8_t init_key = 0; uint8_t init_key = 0;
STREAM_TO_UINT8(init_key, arg->set_security_param.value); STREAM_TO_UINT8(init_key, value);
bta_dm_co_ble_set_init_key_req(init_key); bta_dm_co_ble_set_init_key_req(init_key);
break; break;
} }
case ESP_BLE_SM_SET_RSP_KEY: { case ESP_BLE_SM_SET_RSP_KEY: {
uint8_t rsp_key = 0; uint8_t rsp_key = 0;
STREAM_TO_UINT8(rsp_key, arg->set_security_param.value); STREAM_TO_UINT8(rsp_key, value);
bta_dm_co_ble_set_rsp_key_req(rsp_key); bta_dm_co_ble_set_rsp_key_req(rsp_key);
break; break;
} }
case ESP_BLE_SM_MAX_KEY_SIZE: { case ESP_BLE_SM_MAX_KEY_SIZE: {
uint8_t key_size = 0; uint8_t key_size = 0;
STREAM_TO_UINT8(key_size, arg->set_security_param.value); STREAM_TO_UINT8(key_size, value);
bta_dm_co_ble_set_max_key_size(key_size); bta_dm_co_ble_set_max_key_size(key_size);
break; break;
} }