rndis_wlan: use ARRAY_SIZE instead of sizeof when adding 11g rates
authorScott Ashcroft <scott.ashcroft@talk21.com>
Tue, 27 May 2008 08:15:02 +0000 (11:15 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 3 Jun 2008 19:00:16 +0000 (15:00 -0400)
While figuring out the TKIP problem I found a bug in the code which adds the 11g
rates. It's using sizeof instead of ARRAY_SIZE to terminate the for loop. This makes
it fall off the end of the rates array start into the frequency array instead. Running
"iwlist rate" should show the problem as there will always be 32 rates with the last
few being bogus.

The following patch will fix it.

Signed-off-by: Scott Ashcroft <scott.ashcroft@talk21.com>
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rndis_wlan.c

index d0b1fb15c7091f8b3334c94f240fe6fa445e6c17..ed310f84f28bca27e3800359c887c23a1e8a1827 100644 (file)
@@ -1108,7 +1108,7 @@ static int rndis_iw_get_range(struct net_device *dev,
        /* fill in 802.11g rates */
        if (has_80211g_rates) {
                num = range->num_bitrates;
-               for (i = 0; i < sizeof(rates_80211g); i++) {
+               for (i = 0; i < ARRAY_SIZE(rates_80211g); i++) {
                        for (j = 0; j < num; j++) {
                                if (range->bitrate[j] ==
                                        rates_80211g[i] * 1000000)