Commit 63f05c85 authored by Hartmut Knaack's avatar Hartmut Knaack Committed by Jonathan Cameron
Browse files

tools:iio: free channel-array completely



In iio_utils.c build_channel_array() dynamically allocates the string
generic_name in the current iio_channel_info, which doesn't got freed in
case of an error.
This dynamically allocated channel-array is used by generic_buffer, and
needs to be freed on the error/exit path.

Signed-off-by: default avatarHartmut Knaack <knaack.h@gmx.de>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 66dd08fd
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -255,7 +255,7 @@ int main(int argc, char **argv)
		       "%siio:device%d/buffer", iio_dir, dev_num);
	if (ret < 0) {
		ret = -ENOMEM;
		goto error_free_triggername;
		goto error_free_channels;
	}

	if (!notrigger) {
@@ -351,6 +351,12 @@ error_free_data:
	free(data);
error_free_buf_dir_name:
	free(buf_dir_name);
error_free_channels:
	for (i = num_channels - 1; i >= 0; i--) {
		free(channels[i].name);
		free(channels[i].generic_name);
	}
	free(channels);
error_free_triggername:
	if (datardytrigger)
		free(trigger_name);
+3 −1
Original line number Diff line number Diff line
@@ -410,8 +410,10 @@ int build_channel_array(const char *device_dir,
	return 0;

error_cleanup_array:
	for (i = count - 1;  i >= 0; i--)
	for (i = count - 1;  i >= 0; i--) {
		free((*ci_array)[i].name);
		free((*ci_array)[i].generic_name);
	}
	free(*ci_array);
error_close_dir:
	closedir(dp);