[WCNCR00154583] cfg80211: Fix error handle .
[Description]
Fix error handle of mtk_p2p_cfg80211_add_iface().
Change-Id: I8b6d7e33ab5bb33706b9a321a168604ab92f0143
Signed-off-by: Th3 Huang <th3.huang@mediatek.com>
CR-Id: WCNCR00154583
Feature: cfg80211
diff --git a/os/linux/gl_p2p_cfg80211.c b/os/linux/gl_p2p_cfg80211.c
index 564ae76..e29a848 100644
--- a/os/linux/gl_p2p_cfg80211.c
+++ b/os/linux/gl_p2p_cfg80211.c
@@ -278,7 +278,7 @@
P_GL_P2P_INFO_T prP2pInfo = (P_GL_P2P_INFO_T) NULL;
P_GL_HIF_INFO_T prHif = NULL;
P_MSG_P2P_SWITCH_OP_MODE_T prSwitchModeMsg = (P_MSG_P2P_SWITCH_OP_MODE_T) NULL;
- struct wireless_dev *prWdev = NULL;
+ struct wireless_dev *prWdev = ERR_PTR(-ENOMEM);
P_P2P_ROLE_FSM_INFO_T prP2pRoleFsmInfo = (P_P2P_ROLE_FSM_INFO_T) NULL;
P_NETDEV_PRIVATE_GLUE_INFO prNetDevPriv = (P_NETDEV_PRIVATE_GLUE_INFO) NULL;
PARAM_MAC_ADDRESS rMacAddr;
@@ -344,7 +344,10 @@
prWdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
if (!prWdev) {
DBGLOG(P2P, ERROR, "allocate p2p wireless device fail, no memory\n");
- return FALSE;
+ prWdev = ERR_PTR(-ENOMEM);
+ free_netdev(prP2pInfo->aprRoleHandler);
+ prP2pInfo->aprRoleHandler = NULL;
+ break;
}
kalMemCopy(prWdev, gprP2pWdev, sizeof(struct wireless_dev));
prWdev->netdev = prNewNetDevice;
@@ -374,10 +377,11 @@
if (register_netdevice(prP2pInfo->aprRoleHandler) < 0) {
DBGLOG(P2P, TRACE, "mtk_p2p_cfg80211_add_iface 456\n");
DBGLOG(INIT, WARN, "unable to register netdevice for p2p\n");
-
+ kfree(prWdev);
+ prWdev = ERR_PTR(-ENOMEM);
free_netdev(prP2pInfo->aprRoleHandler);
-
- prNewNetDevice = NULL;
+ prP2pInfo->aprRoleHandler = NULL;
+ break;
} else {
DBGLOG(P2P, TRACE, "register_netdev OK\n");
prGlueInfo->prAdapter->rP2PNetRegState = ENUM_NET_REG_STATE_REGISTERED;
@@ -416,10 +420,11 @@
if (prSwitchModeMsg == NULL) {
ASSERT(FALSE);
DBGLOG(INIT, WARN, "unable to alloc msg\n");
-
+ kfree(prWdev);
+ prWdev = ERR_PTR(-ENOMEM);
free_netdev(prGlueInfo->prP2PInfo[u4Idx]->aprRoleHandler);
-
- prNewNetDevice = NULL;
+ prGlueInfo->prP2PInfo[u4Idx]->aprRoleHandler = NULL;
+ break;
} else {
prSwitchModeMsg->rMsgHdr.eMsgId = MID_MNY_P2P_FUN_SWITCH;
prSwitchModeMsg->ucRoleIdx = 0;
@@ -457,7 +462,7 @@
mboxSendMsg(prGlueInfo->prAdapter, MBOX_ID_0, (P_MSG_HDR_T) prMsgActiveBss, MSG_SEND_METHOD_BUF);
} while (FALSE);
- return gprP2pRoleWdev[u4Idx];
+ return prWdev;
} /* mtk_p2p_cfg80211_add_iface */
int mtk_p2p_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev)