Wifi-HAL: Fix possible memory leak in llstats
am: 301f662f9d
Change-Id: I8a9bbf3f769238700874a97e515a2371f48789a4
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;
}