Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7b9c520 authored by Amitkumar Karwar's avatar Amitkumar Karwar Committed by John W. Linville
Browse files

mwifiex: update config_bands during infra association



Currently "adapter->config_bands" is updated during infra
association only if channel is provided by user in "iw connect"
command. config_bands is used while preparing association
request to calculate supported rates by intersecting our rates
with the rates advertised by AP.

There is corner case in which we include zero rates in
supported rates TLV based on previous IBSS network history,
which leads to association failure.

This patch fixes the problem by correctly updating config_bands.

Cc: "3.7.y" <stable@vger.kernel.org>
Signed-off-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent b7e98b51
Loading
Loading
Loading
Loading
+1 −14
Original line number Diff line number Diff line
@@ -1459,7 +1459,7 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
	struct cfg80211_ssid req_ssid;
	int ret, auth_type = 0;
	struct cfg80211_bss *bss = NULL;
	u8 is_scanning_required = 0, config_bands = 0;
	u8 is_scanning_required = 0;

	memset(&req_ssid, 0, sizeof(struct cfg80211_ssid));

@@ -1478,19 +1478,6 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
	/* disconnect before try to associate */
	mwifiex_deauthenticate(priv, NULL);

	if (channel) {
		if (mode == NL80211_IFTYPE_STATION) {
			if (channel->band == IEEE80211_BAND_2GHZ)
				config_bands = BAND_B | BAND_G | BAND_GN;
			else
				config_bands = BAND_A | BAND_AN;

			if (!((config_bands | priv->adapter->fw_bands) &
			      ~priv->adapter->fw_bands))
				priv->adapter->config_bands = config_bands;
		}
	}

	/* As this is new association, clear locally stored
	 * keys and security related flags */
	priv->sec_info.wpa_enabled = false;
+14 −0
Original line number Diff line number Diff line
@@ -283,6 +283,20 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
		if (ret)
			goto done;

		if (bss_desc) {
			u8 config_bands = 0;

			if (mwifiex_band_to_radio_type((u8) bss_desc->bss_band)
			    == HostCmd_SCAN_RADIO_TYPE_BG)
				config_bands = BAND_B | BAND_G | BAND_GN;
			else
				config_bands = BAND_A | BAND_AN;

			if (!((config_bands | adapter->fw_bands) &
			      ~adapter->fw_bands))
				adapter->config_bands = config_bands;
		}

		ret = mwifiex_check_network_compatibility(priv, bss_desc);
		if (ret)
			goto done;