diff --git a/qcwcn/wifi_hal/llstats.cpp b/qcwcn/wifi_hal/llstats.cpp
index c0e72fb..419c3c0 100644
--- a/qcwcn/wifi_hal/llstats.cpp
+++ b/qcwcn/wifi_hal/llstats.cpp
@@ -1020,6 +1020,11 @@
                                     mResultsParams.radio_stat);
                             if(mResultsParams.radio_stat)
                             {
+                                if (mResultsParams.radio_stat->tx_time_per_levels)
+                                {
+                                    free(mResultsParams.radio_stat->tx_time_per_levels);
+                                    mResultsParams.radio_stat->tx_time_per_levels = NULL;
+                                }
                                 free(mResultsParams.radio_stat);
                                 mResultsParams.radio_stat = NULL;
                             }
@@ -1033,7 +1038,7 @@
                 case QCA_NL80211_VENDOR_SUBCMD_LL_STATS_TYPE_PEERS:
                 {
                     struct nlattr *peerInfo;
-                    wifi_iface_stat *pIfaceStat;
+                    wifi_iface_stat *pIfaceStat = NULL;
                     u32 numPeers, num_rates = 0;
                     if (!tb_vendor[
                             QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_NUM_PEERS])
@@ -1098,9 +1103,12 @@
                         }
 
                         memset(pIfaceStat, 0, resultsBufSize);
-                        if(mResultsParams.iface_stat)
+                        if(mResultsParams.iface_stat) {
                             memcpy ( pIfaceStat, mResultsParams.iface_stat,
                                 sizeof(wifi_iface_stat));
+                            free (mResultsParams.iface_stat);
+                            mResultsParams.iface_stat = pIfaceStat;
+                        }
                         wifi_peer_info *pPeerStats;
                         pIfaceStat->num_peers = numPeers;
 
@@ -1132,9 +1140,6 @@
                                 goto cleanup;
                             }
                         }
-                        if(mResultsParams.iface_stat)
-                            free (mResultsParams.iface_stat);
-                        mResultsParams.iface_stat = pIfaceStat;
                     }
 
                     // Number of Radios are 1 for now
@@ -1143,6 +1148,11 @@
                             mResultsParams.radio_stat);
                     if(mResultsParams.radio_stat)
                     {
+                        if (mResultsParams.radio_stat->tx_time_per_levels)
+                        {
+                            free(mResultsParams.radio_stat->tx_time_per_levels);
+                            mResultsParams.radio_stat->tx_time_per_levels = NULL;
+                        }
                         free(mResultsParams.radio_stat);
                         mResultsParams.radio_stat = NULL;
                     }
@@ -1207,6 +1217,11 @@
 cleanup:
     if(mResultsParams.radio_stat)
     {
+        if (mResultsParams.radio_stat->tx_time_per_levels)
+        {
+            free(mResultsParams.radio_stat->tx_time_per_levels);
+            mResultsParams.radio_stat->tx_time_per_levels = NULL;
+        }
         free(mResultsParams.radio_stat);
         mResultsParams.radio_stat = NULL;
     }
