The association request includes a list of supported data rates.
802.11b: 4 supported rates.
802.11g: 12 (8 + 4) supported rates.
802.11a: 8 supported rates.
The rates tag of the assoc request has room for only 8 rates. In case of
802.11g an extended rate tag is appended. However in net/wireless/mlme.c
an extended (empty) rate tag is also appended if the number of rates is
exact 8. This empty (length=0) extended rates tag causes some APs to
deny association with code 18 (unsupported rates). These APs include my
ZyXEL G-570U, and according to Tomas Winkler som Cisco APs.
'If count == 8' has been used to check for the need for an extended rates
tag. But count would also be equal to 8 if the for loop exited because of
no more supported rates. Therefore a check for count being less than
rates_len would seem more correct.
Thanks to:
* Dan Williams for newbie guidance
* Tomas Winkler for confirming the problem
Signed-off-by: Jan-Espen Pettersen <[email protected]>
--- a/net/mac80211/mlme.c 2008-08-25 00:19:30.000000000 +0200
+++ b/net/mac80211/mlme.c 2008-08-25 18:30:48.000000000 +0200
@@ -813,7 +813,7 @@
}
}
- if (count == 8) {
+ if (rates_len > count) {
pos = skb_put(skb, rates_len - count + 2);
*pos++ = WLAN_EID_EXT_SUPP_RATES;
*pos++ = rates_len - count;
Jan-Espen Pettersen wrote:
> The association request includes a list of supported data rates.
>
> 802.11b: 4 supported rates.
> 802.11g: 12 (8 + 4) supported rates.
> 802.11a: 8 supported rates.
>
> The rates tag of the assoc request has room for only 8 rates. In case of
> 802.11g an extended rate tag is appended. However in net/wireless/mlme.c
> an extended (empty) rate tag is also appended if the number of rates is
> exact 8. This empty (length=0) extended rates tag causes some APs to
> deny association with code 18 (unsupported rates). These APs include my
> ZyXEL G-570U, and according to Tomas Winkler som Cisco APs.
>
> 'If count == 8' has been used to check for the need for an extended rates
> tag. But count would also be equal to 8 if the for loop exited because of
> no more supported rates. Therefore a check for count being less than
> rates_len would seem more correct.
>
> Thanks to:
> * Dan Williams for newbie guidance
> * Tomas Winkler for confirming the problem
>
> Signed-off-by: Jan-Espen Pettersen
Just to add to this. I've had a long standing issue with my laptop not
associating to my AP at home and this patch has fixed my issue as well. My
AP however is a Billion 7404VGO-M ADSL modem/router/802.11b/g and my
wireless card an Intel Wireless 4965AGN chipset.
Previous behaviour was the card would associate, then drop out, then
associate again... over and over. Never any traffic, but would work fine on
other APs. I applied this patch to my 2.6.26 kernel and now it works fine.
Thanks!