Fix memleak in add_binary and remove_binary 75/107275/3 submit/tizen_3.0/20161228.101250
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Tue, 27 Dec 2016 08:08:26 +0000 (11:08 +0300)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Wed, 28 Dec 2016 08:07:10 +0000 (11:07 +0300)
Change-Id: I5ffe57492cfd6cf6b8117c9d80bac298191d51f0
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
Signed-off-by: Dmitry Kovalenko <d.kovalenko@samsung.com>
helper/dahelper.c

index 74861d9..caa2183 100755 (executable)
@@ -195,18 +195,24 @@ int add_binary(char *path)
        if (!SLIST_EMPTY(&gTraceInfo.bins_info.bins_list) &&
                (_find_binary_no_lock(real_path) != NULL)) {
                ret = -EALREADY;
-               goto add_bin_unlock;
+               goto free_real_path;
        }
 
        bin_info = malloc(sizeof(*bin_info));
        if (bin_info == NULL) {
                ret = -ENOMEM;
-               goto add_bin_unlock;
+               goto free_real_path;
        }
 
        /* TODO Slow copy / cleanup of memory allocated somewhere else? */
        bin_info->path = real_path;
        SLIST_INSERT_HEAD(&gTraceInfo.bins_info.bins_list, bin_info, list);
+       /* Success */
+       goto add_bin_unlock;
+
+free_real_path:
+       /* Something went wrong */
+       free(real_path);
 
 add_bin_unlock:
        pthread_mutex_unlock(&gTraceInfo.bins_info.bins_mutex);
@@ -241,9 +247,12 @@ int remove_binary(char *path)
        }
 
        SLIST_REMOVE(&gTraceInfo.bins_info.bins_list, bin_info, bin_info_t, list);
+       free(bin_info->path);
+       free(bin_info);
 
 remove_bin_unlock:
        pthread_mutex_unlock(&gTraceInfo.bins_info.bins_mutex);
+       free(real_path);
 
        return ret;
 }