2024-05-15 18:28:25

by Samasth Norway Ananda

[permalink] [raw]
Subject: [PATCH RESEND] perf test pmu: Fix file Leak in test_format_dir_get

File is opened inside the for loop. But if the 'if' condition is
successful then 'break' statement will be reached, exiting the
'for' loop prior to reaching 'fclose'.

Signed-off-by: Samasth Norway Ananda <[email protected]>
---
Found this error through static analysis. This has only been compile
tested.
---
tools/perf/tests/pmu.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c
index 8f18127d876a..f751e6cb6ac0 100644
--- a/tools/perf/tests/pmu.c
+++ b/tools/perf/tests/pmu.c
@@ -106,8 +106,10 @@ static char *test_format_dir_get(char *dir, size_t sz)
if (!file)
return NULL;

- if (1 != fwrite(format->value, strlen(format->value), 1, file))
+ if (1 != fwrite(format->value, strlen(format->value), 1, file)) {
+ fclose(file);
break;
+ }

fclose(file);
}
--
2.43.0



2024-05-15 21:14:41

by Ian Rogers

[permalink] [raw]
Subject: Re: [PATCH RESEND] perf test pmu: Fix file Leak in test_format_dir_get

On Wed, May 15, 2024 at 11:27 AM Samasth Norway Ananda
<[email protected]> wrote:
>
> File is opened inside the for loop. But if the 'if' condition is
> successful then 'break' statement will be reached, exiting the
> 'for' loop prior to reaching 'fclose'.
>
> Signed-off-by: Samasth Norway Ananda <[email protected]>
> ---
> Found this error through static analysis. This has only been compile
> tested.

Thanks Samasth, I agree with the fix however this code was recently
deleted and isn't in our next tree:
https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git/tree/tools/perf/tests/pmu.c?h=perf-tools-next
the change that removed the code is:
https://lore.kernel.org/all/[email protected]/

Thanks,
Ian

> ---
> tools/perf/tests/pmu.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c
> index 8f18127d876a..f751e6cb6ac0 100644
> --- a/tools/perf/tests/pmu.c
> +++ b/tools/perf/tests/pmu.c
> @@ -106,8 +106,10 @@ static char *test_format_dir_get(char *dir, size_t sz)
> if (!file)
> return NULL;
>
> - if (1 != fwrite(format->value, strlen(format->value), 1, file))
> + if (1 != fwrite(format->value, strlen(format->value), 1, file)) {
> + fclose(file);
> break;
> + }
>
> fclose(file);
> }
> --
> 2.43.0
>