diff mbox

[v3] mac80211: Don't restart sta-timer if not associated.

Message ID 1363740650-1626-1-git-send-email-greearb@candelatech.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Ben Greear March 20, 2013, 12:50 a.m. UTC
From: Ben Greear <greearb@candelatech.com>

I found another crash when deleting lots of virtual stations
in a congested environment.  I think the problem is that
the ieee80211_mlme_notify_scan_completed could call
ieee80211_restart_sta_timer for a stopped interface
that was about to be deleted.

With the following patch I am unable to reproduce the
crash.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---
v3:  Just check for sdata-is-running once at top of method
  instead of worrying about if it is associated or not.

:100644 100644 aec786d... 74a8c5f... M	net/mac80211/mlme.c
 net/mac80211/mlme.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

Comments

Stanislaw Gruszka March 20, 2013, 7:30 a.m. UTC | #1
On Tue, Mar 19, 2013 at 05:50:50PM -0700, greearb@candelatech.com wrote:
> From: Ben Greear <greearb@candelatech.com>
> 
> I found another crash when deleting lots of virtual stations
> in a congested environment.  I think the problem is that
> the ieee80211_mlme_notify_scan_completed could call
> ieee80211_restart_sta_timer for a stopped interface
> that was about to be deleted.
> 
> With the following patch I am unable to reproduce the
> crash.
> 
> Signed-off-by: Ben Greear <greearb@candelatech.com>
> ---
> v3:  Just check for sdata-is-running once at top of method
>   instead of worrying about if it is associated or not.
> 
> :100644 100644 aec786d... 74a8c5f... M	net/mac80211/mlme.c
>  net/mac80211/mlme.c |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
> 
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index aec786d..74a8c5f 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -2933,6 +2933,9 @@ static void ieee80211_restart_sta_timer(struct ieee80211_sub_if_data *sdata)
>  {
>  	u32 flags;
>  
> +	if (!ieee80211_sdata_running(sdata))
> +		return;
> +

I think this check should go to ieee80211_mlme_notify_scan_completed(),
and another one to ieee80211_mesh_notify_scan_completed(), IBSS already
has it.

Stanislaw
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johannes Berg March 22, 2013, 9:56 a.m. UTC | #2
On Wed, 2013-03-20 at 08:30 +0100, Stanislaw Gruszka wrote:
> On Tue, Mar 19, 2013 at 05:50:50PM -0700, greearb@candelatech.com wrote:
> > From: Ben Greear <greearb@candelatech.com>
> > 
> > I found another crash when deleting lots of virtual stations
> > in a congested environment.  I think the problem is that
> > the ieee80211_mlme_notify_scan_completed could call
> > ieee80211_restart_sta_timer for a stopped interface
> > that was about to be deleted.
> > 
> > With the following patch I am unable to reproduce the
> > crash.
> > 
> > Signed-off-by: Ben Greear <greearb@candelatech.com>
> > ---
> > v3:  Just check for sdata-is-running once at top of method
> >   instead of worrying about if it is associated or not.
> > 
> > :100644 100644 aec786d... 74a8c5f... M	net/mac80211/mlme.c
> >  net/mac80211/mlme.c |    3 +++
> >  1 files changed, 3 insertions(+), 0 deletions(-)
> > 
> > diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> > index aec786d..74a8c5f 100644
> > --- a/net/mac80211/mlme.c
> > +++ b/net/mac80211/mlme.c
> > @@ -2933,6 +2933,9 @@ static void ieee80211_restart_sta_timer(struct ieee80211_sub_if_data *sdata)
> >  {
> >  	u32 flags;
> >  
> > +	if (!ieee80211_sdata_running(sdata))
> > +		return;
> > +
> 
> I think this check should go to ieee80211_mlme_notify_scan_completed(),
> and another one to ieee80211_mesh_notify_scan_completed(), IBSS already
> has it.

I made these changes and applied it.

johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index aec786d..74a8c5f 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2933,6 +2933,9 @@  static void ieee80211_restart_sta_timer(struct ieee80211_sub_if_data *sdata)
 {
 	u32 flags;
 
+	if (!ieee80211_sdata_running(sdata))
+		return;
+
 	if (sdata->vif.type == NL80211_IFTYPE_STATION) {
 		__ieee80211_stop_poll(sdata);