diff --git a/umac/cmn_services/crypto/src/wlan_crypto_ccmp.c b/umac/cmn_services/crypto/src/wlan_crypto_ccmp.c index 501bafe67cc5..382da3019acb 100644 --- a/umac/cmn_services/crypto/src/wlan_crypto_ccmp.c +++ b/umac/cmn_services/crypto/src/wlan_crypto_ccmp.c @@ -58,9 +58,14 @@ static QDF_STATUS ccmp_encap(struct wlan_crypto_key *key, if (encapdone) { ivp = (uint8_t *)qdf_nbuf_data(wbuf); } else { - ivp = (uint8_t *)qdf_nbuf_push_head(wbuf, - cipher_table->header); - qdf_mem_move(ivp, ivp + cipher_table->header, hdrlen); + uint8_t ivmic_len = cipher_table->header + cipher_table->miclen; + ivp = (uint8_t *)qdf_nbuf_push_head(wbuf, ivmic_len); + qdf_mem_move(ivp, ivp + ivmic_len, hdrlen); + + qdf_mem_move(ivp + hdrlen + cipher_table->header, + ivp + hdrlen + ivmic_len, + (qdf_nbuf_len(wbuf) - hdrlen - ivmic_len)); + ivp = (uint8_t *) qdf_nbuf_data(wbuf); }