diff --git a/system/bta/hl/bta_hl_act.cc b/system/bta/hl/bta_hl_act.cc
index 0a8e8d05d6ac846e13fae557ba822bd83f444c48..569f66c0caaf82827cfc79c235ebf44a16137e17 100644
--- a/system/bta/hl/bta_hl_act.cc
+++ b/system/bta/hl/bta_hl_act.cc
@@ -372,6 +372,11 @@ void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx,
   APPL_TRACE_DEBUG("bta_hl_dch_ci_get_tx_data");
 #endif
 
+  if (p_data != NULL) {
+    status = p_data->ci_get_put_data.status;
+    APPL_TRACE_WARNING("%s: status=%d", __func__, status);
+  }
+
   p_dcb->cout_oper &= ~BTA_HL_CO_GET_TX_DATA_MASK;
 
   if (p_dcb->close_pending) {
@@ -381,6 +386,8 @@ void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx,
     if (!p_dcb->cout_oper) {
       close_dch = true;
     }
+  } else if (status == BTA_HL_STATUS_FAIL) {
+    free_buf = TRUE;
   } else {
     result = MCA_WriteReq((tMCA_DL)p_dcb->mdl_handle, p_dcb->p_tx_pkt);
     if (result != MCA_SUCCESS) {
diff --git a/system/btif/co/bta_hl_co.cc b/system/btif/co/bta_hl_co.cc
index 66699daea39c70f63df7aa026a549ef8caf52be4..a4ddbb6a91f5f5732e736680a460a1b588696761 100644
--- a/system/btif/co/bta_hl_co.cc
+++ b/system/btif/co/bta_hl_co.cc
@@ -302,7 +302,7 @@ void bta_hl_co_get_tx_data(uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle,
                                         &mdl_idx)) {
     p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
 
-    if (p_dcb->tx_size <= buf_size) {
+    if ((p_dcb->tx_size <= buf_size) && p_dcb->p_tx_pkt) {
       memcpy(p_buf, p_dcb->p_tx_pkt, p_dcb->tx_size);
       osi_free_and_reset((void**)&p_dcb->p_tx_pkt);
       p_dcb->tx_size = 0;