mac80211: use same flag everywhere to avoid sequence number overwrite
authorMathy Vanhoef <Mathy.Vanhoef@kuleuven.be>
Thu, 23 Jul 2020 10:01:51 +0000 (14:01 +0400)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 31 Jul 2020 07:27:01 +0000 (09:27 +0200)
Use the IEEE80211_TX_CTRL_NO_SEQNO flag in ieee80211_tx_info to mark
probe requests whose sequence number must not be overwritten. This
provides consistency with the radiotap flag that can be set to indicate
that the sequence number of an injected frame should not be overwritten.

Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@kuleuven.be>
Link: https://lore.kernel.org/r/20200723100153.31631-4-Mathy.Vanhoef@kuleuven.be
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/ieee80211_i.h
net/mac80211/scan.c
net/mac80211/tx.c

index 28b154c6e72dc78bbe47683232a87fd9edf8bb5e..6f77018db23f9555cee427c259cdeea333ff6a6a 100644 (file)
@@ -164,7 +164,6 @@ typedef unsigned __bitwise ieee80211_tx_result;
 #define TX_DROP                ((__force ieee80211_tx_result) 1u)
 #define TX_QUEUED      ((__force ieee80211_tx_result) 2u)
 
-#define IEEE80211_TX_NO_SEQNO          BIT(0)
 #define IEEE80211_TX_UNICAST           BIT(1)
 #define IEEE80211_TX_PS_BUFFERED       BIT(2)
 
index 8003be6dae8a4d0a5a105f9ef49921a4e660a04a..032f55d38f7d871b081e9975dd8d21c6c477f3b8 100644 (file)
@@ -591,7 +591,6 @@ static void ieee80211_send_scan_probe_req(struct ieee80211_sub_if_data *sdata,
                                          struct ieee80211_channel *channel)
 {
        struct sk_buff *skb;
-       u32 txdata_flags = 0;
 
        skb = ieee80211_build_probe_req(sdata, src, dst, ratemask, channel,
                                        ssid, ssid_len,
@@ -600,15 +599,15 @@ static void ieee80211_send_scan_probe_req(struct ieee80211_sub_if_data *sdata,
        if (skb) {
                if (flags & IEEE80211_PROBE_FLAG_RANDOM_SN) {
                        struct ieee80211_hdr *hdr = (void *)skb->data;
+                       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
                        u16 sn = get_random_u32();
 
-                       txdata_flags |= IEEE80211_TX_NO_SEQNO;
+                       info->control.flags |= IEEE80211_TX_CTRL_NO_SEQNO;
                        hdr->seq_ctrl =
                                cpu_to_le16(IEEE80211_SN_TO_SEQ(sn));
                }
                IEEE80211_SKB_CB(skb)->flags |= tx_flags;
-               ieee80211_tx_skb_tid_band(sdata, skb, 7, channel->band,
-                                         txdata_flags);
+               ieee80211_tx_skb_tid_band(sdata, skb, 7, channel->band, 0);
        }
 }
 
index e1e915e7cc8e7d911751f7947d136075900d79a0..b85876d69433bbe6f10150702d664b5eb6f8c59f 100644 (file)
@@ -836,8 +836,6 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
         */
        if (!ieee80211_is_data_qos(hdr->frame_control) ||
            is_multicast_ether_addr(hdr->addr1)) {
-               if (tx->flags & IEEE80211_TX_NO_SEQNO)
-                       return TX_CONTINUE;
                /* driver should assign sequence number */
                info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
                /* for pure STA mode without beacons, we can do it */