hal: Fix memory leak in HAL debug logs

String returned from str_parms_to_str for set/get parameter in
debug logs is not de-allocated. Fix is to make sure the memory
allocated for set parameter key value pair is de-allocated.

CRs-Fixed: 610079
Change-Id: I5027d8f1741c9e7223e7b4721f8d5473404998d3
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 89903ba..ad487b1 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -326,9 +326,12 @@
                               struct str_parms *query,
                               struct str_parms *reply)
 {
+    char *kv_pairs = NULL;
     audio_extn_get_afe_proxy_parameters(query, reply);
 
-    ALOGD("%s: returns %s", __func__, str_parms_to_str(reply));
+    kv_pairs = str_parms_to_str(reply);
+    ALOGD_IF(kv_pairs != NULL, "%s: returns %s", __func__, kv_pairs);
+    free(kv_pairs);
 }
 
 #ifdef AUXPCM_BT_ENABLED
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index a25991f..4648dbb 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -1481,8 +1481,9 @@
     char value[256] = {0};
     int val;
     int ret = 0, err;
+    char *kv_pairs = str_parms_to_str(parms);
 
-    ALOGV("%s: enter: %s", __func__, str_parms_to_str(parms));
+    ALOGV_IF(kv_pairs != NULL, "%s: enter: %s", __func__, kv_pairs);
 
     err = str_parms_get_int(parms, AUDIO_PARAMETER_KEY_BTSCO, &val);
     if (err >= 0) {
@@ -1527,6 +1528,7 @@
     }
 
     ALOGV("%s: exit with code(%d)", __func__, ret);
+    free(kv_pairs);
     return ret;
 }
 
@@ -1625,6 +1627,7 @@
     char value[256] = {0};
     int ret;
     int fluence_type;
+    char *kv_pairs = NULL;
 
     ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_FLUENCE_TYPE,
                             value, sizeof(value));
@@ -1660,7 +1663,9 @@
         str_parms_add_str(reply, AUDIO_PARAMETER_KEY_VOLUME_BOOST, value);
     }
 
-    ALOGV("%s: exit: returns - %s", __func__, str_parms_to_str(reply));
+    kv_pairs = str_parms_to_str(reply);
+    ALOGV_IF(kv_pairs != NULL, "%s: exit: returns - %s", __func__, kv_pairs);
+    free(reply);
 }
 
 /* Delay in Us */
diff --git a/hal/voice.c b/hal/voice.c
index 8783f01..28d44db 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -364,8 +364,9 @@
     char value[32];
     int val;
     int ret = 0, err;
+    char *kv_pairs = str_parms_to_str(parms);
 
-    ALOGV("%s: enter: %s", __func__, str_parms_to_str(parms));
+    ALOGV_IF(kv_pairs != NULL, "%s: enter: %s", __func__, kv_pairs);
 
     ret = voice_extn_set_parameters(adev, parms);
     if (ret != 0)
@@ -413,6 +414,7 @@
 
 done:
     ALOGV("%s: exit with code(%d)", __func__, ret);
+    free(kv_pairs);
     return ret;
 }
 
diff --git a/hal/voice_extn/compress_voip.c b/hal/voice_extn/compress_voip.c
index 5c87c9c..4db46f6 100644
--- a/hal/voice_extn/compress_voip.c
+++ b/hal/voice_extn/compress_voip.c
@@ -411,8 +411,9 @@
     int ret = 0, err, rate;
     int min_rate, max_rate;
     bool flag;
+    char *kv_pairs = str_parms_to_str(parms);
 
-    ALOGV("%s: enter: %s", __func__, str_parms_to_str(parms));
+    ALOGV_IF(kv_pairs != NULL, "%s: enter: %s", __func__, kv_pairs);
 
     err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_VOIP_RATE,
                             value, sizeof(value));
@@ -453,6 +454,7 @@
 
 done:
     ALOGV("%s: exit", __func__);
+    free(kv_pairs);
     return ret;
 }
 
@@ -499,6 +501,7 @@
 {
     int ret, val;
     char value[32]={0};
+    char *kv_pairs = NULL;
 
     ALOGV("%s: enter", __func__);
 
@@ -511,7 +514,9 @@
             str_parms_add_int(reply, AUDIO_PARAMETER_KEY_VOIP_CHECK, false);
     }
 
-    ALOGD("%s: exit: return - %s", __func__, str_parms_to_str(reply));
+    kv_pairs = str_parms_to_str(reply);
+    ALOGD_IF(kv_pairs != NULL, "%s: exit: return - %s", __func__, kv_pairs);
+    free(kv_pairs);
 }
 
 int voice_extn_compress_voip_out_get_buffer_size(struct stream_out *out)
diff --git a/hal/voice_extn/voice_extn.c b/hal/voice_extn/voice_extn.c
index b8bc2df..5612e0c 100644
--- a/hal/voice_extn/voice_extn.c
+++ b/hal/voice_extn/voice_extn.c
@@ -427,8 +427,9 @@
     char *str;
     int value;
     int ret = 0, err;
+    char *kv_pairs = str_parms_to_str(parms);
 
-    ALOGV("%s: enter: %s", __func__, str_parms_to_str(parms));
+    ALOGV_IF(kv_pairs != NULL, "%s: enter: %s", __func__, kv_pairs);
 
     err = str_parms_get_int(parms, AUDIO_PARAMETER_KEY_VSID, &value);
     if (err >= 0) {
@@ -458,6 +459,7 @@
 
 done:
     ALOGV("%s: exit with code(%d)", __func__, ret);
+    free(kv_pairs);
     return ret;
 }
 
@@ -485,9 +487,10 @@
 {
     int ret;
     char value[VOICE_EXTN_PARAMETER_VALUE_MAX_LEN] = {0};
-    char *str = NULL;
+    char *str = str_parms_to_str(query);
 
-    ALOGV("%s: enter %s", __func__, str_parms_to_str(query));
+    ALOGV_IF(str != NULL, "%s: enter %s", __func__, str);
+    free(str);
 
     ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_AUDIO_MODE, value,
                             sizeof(value));
@@ -507,7 +510,9 @@
     }
     voice_extn_compress_voip_get_parameters(adev, query, reply);
 
-    ALOGV("%s: exit: returns \"%s\"", __func__, str_parms_to_str(reply));
+    str = str_parms_to_str(reply);
+    ALOGV_IF(str != NULL, "%s: exit: returns \"%s\"", __func__, str);
+    free(str);
 }
 
 void voice_extn_out_get_parameters(struct stream_out *out,