|
@@ -2210,8 +2210,10 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
priv->bss_started = 0;
|
|
|
priv->bss_num = 0;
|
|
|
|
|
|
- if (mwifiex_cfg80211_init_p2p_client(priv))
|
|
|
- return ERR_PTR(-EFAULT);
|
|
|
+ if (mwifiex_cfg80211_init_p2p_client(priv)) {
|
|
|
+ wdev = ERR_PTR(-EFAULT);
|
|
|
+ goto done;
|
|
|
+ }
|
|
|
|
|
|
break;
|
|
|
default:
|
|
@@ -2224,7 +2226,8 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
if (!dev) {
|
|
|
wiphy_err(wiphy, "no memory available for netdevice\n");
|
|
|
priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
+ wdev = ERR_PTR(-ENOMEM);
|
|
|
+ goto done;
|
|
|
}
|
|
|
|
|
|
mwifiex_init_priv_params(priv, dev);
|
|
@@ -2264,7 +2267,9 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
wiphy_err(wiphy, "cannot register virtual network device\n");
|
|
|
free_netdev(dev);
|
|
|
priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
- return ERR_PTR(-EFAULT);
|
|
|
+ priv->netdev = NULL;
|
|
|
+ wdev = ERR_PTR(-EFAULT);
|
|
|
+ goto done;
|
|
|
}
|
|
|
|
|
|
sema_init(&priv->async_sem, 1);
|
|
@@ -2274,6 +2279,13 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
|
|
#ifdef CONFIG_DEBUG_FS
|
|
|
mwifiex_dev_debugfs_init(priv);
|
|
|
#endif
|
|
|
+
|
|
|
+done:
|
|
|
+ if (IS_ERR(wdev)) {
|
|
|
+ kfree(priv->wdev);
|
|
|
+ priv->wdev = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
return wdev;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(mwifiex_add_virtual_intf);
|