tools:iio:iio_utils: fix allocation handling
authorHartmut Knaack <knaack.h@gmx.de>
Sun, 31 May 2015 12:39:45 +0000 (14:39 +0200)
committerJonathan Cameron <jic23@kernel.org>
Sun, 31 May 2015 16:22:56 +0000 (17:22 +0100)
In build_channel_array(), count needs to be decreased in more places since
current->name and current->generic_name would be freed on the error path,
although they have not been allocated, yet.
This also requires to free current->name, when it is allocated, but
current->generic_name is not yet allocated.

Signed-off-by: Hartmut Knaack <knaack.h@gmx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
tools/iio/iio_utils.c

index 6daf98fdde1ac9b094de0360083477a0e4dec340..1c0ca2f89e187572903de56e2500faa368529565 100644 (file)
@@ -334,6 +334,7 @@ int build_channel_array(const char *device_dir,
                        if (sysfsfp == NULL) {
                                free(filename);
                                ret = -errno;
+                               count--;
                                goto error_cleanup_array;
                        }
                        fscanf(sysfsfp, "%i", &current_enabled);
@@ -353,6 +354,7 @@ int build_channel_array(const char *device_dir,
                        if (current->name == NULL) {
                                free(filename);
                                ret = -ENOMEM;
+                               count--;
                                goto error_cleanup_array;
                        }
                        /* Get the generic and specific name elements */
@@ -360,6 +362,8 @@ int build_channel_array(const char *device_dir,
                                                     &current->generic_name);
                        if (ret) {
                                free(filename);
+                               free(current->name);
+                               count--;
                                goto error_cleanup_array;
                        }
                        ret = asprintf(&filename,