Przeglądaj źródła

tools:iio:iio_utils: fix allocation handling

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>
Hartmut Knaack 10 lat temu
rodzic
commit
121b5e505f
1 zmienionych plików z 4 dodań i 0 usunięć
  1. 4 0
      tools/iio/iio_utils.c

+ 4 - 0
tools/iio/iio_utils.c

@@ -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,