mwifiex: fix NULL pointer dereference during suspend
[deliverable/linux.git] / drivers / net / wireless / marvell / mwifiex / sta_event.c
index 0104108b4ea2f85360065c28dc2628726cccfd4d..7c01778b6bb51c749ae23a31987f9c323e75438e 100644 (file)
@@ -40,8 +40,8 @@
  *      - Erases current SSID and BSSID information
  *      - Sends a disconnect event to upper layers/applications.
  */
-void
-mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code)
+void mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code,
+                                bool from_ap)
 {
        struct mwifiex_adapter *adapter = priv->adapter;
 
@@ -140,7 +140,7 @@ mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code)
        if (priv->bss_mode == NL80211_IFTYPE_STATION ||
            priv->bss_mode == NL80211_IFTYPE_P2P_CLIENT) {
                cfg80211_disconnected(priv->netdev, reason_code, NULL, 0,
-                                     false, GFP_KERNEL);
+                                     !from_ap, GFP_KERNEL);
        }
        eth_zero_addr(priv->cfg_bssid);
 
@@ -574,7 +574,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
                if (priv->media_connected) {
                        reason_code =
                                le16_to_cpu(*(__le16 *)adapter->event_body);
-                       mwifiex_reset_connect_state(priv, reason_code);
+                       mwifiex_reset_connect_state(priv, reason_code, true);
                }
                break;
 
@@ -589,7 +589,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
                if (priv->media_connected) {
                        reason_code =
                                le16_to_cpu(*(__le16 *)adapter->event_body);
-                       mwifiex_reset_connect_state(priv, reason_code);
+                       mwifiex_reset_connect_state(priv, reason_code, true);
                }
                break;
 
@@ -599,7 +599,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
                if (priv->media_connected) {
                        reason_code =
                                le16_to_cpu(*(__le16 *)adapter->event_body);
-                       mwifiex_reset_connect_state(priv, reason_code);
+                       mwifiex_reset_connect_state(priv, reason_code, true);
                }
                break;
 
@@ -708,7 +708,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
 
        case EVENT_EXT_SCAN_REPORT:
                mwifiex_dbg(adapter, EVENT, "event: EXT_SCAN Report\n");
-               if (adapter->ext_scan)
+               if (adapter->ext_scan && !priv->scan_aborting)
                        ret = mwifiex_handle_event_ext_scan_report(priv,
                                                adapter->event_skb->data);
 
This page took 0.026435 seconds and 5 git commands to generate.