mac80211: fix logic error in ibss channel type check
authorFelix Fietkau <nbd@openwrt.org>
Mon, 16 Apr 2012 20:10:42 +0000 (22:10 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 17 Apr 2012 18:17:04 +0000 (14:17 -0400)
The broken check leads to rate control attempting to use HT40 while
the driver is configured for HT20. This leads to interesting hardware
issues.

HT40 can only be used if the channel type is either HT40- or HT40+
and if the channel type of the cell matches the local type.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Cc: stable@vger.kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/ibss.c

index 33fd8d9f714ec05db8aeba88d0bb5c6bf97e8fd0..cef7c29214a8492b3e67f62c4248e5c89dfe7daf 100644 (file)
@@ -457,8 +457,8 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
                         * fall back to HT20 if we don't use or use
                         * the other extension channel
                         */
-                       if ((channel_type == NL80211_CHAN_HT40MINUS ||
-                            channel_type == NL80211_CHAN_HT40PLUS) &&
+                       if (!(channel_type == NL80211_CHAN_HT40MINUS ||
+                             channel_type == NL80211_CHAN_HT40PLUS) ||
                            channel_type != sdata->u.ibss.channel_type)
                                sta_ht_cap_new.cap &=
                                        ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;