Skip to content

Commit

Permalink
tools/iio/iio_utils:fix memory leak
Browse files Browse the repository at this point in the history
1. fopen sysfs without fclose.
2. asprintf filename without free.
3. if asprintf return error,do not need to free the buffer.

Signed-off-by: Yulong Zhang <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jonathan Cameron <[email protected]>
  • Loading branch information
Yulong Zhang authored and jic23 committed Jan 21, 2023
1 parent 05f59ab commit f2edf0c
Showing 1 changed file with 6 additions and 17 deletions.
23 changes: 6 additions & 17 deletions tools/iio/iio_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ int iioutils_get_param_float(float *output, const char *param_name,
if (fscanf(sysfsfp, "%f", output) != 1)
ret = errno ? -errno : -ENODATA;

fclose(sysfsfp);
break;
}
error_free_filename:
Expand Down Expand Up @@ -345,9 +346,9 @@ int build_channel_array(const char *device_dir, int buffer_idx,
}

sysfsfp = fopen(filename, "r");
free(filename);
if (!sysfsfp) {
ret = -errno;
free(filename);
goto error_close_dir;
}

Expand All @@ -357,19 +358,16 @@ int build_channel_array(const char *device_dir, int buffer_idx,
if (fclose(sysfsfp))
perror("build_channel_array(): Failed to close file");

free(filename);
goto error_close_dir;
}
if (ret == 1)
(*counter)++;

if (fclose(sysfsfp)) {
ret = -errno;
free(filename);
goto error_close_dir;
}

free(filename);
}

*ci_array = malloc(sizeof(**ci_array) * (*counter));
Expand All @@ -395,30 +393,27 @@ int build_channel_array(const char *device_dir, int buffer_idx,
}

sysfsfp = fopen(filename, "r");
free(filename);
if (!sysfsfp) {
ret = -errno;
free(filename);
count--;
goto error_cleanup_array;
}

errno = 0;
if (fscanf(sysfsfp, "%i", &current_enabled) != 1) {
ret = errno ? -errno : -ENODATA;
free(filename);
count--;
goto error_cleanup_array;
}

if (fclose(sysfsfp)) {
ret = -errno;
free(filename);
count--;
goto error_cleanup_array;
}

if (!current_enabled) {
free(filename);
count--;
continue;
}
Expand All @@ -429,7 +424,6 @@ int build_channel_array(const char *device_dir, int buffer_idx,
strlen(ent->d_name) -
strlen("_en"));
if (!current->name) {
free(filename);
ret = -ENOMEM;
count--;
goto error_cleanup_array;
Expand All @@ -439,7 +433,6 @@ int build_channel_array(const char *device_dir, int buffer_idx,
ret = iioutils_break_up_name(current->name,
&current->generic_name);
if (ret) {
free(filename);
free(current->name);
count--;
goto error_cleanup_array;
Expand All @@ -450,17 +443,16 @@ int build_channel_array(const char *device_dir, int buffer_idx,
scan_el_dir,
current->name);
if (ret < 0) {
free(filename);
ret = -ENOMEM;
goto error_cleanup_array;
}

sysfsfp = fopen(filename, "r");
free(filename);
if (!sysfsfp) {
ret = -errno;
fprintf(stderr, "failed to open %s\n",
filename);
free(filename);
fprintf(stderr, "failed to open %s/%s_index\n",
scan_el_dir, current->name);
goto error_cleanup_array;
}

Expand All @@ -470,17 +462,14 @@ int build_channel_array(const char *device_dir, int buffer_idx,
if (fclose(sysfsfp))
perror("build_channel_array(): Failed to close file");

free(filename);
goto error_cleanup_array;
}

if (fclose(sysfsfp)) {
ret = -errno;
free(filename);
goto error_cleanup_array;
}

free(filename);
/* Find the scale */
ret = iioutils_get_param_float(&current->scale,
"scale",
Expand Down

0 comments on commit f2edf0c

Please sign in to comment.