public inbox for linux-wireless@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mac80211: Deny TX BA session requests during disassociation
@ 2010-02-10  9:22 Sujith
  2010-02-10  9:47 ` Johannes Berg
  0 siblings, 1 reply; 2+ messages in thread
From: Sujith @ 2010-02-10  9:22 UTC (permalink / raw)
  To: linville; +Cc: johannes, linux-wireless

In associated state, when bringing an interface down, existing
BA sessions are torn down. When this is in progress, nothing
prevents mac80211 from accepting another BA session start request.

Use a new station flag to fix this.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 net/mac80211/agg-tx.c   |    8 ++++++++
 net/mac80211/mlme.c     |    4 +++-
 net/mac80211/sta_info.h |    4 ++++
 3 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index 718fbcf..5538e1b 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -237,6 +237,14 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
 	    sdata->vif.type != NL80211_IFTYPE_AP)
 		return -EINVAL;
 
+	if (test_sta_flags(sta, WLAN_STA_DISASSOC)) {
+#ifdef CONFIG_MAC80211_HT_DEBUG
+		printk(KERN_DEBUG "Disassociation is in progress. "
+		       "Denying BA session request\n");
+#endif
+		return -EINVAL;
+	}
+
 	if (test_sta_flags(sta, WLAN_STA_SUSPEND)) {
 #ifdef CONFIG_MAC80211_HT_DEBUG
 		printk(KERN_DEBUG "Suspend in progress. "
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index ee9443d..bfc4a50 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -797,8 +797,10 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata)
 
 	rcu_read_lock();
 	sta = sta_info_get(sdata, bssid);
-	if (sta)
+	if (sta) {
+		set_sta_flags(sta, WLAN_STA_DISASSOC);
 		ieee80211_sta_tear_down_BA_sessions(sta);
+	}
 	rcu_read_unlock();
 
 	changed |= ieee80211_reset_erp_info(sdata);
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index 5ff611a..822d845 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -42,6 +42,9 @@
  *	be in the queues
  * @WLAN_STA_PSPOLL: Station sent PS-poll while driver was keeping
  *	station in power-save mode, reply when the driver unblocks.
+ * @WLAN_STA_DISASSOC: Disassociation in progress.
+ *	This is used to reject TX BA session requests when disassociation
+ *	is in progress.
  */
 enum ieee80211_sta_info_flags {
 	WLAN_STA_AUTH		= 1<<0,
@@ -57,6 +60,7 @@ enum ieee80211_sta_info_flags {
 	WLAN_STA_SUSPEND	= 1<<11,
 	WLAN_STA_PS_DRIVER	= 1<<12,
 	WLAN_STA_PSPOLL		= 1<<13,
+	WLAN_STA_DISASSOC       = 1<<14,
 };
 
 #define STA_TID_NUM 16
-- 
1.6.6.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] mac80211: Deny TX BA session requests during disassociation
  2010-02-10  9:22 [PATCH] mac80211: Deny TX BA session requests during disassociation Sujith
@ 2010-02-10  9:47 ` Johannes Berg
  0 siblings, 0 replies; 2+ messages in thread
From: Johannes Berg @ 2010-02-10  9:47 UTC (permalink / raw)
  To: Sujith; +Cc: linville, linux-wireless

[-- Attachment #1: Type: text/plain, Size: 2645 bytes --]

On Wed, 2010-02-10 at 14:52 +0530, Sujith wrote:
> In associated state, when bringing an interface down, existing
> BA sessions are torn down. When this is in progress, nothing
> prevents mac80211 from accepting another BA session start request.
> 
> Use a new station flag to fix this.

Good catch! Thanks.

Acked-by: Johannes Berg <johannes@sipsolutions.net>

johannes

> Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> ---
>  net/mac80211/agg-tx.c   |    8 ++++++++
>  net/mac80211/mlme.c     |    4 +++-
>  net/mac80211/sta_info.h |    4 ++++
>  3 files changed, 15 insertions(+), 1 deletions(-)
> 
> diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
> index 718fbcf..5538e1b 100644
> --- a/net/mac80211/agg-tx.c
> +++ b/net/mac80211/agg-tx.c
> @@ -237,6 +237,14 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
>  	    sdata->vif.type != NL80211_IFTYPE_AP)
>  		return -EINVAL;
>  
> +	if (test_sta_flags(sta, WLAN_STA_DISASSOC)) {
> +#ifdef CONFIG_MAC80211_HT_DEBUG
> +		printk(KERN_DEBUG "Disassociation is in progress. "
> +		       "Denying BA session request\n");
> +#endif
> +		return -EINVAL;
> +	}
> +
>  	if (test_sta_flags(sta, WLAN_STA_SUSPEND)) {
>  #ifdef CONFIG_MAC80211_HT_DEBUG
>  		printk(KERN_DEBUG "Suspend in progress. "
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index ee9443d..bfc4a50 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -797,8 +797,10 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata)
>  
>  	rcu_read_lock();
>  	sta = sta_info_get(sdata, bssid);
> -	if (sta)
> +	if (sta) {
> +		set_sta_flags(sta, WLAN_STA_DISASSOC);
>  		ieee80211_sta_tear_down_BA_sessions(sta);
> +	}
>  	rcu_read_unlock();
>  
>  	changed |= ieee80211_reset_erp_info(sdata);
> diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
> index 5ff611a..822d845 100644
> --- a/net/mac80211/sta_info.h
> +++ b/net/mac80211/sta_info.h
> @@ -42,6 +42,9 @@
>   *	be in the queues
>   * @WLAN_STA_PSPOLL: Station sent PS-poll while driver was keeping
>   *	station in power-save mode, reply when the driver unblocks.
> + * @WLAN_STA_DISASSOC: Disassociation in progress.
> + *	This is used to reject TX BA session requests when disassociation
> + *	is in progress.
>   */
>  enum ieee80211_sta_info_flags {
>  	WLAN_STA_AUTH		= 1<<0,
> @@ -57,6 +60,7 @@ enum ieee80211_sta_info_flags {
>  	WLAN_STA_SUSPEND	= 1<<11,
>  	WLAN_STA_PS_DRIVER	= 1<<12,
>  	WLAN_STA_PSPOLL		= 1<<13,
> +	WLAN_STA_DISASSOC       = 1<<14,
>  };
>  
>  #define STA_TID_NUM 16


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-02-10  9:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-10  9:22 [PATCH] mac80211: Deny TX BA session requests during disassociation Sujith
2010-02-10  9:47 ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox