[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)