mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 16:41:39 +00:00
cpupower: bench: parse.c: fix several resource leaks
The error handling in prepare_output has several issues with resource leaks. Ensure that filename is free'd and the directory stream DIR is closed before returning. Signed-off-by: Colin Ian King <colin.king@canonical.com> Signed-off-by: Thomas Renninger <trenn@suse.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
04b03594c7
commit
983d9e065b
@ -81,14 +81,18 @@ FILE *prepare_output(const char *dirname)
|
|||||||
|
|
||||||
len = strlen(dirname) + 30;
|
len = strlen(dirname) + 30;
|
||||||
filename = malloc(sizeof(char) * len);
|
filename = malloc(sizeof(char) * len);
|
||||||
|
if (!filename) {
|
||||||
|
perror("malloc");
|
||||||
|
goto out_dir;
|
||||||
|
}
|
||||||
|
|
||||||
if (uname(&sysdata) == 0) {
|
if (uname(&sysdata) == 0) {
|
||||||
len += strlen(sysdata.nodename) + strlen(sysdata.release);
|
len += strlen(sysdata.nodename) + strlen(sysdata.release);
|
||||||
filename = realloc(filename, sizeof(char) * len);
|
filename = realloc(filename, sizeof(char) * len);
|
||||||
|
|
||||||
if (filename == NULL) {
|
if (!filename) {
|
||||||
perror("realloc");
|
perror("realloc");
|
||||||
return NULL;
|
goto out_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(filename, len - 1, "%s/benchmark_%s_%s_%li.log",
|
snprintf(filename, len - 1, "%s/benchmark_%s_%s_%li.log",
|
||||||
@ -104,12 +108,16 @@ FILE *prepare_output(const char *dirname)
|
|||||||
if (output == NULL) {
|
if (output == NULL) {
|
||||||
perror("fopen");
|
perror("fopen");
|
||||||
fprintf(stderr, "error: unable to open logfile\n");
|
fprintf(stderr, "error: unable to open logfile\n");
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stdout, "Logfile: %s\n", filename);
|
fprintf(stdout, "Logfile: %s\n", filename);
|
||||||
|
|
||||||
free(filename);
|
|
||||||
fprintf(output, "#round load sleep performance powersave percentage\n");
|
fprintf(output, "#round load sleep performance powersave percentage\n");
|
||||||
|
out:
|
||||||
|
free(filename);
|
||||||
|
out_dir:
|
||||||
|
closedir(dir);
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user