On Thu, 2015-08-20 at 17:39 -0400, Marty Faltesek wrote:
> 
> I believe the following race occurs:
> 
> 1. mac80211 is processing a new station that just joined.
> 2. Before it's completed initializing the station, we take an 
> interrupt,
>    with a packet from the STA.
> 3. That interrupt is a management frame from the station which causes
>    rate_control_rate_update to be called, which calls back into the 
> ath10k
>    with the not-fully initialized station.

I'm a bit confused by the stack trace - is this IBSS and the stack
trace is just bad? I don't really see how we get from sta_ps_transition
to sta_rc_update?

> 4. It reaches ath10k_sta_rc_update before the interrupted thread had
> reached ath10k_sta_state()
>    Therefore it has not yet initialized its workqueue. Still NULL.
> 5. When this NULL workqueue gets passed to queue_work, it passes
>    the first check that its not in use because of the NULL struct, 
> but fails the
>    next check in __queue_work because a NULL structure makes the test
>    for an empty list fail.
> 
> 
> Proposed patch is to not add the new station in the hash until after 
> the
> driver initializes it. But I'm not clear what implications this has. 
> Could this
> cause other problems?
> 

I think the issue MichaƂ pointed out is valid - but we can probably
check sta->uploaded in the relevant places?

johannes
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to