Loading system/stack/l2cap/l2c_ble.cc +8 −9 Original line number Diff line number Diff line Loading @@ -1557,24 +1557,23 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport, } if (status != BTM_SUCCESS) { (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); osi_free(p_buf); } else { if (sec_act == BTM_SEC_ENCRYPT_MITM) { if (BTM_IsLinkKeyAuthed(p_bda, transport)) (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); else { LOG_VERBOSE("%s MITM Protection Not present", __func__); (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, BTM_FAILED_ON_SECURITY); } } else { LOG_VERBOSE("%s MITM Protection not required sec_act = %d", __func__, p_lcb->sec_act); (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); } osi_free(p_buf); } Loading @@ -1588,7 +1587,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport, p_buf = (tL2CAP_SEC_DATA*)fixed_queue_dequeue(p_lcb->le_sec_pending_q); if (status != BTM_SUCCESS) { (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); osi_free(p_buf); } else { Loading @@ -1613,7 +1612,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport, ******************************************************************************/ tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, uint16_t psm, bool is_originator, tL2CAP_SEC_CBACK* p_callback, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data) { tL2CAP_LE_RESULT_CODE result; tL2C_LCB* p_lcb = NULL; Loading @@ -1627,7 +1626,7 @@ tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, if (!p_lcb) { LOG_ERROR("Security check for unknown device"); p_callback(bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_UNKNOWN_ADDR); p_callback(&bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_UNKNOWN_ADDR); return L2CAP_LE_RESULT_NO_RESOURCES; } Loading @@ -1635,7 +1634,7 @@ tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, (tL2CAP_SEC_DATA*)osi_malloc((uint16_t)sizeof(tL2CAP_SEC_DATA)); if (!p_buf) { LOG_ERROR("No resources for connection"); p_callback(bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_NO_RESOURCES); p_callback(&bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_NO_RESOURCES); return L2CAP_LE_RESULT_NO_RESOURCES; } Loading system/stack/l2cap/l2c_csm.cc +4 −4 Original line number Diff line number Diff line Loading @@ -224,7 +224,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) { if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) { p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP; l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, true, &l2c_link_sec_comp2, p_ccb); true, &l2c_link_sec_comp, p_ccb); } else { p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP; btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr, Loading Loading @@ -252,7 +252,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) { if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) { p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP; l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, true, &l2c_link_sec_comp2, p_ccb); true, &l2c_link_sec_comp, p_ccb); } else { if (!BTM_SetLinkPolicyActiveMode(p_ccb->p_lcb->remote_bd_addr)) { LOG_WARN("Unable to set link policy active"); Loading Loading @@ -311,7 +311,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) { p_ccb->chnl_state = CST_TERM_W4_SEC_COMP; tL2CAP_LE_RESULT_CODE result = l2ble_sec_access_req( p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, false, &l2c_link_sec_comp2, p_ccb); &l2c_link_sec_comp, p_ccb); switch (result) { case L2CAP_LE_RESULT_INSUFFICIENT_AUTHORIZATION: Loading Loading @@ -408,7 +408,7 @@ static void l2c_csm_orig_w4_sec_comp(tL2C_CCB* p_ccb, tL2CEVT event, case L2CEVT_LP_CONNECT_CFM: /* Link came up */ if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) { l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, false, &l2c_link_sec_comp2, p_ccb); false, &l2c_link_sec_comp, p_ccb); } else { btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, true, &l2c_link_sec_comp, Loading system/stack/l2cap/l2c_int.h +3 −6 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ #include "osi/include/fixed_queue.h" #include "osi/include/list.h" #include "stack/include/bt_hdr.h" #include "stack/include/btm_sec_api_types.h" #include "stack/include/hci_error_code.h" #include "types/hci_role.h" #include "types/raw_address.h" Loading Loading @@ -271,15 +272,11 @@ typedef struct { #define L2CAP_CBB_DEFAULT_DATA_RATE_BUFF_QUOTA 100 #endif typedef void(tL2CAP_SEC_CBACK)(const RawAddress& bd_addr, tBT_TRANSPORT trasnport, void* p_ref_data, tBTM_STATUS result); typedef struct { uint16_t psm; tBT_TRANSPORT transport; bool is_originator; tL2CAP_SEC_CBACK* p_callback; tBTM_SEC_CALLBACK* p_callback; void* p_ref_data; } tL2CAP_SEC_DATA; Loading Loading @@ -873,7 +870,7 @@ void l2cble_send_peer_disc_req(tL2C_CCB* p_ccb); void l2cble_send_flow_control_credit(tL2C_CCB* p_ccb, uint16_t credit_value); tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, uint16_t psm, bool is_originator, tL2CAP_SEC_CBACK* p_callback, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data); void l2cble_update_data_length(tL2C_LCB* p_lcb); Loading system/stack/l2cap/l2c_utils.cc +1 −1 Original line number Diff line number Diff line Loading @@ -214,7 +214,7 @@ void l2cu_release_lcb(tL2C_LCB* p_lcb) { tL2CAP_SEC_DATA* p_buf = (tL2CAP_SEC_DATA*)fixed_queue_try_dequeue(p_lcb->le_sec_pending_q); if (p_buf->p_callback) p_buf->p_callback(p_lcb->remote_bd_addr, p_lcb->transport, p_buf->p_callback(&p_lcb->remote_bd_addr, p_lcb->transport, p_buf->p_ref_data, BTM_DEV_RESET); osi_free(p_buf); } Loading system/test/mock/mock_stack_l2cap_ble.cc +1 −1 Original line number Diff line number Diff line Loading @@ -175,7 +175,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport, } tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, uint16_t psm, bool is_originator, tL2CAP_SEC_CBACK* p_callback, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data) { inc_func_call_count(__func__); return test::mock::stack_l2cap_ble::l2ble_sec_access_req( Loading Loading
system/stack/l2cap/l2c_ble.cc +8 −9 Original line number Diff line number Diff line Loading @@ -1557,24 +1557,23 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport, } if (status != BTM_SUCCESS) { (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); osi_free(p_buf); } else { if (sec_act == BTM_SEC_ENCRYPT_MITM) { if (BTM_IsLinkKeyAuthed(p_bda, transport)) (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); else { LOG_VERBOSE("%s MITM Protection Not present", __func__); (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, BTM_FAILED_ON_SECURITY); } } else { LOG_VERBOSE("%s MITM Protection not required sec_act = %d", __func__, p_lcb->sec_act); (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); } osi_free(p_buf); } Loading @@ -1588,7 +1587,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport, p_buf = (tL2CAP_SEC_DATA*)fixed_queue_dequeue(p_lcb->le_sec_pending_q); if (status != BTM_SUCCESS) { (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status); osi_free(p_buf); } else { Loading @@ -1613,7 +1612,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport, ******************************************************************************/ tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, uint16_t psm, bool is_originator, tL2CAP_SEC_CBACK* p_callback, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data) { tL2CAP_LE_RESULT_CODE result; tL2C_LCB* p_lcb = NULL; Loading @@ -1627,7 +1626,7 @@ tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, if (!p_lcb) { LOG_ERROR("Security check for unknown device"); p_callback(bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_UNKNOWN_ADDR); p_callback(&bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_UNKNOWN_ADDR); return L2CAP_LE_RESULT_NO_RESOURCES; } Loading @@ -1635,7 +1634,7 @@ tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, (tL2CAP_SEC_DATA*)osi_malloc((uint16_t)sizeof(tL2CAP_SEC_DATA)); if (!p_buf) { LOG_ERROR("No resources for connection"); p_callback(bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_NO_RESOURCES); p_callback(&bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_NO_RESOURCES); return L2CAP_LE_RESULT_NO_RESOURCES; } Loading
system/stack/l2cap/l2c_csm.cc +4 −4 Original line number Diff line number Diff line Loading @@ -224,7 +224,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) { if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) { p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP; l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, true, &l2c_link_sec_comp2, p_ccb); true, &l2c_link_sec_comp, p_ccb); } else { p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP; btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr, Loading Loading @@ -252,7 +252,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) { if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) { p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP; l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, true, &l2c_link_sec_comp2, p_ccb); true, &l2c_link_sec_comp, p_ccb); } else { if (!BTM_SetLinkPolicyActiveMode(p_ccb->p_lcb->remote_bd_addr)) { LOG_WARN("Unable to set link policy active"); Loading Loading @@ -311,7 +311,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) { p_ccb->chnl_state = CST_TERM_W4_SEC_COMP; tL2CAP_LE_RESULT_CODE result = l2ble_sec_access_req( p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, false, &l2c_link_sec_comp2, p_ccb); &l2c_link_sec_comp, p_ccb); switch (result) { case L2CAP_LE_RESULT_INSUFFICIENT_AUTHORIZATION: Loading Loading @@ -408,7 +408,7 @@ static void l2c_csm_orig_w4_sec_comp(tL2C_CCB* p_ccb, tL2CEVT event, case L2CEVT_LP_CONNECT_CFM: /* Link came up */ if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) { l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, false, &l2c_link_sec_comp2, p_ccb); false, &l2c_link_sec_comp, p_ccb); } else { btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, true, &l2c_link_sec_comp, Loading
system/stack/l2cap/l2c_int.h +3 −6 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ #include "osi/include/fixed_queue.h" #include "osi/include/list.h" #include "stack/include/bt_hdr.h" #include "stack/include/btm_sec_api_types.h" #include "stack/include/hci_error_code.h" #include "types/hci_role.h" #include "types/raw_address.h" Loading Loading @@ -271,15 +272,11 @@ typedef struct { #define L2CAP_CBB_DEFAULT_DATA_RATE_BUFF_QUOTA 100 #endif typedef void(tL2CAP_SEC_CBACK)(const RawAddress& bd_addr, tBT_TRANSPORT trasnport, void* p_ref_data, tBTM_STATUS result); typedef struct { uint16_t psm; tBT_TRANSPORT transport; bool is_originator; tL2CAP_SEC_CBACK* p_callback; tBTM_SEC_CALLBACK* p_callback; void* p_ref_data; } tL2CAP_SEC_DATA; Loading Loading @@ -873,7 +870,7 @@ void l2cble_send_peer_disc_req(tL2C_CCB* p_ccb); void l2cble_send_flow_control_credit(tL2C_CCB* p_ccb, uint16_t credit_value); tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, uint16_t psm, bool is_originator, tL2CAP_SEC_CBACK* p_callback, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data); void l2cble_update_data_length(tL2C_LCB* p_lcb); Loading
system/stack/l2cap/l2c_utils.cc +1 −1 Original line number Diff line number Diff line Loading @@ -214,7 +214,7 @@ void l2cu_release_lcb(tL2C_LCB* p_lcb) { tL2CAP_SEC_DATA* p_buf = (tL2CAP_SEC_DATA*)fixed_queue_try_dequeue(p_lcb->le_sec_pending_q); if (p_buf->p_callback) p_buf->p_callback(p_lcb->remote_bd_addr, p_lcb->transport, p_buf->p_callback(&p_lcb->remote_bd_addr, p_lcb->transport, p_buf->p_ref_data, BTM_DEV_RESET); osi_free(p_buf); } Loading
system/test/mock/mock_stack_l2cap_ble.cc +1 −1 Original line number Diff line number Diff line Loading @@ -175,7 +175,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport, } tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr, uint16_t psm, bool is_originator, tL2CAP_SEC_CBACK* p_callback, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data) { inc_func_call_count(__func__); return test::mock::stack_l2cap_ble::l2ble_sec_access_req( Loading