struct ieee80211_hdr *hdr;
        struct sk_buff *last_buf;
        u8 l3_pad_bytes;
+       u8 *hdr_status;
        u16 msdu_len;
        int ret;
 
                skb_pull(msdu, HAL_RX_DESC_SIZE);
        } else if (!rxcb->is_continuation) {
                if ((msdu_len + HAL_RX_DESC_SIZE) > DP_RX_BUFFER_SIZE) {
+                       hdr_status = ath11k_dp_rx_h_80211_hdr(rx_desc);
                        ret = -EINVAL;
                        ath11k_warn(ar->ab, "invalid msdu len %u\n", msdu_len);
+                       ath11k_dbg_dump(ar->ab, ATH11K_DBG_DATA, NULL, "", hdr_status,
+                                       sizeof(struct ieee80211_hdr));
+                       ath11k_dbg_dump(ar->ab, ATH11K_DBG_DATA, NULL, "", rx_desc,
+                                       sizeof(struct hal_rx_desc));
                        goto free_out;
                }
                skb_put(msdu, HAL_RX_DESC_SIZE + l3_pad_bytes + msdu_len);
        struct sk_buff *msdu;
        struct ath11k_skb_rxcb *rxcb;
        struct hal_rx_desc *rx_desc;
+       u8 *hdr_status;
        u16 msdu_len;
 
        spin_lock_bh(&rx_ring->idr_lock);
 
        rx_desc = (struct hal_rx_desc *)msdu->data;
        msdu_len = ath11k_dp_rx_h_msdu_start_msdu_len(rx_desc);
+       if ((msdu_len + HAL_RX_DESC_SIZE) > DP_RX_BUFFER_SIZE) {
+               hdr_status = ath11k_dp_rx_h_80211_hdr(rx_desc);
+               ath11k_warn(ar->ab, "invalid msdu leng %u", msdu_len);
+               ath11k_dbg_dump(ar->ab, ATH11K_DBG_DATA, NULL, "", hdr_status,
+                               sizeof(struct ieee80211_hdr));
+               ath11k_dbg_dump(ar->ab, ATH11K_DBG_DATA, NULL, "", rx_desc,
+                               sizeof(struct hal_rx_desc));
+               dev_kfree_skb_any(msdu);
+               goto exit;
+       }
+
        skb_put(msdu, HAL_RX_DESC_SIZE + msdu_len);
 
        if (ath11k_dp_rx_frag_h_mpdu(ar, msdu, ring_desc)) {