diff options
author | Hartmut Knaack <knaack.h@gmx.de> | 2015-05-31 08:39:44 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2015-05-31 12:20:16 -0400 |
commit | 63f05c855f3825b89b92cd21df0415e6e32af3dd (patch) | |
tree | d798e25a74fd44dad2c3311b88ffd42cd55d1bf8 /tools/iio | |
parent | 66dd08fde06e5ad6f0f86c7a780d60973e9d9cf0 (diff) |
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: Hartmut Knaack <knaack.h@gmx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'tools/iio')
-rw-r--r-- | tools/iio/generic_buffer.c | 8 | ||||
-rw-r--r-- | tools/iio/iio_utils.c | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index 7859ee9a46b2..0410948e23c2 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c | |||
@@ -255,7 +255,7 @@ int main(int argc, char **argv) | |||
255 | "%siio:device%d/buffer", iio_dir, dev_num); | 255 | "%siio:device%d/buffer", iio_dir, dev_num); |
256 | if (ret < 0) { | 256 | if (ret < 0) { |
257 | ret = -ENOMEM; | 257 | ret = -ENOMEM; |
258 | goto error_free_triggername; | 258 | goto error_free_channels; |
259 | } | 259 | } |
260 | 260 | ||
261 | if (!notrigger) { | 261 | if (!notrigger) { |
@@ -351,6 +351,12 @@ error_free_data: | |||
351 | free(data); | 351 | free(data); |
352 | error_free_buf_dir_name: | 352 | error_free_buf_dir_name: |
353 | free(buf_dir_name); | 353 | free(buf_dir_name); |
354 | error_free_channels: | ||
355 | for (i = num_channels - 1; i >= 0; i--) { | ||
356 | free(channels[i].name); | ||
357 | free(channels[i].generic_name); | ||
358 | } | ||
359 | free(channels); | ||
354 | error_free_triggername: | 360 | error_free_triggername: |
355 | if (datardytrigger) | 361 | if (datardytrigger) |
356 | free(trigger_name); | 362 | free(trigger_name); |
diff --git a/tools/iio/iio_utils.c b/tools/iio/iio_utils.c index f879ad7b88bc..6daf98fdde1a 100644 --- a/tools/iio/iio_utils.c +++ b/tools/iio/iio_utils.c | |||
@@ -410,8 +410,10 @@ int build_channel_array(const char *device_dir, | |||
410 | return 0; | 410 | return 0; |
411 | 411 | ||
412 | error_cleanup_array: | 412 | error_cleanup_array: |
413 | for (i = count - 1; i >= 0; i--) | 413 | for (i = count - 1; i >= 0; i--) { |
414 | free((*ci_array)[i].name); | 414 | free((*ci_array)[i].name); |
415 | free((*ci_array)[i].generic_name); | ||
416 | } | ||
415 | free(*ci_array); | 417 | free(*ci_array); |
416 | error_close_dir: | 418 | error_close_dir: |
417 | closedir(dp); | 419 | closedir(dp); |