From: Johannes Berg <johannes@sipsolutions.net>
To: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: linux-wireless@vger.kernel.org
Subject: Re: [RFC] mac80211: fix possible tid_rx->reorder_timer use after free
Date: Mon, 19 Mar 2012 14:07:57 +0100 [thread overview]
Message-ID: <1332162477.3359.34.camel@jlt3.sipsolutions.net> (raw)
In-Reply-To: <1332162188.3359.33.camel@jlt3.sipsolutions.net> (sfid-20120319_140315_064637_786D2F10)
On Mon, 2012-03-19 at 14:03 +0100, Johannes Berg wrote:
> On Mon, 2012-03-19 at 13:50 +0100, Stanislaw Gruszka wrote:
> > Is possible that we arm tid_rx->reorder_timer after del_timer_sync(). To
> > fix: first wait for RCU grace period finish and then delete timer. Timer
> > will not be armed again as rcu_dereference(sta->ampdu_mlme.tid_rx[tid])
> > will return NULL.
> >
> > Debug object detected problem with the following warning:
> > ODEBUG: free active (active state 0) object type: timer_list hint: sta_rx_agg_reorder_timer_expired+0x0/0xf0 [mac80211]
> >
> > Bug report (with full warning):
> > https://bugzilla.redhat.com/show_bug.cgi?id=804007
> >
> > Reported-by: "jan p. springer" <jsd@igroup.org>
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> > ---
> > net/mac80211/agg-rx.c | 8 ++++----
> > net/mac80211/sta_info.h | 1 -
> > 2 files changed, 4 insertions(+), 5 deletions(-)
> >
> > diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
> > index 1068f66..2c1223e 100644
> > --- a/net/mac80211/agg-rx.c
> > +++ b/net/mac80211/agg-rx.c
> > @@ -43,10 +43,8 @@
> > #include "ieee80211_i.h"
> > #include "driver-ops.h"
> >
> > -static void ieee80211_free_tid_rx(struct rcu_head *h)
> > +static void ieee80211_free_tid_rx(struct tid_ampdu_rx *tid_rx)
> > {
> > - struct tid_ampdu_rx *tid_rx =
> > - container_of(h, struct tid_ampdu_rx, rcu_head);
> > int i;
> >
> > for (i = 0; i < tid_rx->buf_size; i++)
> > @@ -90,10 +88,12 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
> > ieee80211_send_delba(sta->sdata, sta->sta.addr,
> > tid, WLAN_BACK_RECIPIENT, reason);
> >
> > + synchronize_rcu();
> > +
> > del_timer_sync(&tid_rx->session_timer);
> > del_timer_sync(&tid_rx->reorder_timer);
> >
> > - call_rcu(&tid_rx->rcu_head, ieee80211_free_tid_rx);
> > + ieee80211_free_tid_rx(tid_rx);
>
> Hmmm. That synchronize_rcu() could become rather expensive. I've been
> trying to reduce our use of synchronize_rcu() now.
>
> I was checking if we could move the timer deletions into
> ieee80211_free_tid_rx since call_rcu runs from another softirq, but I'm
> not really sure -- the timer softirq could be running on another CPU?
I was actually thinking of using just del_timer(), but now that I think
about it, should anything prevent us from using del_timer_sync() inside
ieee80211_free_tid_rx?
johannes
next prev parent reply other threads:[~2012-03-19 13:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-19 12:50 [RFC] mac80211: fix possible tid_rx->reorder_timer use after free Stanislaw Gruszka
2012-03-19 13:03 ` Johannes Berg
2012-03-19 13:07 ` Johannes Berg [this message]
2012-03-19 13:43 ` Stanislaw Gruszka
2012-03-19 13:49 ` Johannes Berg
2012-03-19 13:57 ` Stanislaw Gruszka
2012-03-19 13:40 ` Stanislaw Gruszka
2012-03-19 13:50 ` Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1332162477.3359.34.camel@jlt3.sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=sgruszka@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.