brcmfmac: Reject change vif for p2p if.
authorHante Meuleman <meuleman@broadcom.com>
Fri, 8 Feb 2013 14:53:56 +0000 (15:53 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 8 Feb 2013 19:51:41 +0000 (14:51 -0500)
Reviewed-by: Arend Van Spriel <arend@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c

index 58b24373d6cf81d76f80ba05a814ff6e375bec4e..cba2f34d4c2786f2a669b44f5fd89b236e3a5039 100644 (file)
@@ -673,6 +673,18 @@ brcmf_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
                infra = 0;
                break;
        case NL80211_IFTYPE_STATION:
+               /* Ignore change for p2p IF. Unclear why supplicant does this */
+               if ((vif->wdev.iftype == NL80211_IFTYPE_P2P_CLIENT) ||
+                   (vif->wdev.iftype == NL80211_IFTYPE_P2P_GO)) {
+                       brcmf_dbg(TRACE, "Ignoring cmd for p2p if\n");
+                       /* WAR: It is unexpected to get a change of VIF for P2P
+                        * IF, but it happens. The request can not be handled
+                        * but returning EPERM causes a crash. Returning 0
+                        * without setting ieee80211_ptr->iftype causes trace
+                        * (WARN_ON) but it works with wpa_supplicant
+                        */
+                       return 0;
+               }
                vif->mode = WL_MODE_BSS;
                infra = 1;
                break;