mac80211: Fix bug in Tx ack status reporting in 802.3 xmit path
authorVasanthakumar Thiagarajan <vthiagar@codeaurora.org>
Wed, 22 Jul 2020 14:20:17 +0000 (19:50 +0530)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 30 Jul 2020 08:25:17 +0000 (10:25 +0200)
Allocated ack_frame id from local->ack_status_frames is not really
stored in the tx_info for 802.3 Tx path. Due to this, tx ack status
is not reported and ack_frame id is not freed for the buffers requiring
tx ack status. Also move the memset to 0 of tx_info before
IEEE80211_TX_CTL_REQ_TX_STATUS flag assignment.

Fixes: 50ff477a8639 ("mac80211: add 802.11 encapsulation offloading support")
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@codeaurora.org>
Link: https://lore.kernel.org/r/1595427617-1713-1-git-send-email-vthiagar@codeaurora.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/tx.c

index 1a2941e5244fb8d8ce0a20d55816c67c047489d3..3529d1368068232e238b59789ca4f881e1fd2a2b 100644 (file)
@@ -4230,11 +4230,12 @@ static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,
            test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))
                goto out_free;
 
+       memset(info, 0, sizeof(*info));
+
        if (unlikely(!multicast && skb->sk &&
                     skb_shinfo(skb)->tx_flags & SKBTX_WIFI_STATUS))
-               ieee80211_store_ack_skb(local, skb, &info->flags, NULL);
-
-       memset(info, 0, sizeof(*info));
+               info->ack_frame_id = ieee80211_store_ack_skb(local, skb,
+                                                            &info->flags, NULL);
 
        if (unlikely(sdata->control_port_protocol == ehdr->h_proto)) {
                if (sdata->control_port_no_encrypt)