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 d8143409da60d552a82fb69b29d3f65a7d50e977..30cbafbd17c69d272a4068c6b25cf2fac72c2af3 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 5847863a2d6bec573956ff88c42a16c3495333b3..3675730fc3b5b54aa6e68c138ca05d1346dc306c 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)) {