Merge branch 'bugfix/ai_review_a2dp' into 'master'

fix(bt): Fix the critical issues related to A2DP from AI review report

See merge request espressif/esp-idf!49355
This commit is contained in:
Jiang Jiang Jian
2026-06-29 11:58:39 +08:00
12 changed files with 49 additions and 13 deletions
@@ -110,6 +110,11 @@ void avdt_ad_init(void)
tAVDT_TC_TBL *p_tbl = avdt_cb.ad.tc_tbl;
memset(&avdt_cb.ad, 0, sizeof(tAVDT_AD));
/* 0 is a valid tc_tbl index; use invalid marker for unassigned LCIDs */
for (i = 0; i < MAX_L2CAP_CHANNELS; i++) {
avdt_cb.ad.lcid_tbl[i] = 0xFF;
}
/* make sure the peer_mtu is a valid value */
for (i = 0; i < AVDT_NUM_TC_TBL; i++, p_tbl++) {
p_tbl->peer_mtu = L2CAP_DEFAULT_MTU;
@@ -940,6 +940,7 @@ UINT16 AVDT_WriteReqOpt(UINT8 handle, BT_HDR *p_pkt, UINT32 time_stamp, UINT8 m_
}
/* map handle to scb */
if ((p_scb = avdt_scb_by_hdl(handle)) == NULL) {
osi_free(p_pkt);
result = AVDT_BAD_HANDLE;
} else {
evt.apiwrite.p_buf = p_pkt;
@@ -383,6 +383,12 @@ tAVDT_CCB *avdt_ccb_alloc(BD_ADDR bd_addr)
memcpy(p_ccb->peer_addr, bd_addr, BD_ADDR_LEN);
p_ccb->cmd_q = fixed_queue_new(QUEUE_SIZE_MAX);
p_ccb->rsp_q = fixed_queue_new(QUEUE_SIZE_MAX);
if (p_ccb->cmd_q == NULL || p_ccb->rsp_q == NULL) {
AVDT_TRACE_ERROR("avdt_ccb_alloc: queue alloc failed");
avdt_ccb_dealloc(p_ccb, NULL);
p_ccb = NULL;
break;
}
p_ccb->timer_entry.param = (UINT32) p_ccb;
AVDT_TRACE_DEBUG("avdt_ccb_alloc %d\n", i);
break;
@@ -712,6 +712,8 @@ void avdt_ccb_cmd_fail(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data)
UINT8 evt;
tAVDT_SCB *p_scb;
memset(&msg, 0, sizeof(msg));
if (p_ccb->p_curr_cmd != NULL) {
if (p_ccb->p_curr_cmd->event < 1 || p_ccb->p_curr_cmd->event > AVDT_SIG_MAX) {
osi_free(p_ccb->p_curr_cmd);