| From ba3e958a40e1c93859a8a337e619414dc65a931f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 14 Sep 2021 21:59:08 +0200 |
| Subject: mwifiex: Properly initialize private structure on interface type |
| changes |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Jonas Dreßler <verdre@v0yd.nl> |
| |
| [ Upstream commit c606008b70627a2fc485732a53cc22f0f66d0981 ] |
| |
| When creating a new virtual interface in mwifiex_add_virtual_intf(), we |
| update our internal driver states like bss_type, bss_priority, bss_role |
| and bss_mode to reflect the mode the firmware will be set to. |
| |
| When switching virtual interface mode using |
| mwifiex_init_new_priv_params() though, we currently only update bss_mode |
| and bss_role. In order for the interface mode switch to actually work, |
| we also need to update bss_type to its proper value, so do that. |
| |
| This fixes a crash of the firmware (because the driver tries to execute |
| commands that are invalid in AP mode) when switching from station mode |
| to AP mode. |
| |
| Signed-off-by: Jonas Dreßler <verdre@v0yd.nl> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Link: https://lore.kernel.org/r/20210914195909.36035-9-verdre@v0yd.nl |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/marvell/mwifiex/cfg80211.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c |
| index b5134f11fc32b..1599ae74b066b 100644 |
| --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c |
| +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c |
| @@ -912,16 +912,20 @@ mwifiex_init_new_priv_params(struct mwifiex_private *priv, |
| switch (type) { |
| case NL80211_IFTYPE_STATION: |
| case NL80211_IFTYPE_ADHOC: |
| - priv->bss_role = MWIFIEX_BSS_ROLE_STA; |
| + priv->bss_role = MWIFIEX_BSS_ROLE_STA; |
| + priv->bss_type = MWIFIEX_BSS_TYPE_STA; |
| break; |
| case NL80211_IFTYPE_P2P_CLIENT: |
| - priv->bss_role = MWIFIEX_BSS_ROLE_STA; |
| + priv->bss_role = MWIFIEX_BSS_ROLE_STA; |
| + priv->bss_type = MWIFIEX_BSS_TYPE_P2P; |
| break; |
| case NL80211_IFTYPE_P2P_GO: |
| - priv->bss_role = MWIFIEX_BSS_ROLE_UAP; |
| + priv->bss_role = MWIFIEX_BSS_ROLE_UAP; |
| + priv->bss_type = MWIFIEX_BSS_TYPE_P2P; |
| break; |
| case NL80211_IFTYPE_AP: |
| priv->bss_role = MWIFIEX_BSS_ROLE_UAP; |
| + priv->bss_type = MWIFIEX_BSS_TYPE_UAP; |
| break; |
| default: |
| mwifiex_dbg(adapter, ERROR, |
| -- |
| 2.33.0 |
| |