Search Linux Wireless

[PATCH] mac80211: Fix TX status reporting for injected data frames

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

 



An earlier optimization on removing unnecessary traffic on cooked
monitor interfaces (f6021ac43c4cd556ade8c0b0d641b29fd0181d4a) ended up
removing quite a bit more than just unnecessary traffic. It was not
supposed to remove TX status reporting for injected frames, but ended
up doing it by checking the injected flag in skb->cb only after that
field had been cleared with memset.. Fix this by taking a local copy
of the injected flag before skb->cb is cleared.

This broke user space applications that depend on getting TX status
notifications for injected data frames. For example, STA inactivity
poll from hostapd did not work and ended up kicking out stations even
if they were still present.

Signed-off-by: Jouni Malinen <j@xxxxx>

---
 net/mac80211/status.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- uml.orig/net/mac80211/status.c	2009-11-29 13:33:16.000000000 +0200
+++ uml/net/mac80211/status.c	2009-11-29 14:15:50.000000000 +0200
@@ -148,6 +148,7 @@ void ieee80211_tx_status(struct ieee8021
 	struct net_device *prev_dev = NULL;
 	struct sta_info *sta;
 	int retry_count = -1, i;
+	bool injected;
 
 	for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
 		/* the HW cannot have attempted that rate */
@@ -297,6 +298,9 @@ void ieee80211_tx_status(struct ieee8021
 	/* for now report the total retry_count */
 	rthdr->data_retries = retry_count;
 
+	/* Need to make a copy before skb->cb gets cleared */
+	injected = !!(info->flags & IEEE80211_TX_CTL_INJECTED);
+
 	/* XXX: is this sufficient for BPF? */
 	skb_set_mac_header(skb, 0);
 	skb->ip_summed = CHECKSUM_UNNECESSARY;
@@ -311,7 +315,7 @@ void ieee80211_tx_status(struct ieee8021
 				continue;
 
 			if ((sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) &&
-			    !(info->flags & IEEE80211_TX_CTL_INJECTED) &&
+			    !injected &&
 			    (type == IEEE80211_FTYPE_DATA))
 				continue;
 

-- 
Jouni Malinen                                            PGP id EFC895FA
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux