struct ath11k_dp *dp = &ab->dp;
        struct hal_tx_info ti = {0};
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-       struct ieee80211_key_conf *key = info->control.hw_key;
        struct ath11k_skb_cb *skb_cb = ATH11K_SKB_CB(skb);
        struct hal_srng *tcl_ring;
        struct ieee80211_hdr *hdr = (void *)skb->data;
        ti.meta_data_flags = arvif->tcl_metadata;
 
        if (ti.encap_type == HAL_TCL_ENCAP_TYPE_RAW) {
-               if (key) {
+               if (skb_cb->flags & ATH11K_SKB_CIPHER_SET) {
                        ti.encrypt_type =
-                               ath11k_dp_tx_get_encrypt_type(key->cipher);
+                               ath11k_dp_tx_get_encrypt_type(skb_cb->cipher);
 
                        if (ieee80211_has_protected(hdr->frame_control))
                                skb_put(skb, IEEE80211_CCMP_MIC_LEN);
 
 static void ath11k_mgmt_over_wmi_tx_work(struct work_struct *work)
 {
        struct ath11k *ar = container_of(work, struct ath11k, wmi_mgmt_tx_work);
-       struct ieee80211_tx_info *info;
+       struct ath11k_skb_cb *skb_cb;
        struct ath11k_vif *arvif;
        struct sk_buff *skb;
        int ret;
 
        while ((skb = skb_dequeue(&ar->wmi_mgmt_tx_queue)) != NULL) {
-               info = IEEE80211_SKB_CB(skb);
-               if (!info->control.vif) {
-                       ath11k_warn(ar->ab, "no vif found for mgmt frame, flags 0x%x\n",
-                                   info->control.flags);
+               skb_cb = ATH11K_SKB_CB(skb);
+               if (!skb_cb->vif) {
+                       ath11k_warn(ar->ab, "no vif found for mgmt frame\n");
                        ieee80211_free_txskb(ar->hw, skb);
                        continue;
                }
 
-               arvif = ath11k_vif_to_arvif(info->control.vif);
+               arvif = ath11k_vif_to_arvif(skb_cb->vif);
                if (ar->allocated_vdev_map & (1LL << arvif->vdev_id) &&
                    arvif->is_started) {
                        ret = ath11k_mac_mgmt_tx_wmi(ar, arvif, skb);
                        }
                } else {
                        ath11k_warn(ar->ab,
-                                   "dropping mgmt frame for vdev %d, flags 0x%x is_started %d\n",
-                                   arvif->vdev_id, info->control.flags,
+                                   "dropping mgmt frame for vdev %d, is_started %d\n",
+                                   arvif->vdev_id,
                                    arvif->is_started);
                        ieee80211_free_txskb(ar->hw, skb);
                }
        struct ieee80211_vif *vif = info->control.vif;
        struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+       struct ieee80211_key_conf *key = info->control.hw_key;
+       u32 info_flags = info->flags;
        bool is_prb_rsp;
        int ret;
 
-       if (info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) {
+       skb_cb->vif = vif;
+
+       if (key) {
+               skb_cb->cipher = key->cipher;
+               skb_cb->flags |= ATH11K_SKB_CIPHER_SET;
+       }
+
+       if (info_flags & IEEE80211_TX_CTL_HW_80211_ENCAP) {
                skb_cb->flags |= ATH11K_SKB_HW_80211_ENCAP;
        } else if (ieee80211_is_mgmt(hdr->frame_control)) {
                is_prb_rsp = ieee80211_is_probe_resp(hdr->frame_control);