mwifiex: NULL check for cfg80211_inform_bss()
authorXinming Hu <huxm@marvell.com>
Fri, 18 Sep 2015 13:32:07 +0000 (06:32 -0700)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 29 Sep 2015 07:47:33 +0000 (10:47 +0300)
cfg80211_inform_bss would return null in some cases, such as
memory allocation failure.

This patch adds sanity check for this case, to avoid possible
issues when above corner case is hit.

Signed-off-by: Xinming Hu <huxm@marvell.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/mwifiex/cfg80211.c
drivers/net/wireless/mwifiex/scan.c

index d814340..30cbafb 100644 (file)
@@ -1994,8 +1994,10 @@ static int mwifiex_cfg80211_inform_ibss_bss(struct mwifiex_private *priv)
                                  CFG80211_BSS_FTYPE_UNKNOWN,
                                  bss_info.bssid, 0, WLAN_CAPABILITY_IBSS,
                                  0, ie_buf, ie_len, 0, GFP_KERNEL);
-       cfg80211_put_bss(priv->wdev.wiphy, bss);
-       memcpy(priv->cfg_bssid, bss_info.bssid, ETH_ALEN);
+       if (bss) {
+               cfg80211_put_bss(priv->wdev.wiphy, bss);
+               ether_addr_copy(priv->cfg_bssid, bss_info.bssid);
+       }
 
        return 0;
 }
index 5847863..3675730 100644 (file)
@@ -1839,14 +1839,18 @@ mwifiex_parse_single_response_buf(struct mwifiex_private *priv, u8 **bss_info,
                                            bssid, timestamp,
                                            cap_info_bitmap, beacon_period,
                                            ie_buf, ie_len, rssi, GFP_KERNEL);
-                       bss_priv = (struct mwifiex_bss_priv *)bss->priv;
-                       bss_priv->band = band;
-                       bss_priv->fw_tsf = fw_tsf;
-                       if (priv->media_connected &&
-                           !memcmp(bssid, priv->curr_bss_params.bss_descriptor
-                                   .mac_address, ETH_ALEN))
-                               mwifiex_update_curr_bss_params(priv, bss);
-                       cfg80211_put_bss(priv->wdev.wiphy, bss);
+                       if (bss) {
+                               bss_priv = (struct mwifiex_bss_priv *)bss->priv;
+                               bss_priv->band = band;
+                               bss_priv->fw_tsf = fw_tsf;
+                               if (priv->media_connected &&
+                                   !memcmp(bssid, priv->curr_bss_params.
+                                           bss_descriptor.mac_address,
+                                           ETH_ALEN))
+                                       mwifiex_update_curr_bss_params(priv,
+                                                                      bss);
+                               cfg80211_put_bss(priv->wdev.wiphy, bss);
+                       }
 
                        if ((chan->flags & IEEE80211_CHAN_RADAR) ||
                            (chan->flags & IEEE80211_CHAN_NO_IR)) {