2013-03-20 00:50:56

by Ben Greear

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

From: Ben Greear <[email protected]>

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 <[email protected]>
---
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;
+
if (sdata->vif.type == NL80211_IFTYPE_STATION) {
__ieee80211_stop_poll(sdata);

--
1.7.3.4



2013-03-22 09:56:33

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH v3] mac80211: Don't restart sta-timer if not associated.

On Wed, 2013-03-20 at 08:30 +0100, Stanislaw Gruszka wrote:
> On Tue, Mar 19, 2013 at 05:50:50PM -0700, [email protected] wrote:
> > From: Ben Greear <[email protected]>
> >
> > 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 <[email protected]>
> > ---
> > 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


2013-03-20 07:29:49

by Stanislaw Gruszka

[permalink] [raw]
Subject: Re: [PATCH v3] mac80211: Don't restart sta-timer if not associated.

On Tue, Mar 19, 2013 at 05:50:50PM -0700, [email protected] wrote:
> From: Ben Greear <[email protected]>
>
> 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 <[email protected]>
> ---
> 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