Search Linux Wireless

[PATCH] mac80211: fix overwriting of qos_ctrl.tid field

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Fixes overwriting of qos_ctrl.tid field for encrypted frames injected on
monitor interface. qos_ctrl.tid is protected by the encryption, and
cannot be modified after encryption. For injected frames, the encryption
key may not be available.

Before passing the frame to the driver, the qos_ctrl.tid field is
updated from skb->priority. Prior to dbd50a851c50 skb->priority was
updated in ieee80211_select_queue_80211(), but this function is no longer
always called. This patch tries to mimmic the previous behaviour by
updating skb->priority in ieee80211_monitor_start_xmit().

Fixes: dbd50a851c50 ("mac80211: only allocate one queue when using iTXQs")
Signed-off-by: Fredrik Olofsson <fredrik.olofsson@xxxxxxxxxxxxxxxxx>
---
 net/mac80211/tx.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 1fa422782905..cbd273c0b275 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -2263,6 +2263,15 @@ netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
 						    payload[7]);
 	}
 
+	/*
+	 * Initialize skb->priority for QoS frames. This is put in the TID field
+	 * of the frame before passing it to the driver.
+	 */
+	if (ieee80211_is_data_qos(hdr->frame_control)) {
+		u8 *p = ieee80211_get_qos_ctl(hdr);
+		skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK;
+	}
+
 	memset(info, 0, sizeof(*info));
 
 	info->flags = IEEE80211_TX_CTL_REQ_TX_STATUS |
-- 
2.20.1




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux