mwifiex: fix smatch errors
authorYogesh Ashok Powar <yogeshp@marvell.com>
Wed, 5 Oct 2011 21:58:24 +0000 (14:58 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 11 Oct 2011 20:41:11 +0000 (16:41 -0400)
drivers/net/wireless/mwifiex/main.c +828 mwifiex_remove_card(52)
  error: potential null derefence 'priv'.
drivers/net/wireless/mwifiex/main.c +828 mwifiex_remove_card(52)
  error: we previously assumed 'priv' could be null (see line 820)
drivers/net/wireless/mwifiex/txrx.c +90 mwifiex_process_tx(24)
  error: potential null derefence 'local_tx_pd'.
drivers/net/wireless/mwifiex/sta_ioctl.c +766
mwifiex_rate_ioctl_set_rate_value(30)
  error: buffer overflow 'rate' 14 <= 14

Cc: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/main.c
drivers/net/wireless/mwifiex/sta_ioctl.c
drivers/net/wireless/mwifiex/txrx.c

index 8486451..277ea84 100644 (file)
@@ -825,6 +825,10 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem)
                rtnl_unlock();
        }
 
+       priv = adapter->priv[0];
+       if (!priv)
+               goto exit_remove;
+
        wiphy_unregister(priv->wdev->wiphy);
        wiphy_free(priv->wdev->wiphy);
        kfree(priv->wdev);
index 520800b..f20550a 100644 (file)
@@ -763,7 +763,7 @@ static int mwifiex_rate_ioctl_set_rate_value(struct mwifiex_private *priv,
                        if ((rate[i] & 0x7f) == (rate_cfg->rate & 0x7f))
                                break;
                }
-               if (!rate[i] || (i == MWIFIEX_SUPPORTED_RATES)) {
+               if ((i == MWIFIEX_SUPPORTED_RATES) || !rate[i]) {
                        dev_err(adapter->dev, "fixed data rate %#x is out "
                               "of range\n", rate_cfg->rate);
                        return -1;
index 6190b2f..5d95c4b 100644 (file)
@@ -87,7 +87,8 @@ int mwifiex_process_tx(struct mwifiex_private *priv, struct sk_buff *skb,
                        (adapter->pps_uapsd_mode) &&
                        (adapter->tx_lock_flag)) {
                                priv->adapter->tx_lock_flag = false;
-                               local_tx_pd->flags = 0;
+                               if (local_tx_pd)
+                                       local_tx_pd->flags = 0;
                }
                dev_dbg(adapter->dev, "data: -EBUSY is returned\n");
                break;