Browse Source

qcacld-3.0: Cleanup checks in the driver exit path

Propagation from qcacld-2.0 to qcacld-3.0

Added sanity checks for below variable before accessing in the
driver exit path.

nl_srv_sock
pdev_txrx_ctx

Change-Id: I793db21e1a6d1eded027ecbd2805494ea7610852
CRs-Fixed: 846457
Himanshu Agarwal 9 years ago
parent
commit
e1086fad37
2 changed files with 15 additions and 11 deletions
  1. 7 6
      core/utils/nlink/src/wlan_nlink_srv.c
  2. 8 5
      core/wma/src/wma_data.c

+ 7 - 6
core/utils/nlink/src/wlan_nlink_srv.c

@@ -149,7 +149,7 @@ int nl_srv_unregister(tWlanNlModTypes msg_type, nl_srv_msg_callback msg_handler)
  */
 int nl_srv_ucast(struct sk_buff *skb, int dst_pid, int flag)
 {
-	int err;
+	int err = 0;
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0))
 	NETLINK_CB(skb).pid = 0;        /* sender's pid */
@@ -158,7 +158,8 @@ int nl_srv_ucast(struct sk_buff *skb, int dst_pid, int flag)
 #endif
 	NETLINK_CB(skb).dst_group = 0;  /* not multicast */
 
-	err = netlink_unicast(nl_srv_sock, skb, dst_pid, flag);
+	if (nl_srv_sock)
+		err = netlink_unicast(nl_srv_sock, skb, dst_pid, flag);
 
 	if (err < 0)
 		CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_WARN,
@@ -174,7 +175,7 @@ int nl_srv_ucast(struct sk_buff *skb, int dst_pid, int flag)
  */
 int nl_srv_bcast(struct sk_buff *skb)
 {
-	int err;
+	int err = 0;
 	int flags = GFP_KERNEL;
 
 	if (in_interrupt() || irqs_disabled() || in_atomic())
@@ -187,9 +188,9 @@ int nl_srv_bcast(struct sk_buff *skb)
 #endif
 	NETLINK_CB(skb).dst_group = WLAN_NLINK_MCAST_GRP_ID;    /* destination group */
 
-	err =
-		netlink_broadcast(nl_srv_sock, skb, 0, WLAN_NLINK_MCAST_GRP_ID,
-				  flags);
+	if (nl_srv_sock)
+		err = netlink_broadcast(nl_srv_sock, skb, 0,
+					WLAN_NLINK_MCAST_GRP_ID, flags);
 
 	if (err < 0) {
 		CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_WARN,

+ 8 - 5
core/wma/src/wma_data.c

@@ -1668,11 +1668,14 @@ CDF_STATUS wma_tx_detach(tp_wma_handle wma_handle)
 	ol_txrx_pdev_handle txrx_pdev =
 		(ol_txrx_pdev_handle) (cds_handle->pdev_txrx_ctx);
 
-	/* Deregister with TxRx for Tx Mgmt completion call back */
-	for (frame_index = 0; frame_index < FRAME_INDEX_MAX; frame_index++)
-		ol_txrx_mgmt_tx_cb_set(txrx_pdev, frame_index, NULL, NULL,
-				       txrx_pdev);
-
+	if (txrx_pdev) {
+		/* Deregister with TxRx for Tx Mgmt completion call back */
+		for (frame_index = 0; frame_index < FRAME_INDEX_MAX;
+							frame_index++) {
+			ol_txrx_mgmt_tx_cb_set(txrx_pdev, frame_index, NULL,
+						NULL, txrx_pdev);
+		}
+	}
 	/* Destroy Tx Frame Complete event */
 	cdf_event_destroy(&wma_handle->tx_frm_download_comp_event);